Movatterモバイル変換


[0]ホーム

URL:


ข้ามไปเนื้อหา
วิกิพีเดียสารานุกรมเสรี
ค้นหา

Session Initiation Protocol

จากวิกิพีเดีย สารานุกรมเสรี
บทความนี้ต้องการตรวจสอบความถูกต้องจากผู้เชี่ยวชาญในเรื่องนั้น ๆ โปรดเพิ่มพารามิเตอร์reason หรือtalk ลงในแม่แบบนี้เพื่ออธิบายปัญหาของบทความ
เมื่อวางแท็กนี้ ให้พิจารณาเชื่อมโยงคำขอนี้กับโครงการวิกิ

Session Initiation Protocol (SIP) คือโพรโทคอลหรือเกณฑ์วิธีเพื่อใช้งานด้านมัลติมีเดีย เช่น การส่งข้อมูลเสียงหรือวิดีโอบนเครือข่ายIP ได้รับการพัฒนาโดยIETF และ SIP ถือว่าเป็นโพรโทคอลที่เหนือกว่าโพรโทคอลอื่นในแง่ของการที่สามารถปรับใช้และนำไปพัฒนาได้ง่ายกว่า โดยตัวโพรโทคอลเองมีความสามารถในการสร้าง (create) , ปรับ (modify) และ ยกเลิก (terminate) การติดต่อสื่อสารระหว่างโหนดที่เป็นแบบหนึ่งต่อหนึ่ง (unicast) หรือแบบกลุ่ม (multicast) ได้ ซึ่ง SIP สามารถปรับเปลี่ยนที่อยู่ (address), หมายเลขพอร์ต, เพิ่มสายผู้สนทนา และสามารถเพิ่มหรือลดการส่งข้อมูลมิเดีย (media stream) บางประเภทได้ ตัวอย่างของโปรแกรมประยุกต์ (application) ที่อาศัย SIP ในการเชื่อมต่อ เช่น การประชุมด้วยวิดีโอ (video conferencing), การกระจายข้อมูลภาพและเสียง (streaming multimedia distribution), การส่งข้อความด่วน (instant messaging), การส่งไฟล์ (file transfer) และ เกมออนไลน์ เป็นต้น

SIP ถูกออกแบบโดยนาย Henning Schulzrinne และนาย Mark Handly ตั้งแต่ปี ค.ศ. 1996 โดยเวอร์ชันล่าสุดถูกประกาศในRFC 3261 โดยIETF Network Working Group และในปี ค.ศ. 2000 SIP ได้ถูกใช้เป็นส่วนหนึ่งของระบบ IP Multimedia Subsystem (IMS) ของ 3GPP ซึ่งมาตรฐานการส่งสัญญาณมัลติมีเดียแบบ IP-based บนระบบ โทรศัพท์เคลื่อนที่ (cellular) อีกด้วย

โพรโทคอล SIP ทำงานอยู่บน Application Layer และถูกออกแบบโดยไม่คำนึงถึงชนิดของ Transport Layer ที่ใช้ในการส่งข้อมูล SIP สามารถทำงานบน Transmision Control Protocol (TCP), User Datagram Protocol (UDP), หรือ Stream Control Transmission Protocol (SCTP) ได้ โพรโทคอล SIP ทำงานในลักษณะ text-based ซึ่งมีลักษณะการทำงานคล้าย Hypertext Transfer Protocol (HTTP) และ Simple Mail Transfer Protocol (SMTP)

การออกแบบโพรโทคอล

[แก้]

โพรโทคอล SIP ถูกออกแบบมาคล้ายกับโพรโทคอล HTTP ในส่วนของการร้องขอและการตอบรับ (request/response) ระหว่างลูกข่าย (client) ซึ่งเป็นผู้เริ่มต้นการเชื่อมต่อ โดยส่งการร้องขอ (request) การทำงานบางอย่างกับเครื่องแม่ข่าย (server) และ SIP ยังใช้ข้อมูล header, กฎการเข้ารหัส และหมายเลขสถานะ (status codes) เหมือนกับ HTTP อีกด้วย

ในการส่งสัญญาณมีเดีย SIP จะต้องทำงานร่วมกับโพรโทคอลอื่น ๆ ในการส่งสัญญาณ แต่ SIP เท่านั้นที่จะถูกใช้เป็นตัวเริ่มต้นการสื่อสาร (communication session) โดยปกติ SIP ฝั่งลูกข่าย (client) จะใช้โพรโทคอล TCP หรือ UDP พอร์ตหมายเลข 5060 หรือ 5061 ในการเชื่อมต่อกับเครื่องแม่ข่าย (server) หรือ SIP endpoint โดยพอร์ตหมายเลข 5060 จะใช้ในการส่งสัญญาณแบบไม่เข้ารหัส (non-encrypted signaling traffic) ส่วนพอร์ตหมายเลข 5061 จะใช้ในกรณีที่มีการส่งสัญญาณแบบเข้ารหัส และจะทำงานร่วมกับ Transport Layer Security (TLS) อีกที โดยหลัก ๆ แล้ว SIP จะทำหน้าที่ติดต่อหรือยกเลิกการส่งสัญญาณเสียงหรือภาพวิดีโอ ซึ่งในโปรแกรมประยุกต์หลายชนิดจะใช้ SIP ในการส่งข้อมูลมิเดียเช่น โปรแกรม instant messaging ที่สามารถส่งภาพและเสียงพร้อมกันได้ นอกจากนี้ยังมีเอกสารหลากหลายฉบับที่เกี่ยวข้องกับ SIP ซึ่งถูกประกาศโดยIETF เช่น Real-time Transport Protocol (RTP), Session Description Protocol (SDP) โดย SDP จะถูกใช้ร่วมกับ SIP สำหรับการทำข้อตกลง (negotiate) รูปแบบตัวแปรที่ใช้ในการเชื่อมต่อข้อมูลมิเดีย เช่น หมายเลขพอร์ต,โพรโทคอล, การเข้ารหัสสัญญาณมิเดีย (codecs) โดยข้อมูลของ SDP เหล่านี้จะถูกส่งภายใต้ข้อมูลของ SIP packet body อีกที

เป้าหมายในการออกแบบโพรโทคอล SIP ก็เพื่อใช้เป็นมาตรฐานในการเริ่มต้นการส่งสัญญาณโทรศัพท์ (signaling and call setup protocol) บนเครือข่ายแบบ IP-based และสามารถทำงานร่วมกับ public switched telephone network (PSTN) ที่มีอยู่เดิมได้ทันที และ SIP ถูกออกแบบมาโดยอ้างอิงถึงการเชื่อมต่อกันระว่าง proxy server และ user agents เพื่อให้มีลักษณะคล้ายกับการทำงานของโทรศัพท์มากที่สุด เช่น การส่งหมายเลข (dialing a number), การส่งสัญญาณกระดิ่ง (ringing), การส่งสัญญาญรอการเชื่อมต่อ (ring back) และการส่งสัญญาณสายไม่ว่าง (busy tone)

โพรโทคอล SIP ยังเพิ่มความสามารถพิเศษให้กับโพรโทคอล Signaling System 7 (SS7) อีกด้วย ถึงแม้ทั้งสองโพรโทคอลจะทำงานแตกต่างกันมาก เพราะ SS7 เป็นโพรโทคอลที่ทำงานอยู่บนแกนกลางของระบบเครือข่ายที่เชื่อมต่อกับเครื่องลูกข่ายจำนวนมาก ซึ่งจะแตกต่างกับ SIP ที่เป็นโพรโทคอลที่ทำงานแบบ peer-to-peer ที่ทำงานระหว่าง endpoint กับ endpoint

ถึงแม้ว่าจะมีโพรโทคอลหลากหลายที่ใช้งานบน VoIP signaling protocols แต่ SIP ยังเป็นที่นิยมในการสื่อสารแบบ IP community มากกว่า telecommunications industry นอกจาก SIP แล้วยังมีโพรโทคอล H.323 ของ International Telecommunication Union (ITU) ที่ทำงานลักษณะเดียวกันอีกด้วย

เอกสารการทำงานของ SIP เวอร์ชัน 2.0 ประกาศครั้งแรกในRFC 2543 และถูกปรับปรุงอีกครั้งในRFC 3261

ส่วนประกอบเครือข่าย SIP

[แก้]
  • User Agent (UA) คือ แอปพลิเคชันที่ทำหน้าที่ส่งและรับ SIP messages และจัดการเซสชั่นของการเชื่อมต่อ โดยที่ User Agent (UA) สามารถทำหน้าที่เป็น User Agent Client (UAC) และ User Agent Server (UAS) ได้
  • User Agent Client (UAC) คือไคลเอนต์ที่ส่ง SIP request ไปยัง User Agent Server (UAS)
  • User Agent Server (UAS) คือแม่ข่ายที่รับ request และส่ง response กลับไปหาไคลเอนต์

โดยทั่วไปจะที่ไม่กำหนดตายตัวว่า UA ใดต้องเป็น UAC หรือ UAS ตลอดเวลาขึ้นอยู่กับเซสชั่นนั้นว่าทำหน้าที่อะไร

  • Network Servers แบ่งออกเป็น 2 ชนิด
  1. Proxy server มี 2 ชนิดคือแบบ Stateful และ Stateless แบบ Stateful จะจำเซสชั่นการร้องขอของแต่ละไคล์เอนต์ที่กำลังรอการตอบกลับไว้และจะไม่ทำการส่งต่อการร้องขอซ้ำที่มาจากเซสชั่นที่เดิม ส่วน Stateless จะไม่มีการเก็บเซสชั่น ดังนั้นการร้องขอซ้ำจะถูกส่งต่อไปยังปลายทางทุกครั้งเพราะ Stateless จะไม่มีการจดจำว่าเคยส่งไปแล้วหรือยัง โดยทั้งสองแบบจะทำหน้าเป็นทั้ง UAC และ UAS ที่ทำหน้าที่รับและส่งต่อ SIP Message ของไคลเอนต์ไปยังเครื่องแม่ข่ายอื่น ๆ โดย Proxy server จะส่งข้อมูลในนามของไคลเอนต์ แต่จะมีการเปลี่ยนแปลงข้อมูลผู้ส่งใน SIP Header จากที่อยู่ของไคลเอนต์เป็นที่อยู่ของ Proxy server แทน และเครื่องแม่ข่ายปลายทางจะติดต่อกับไคลเอนต์ผ่าน Proxy server อีกทีหนึ่ง
  2. Redirect server จะทำหน้าที่รับ SIP request จากไคลเอนต์ จากนั้นจะส่งผลลัพธ์เป็นที่อยู่ของเครื่องแม่ข่ายถัดไปไปยังเครื่องไคลเอนต์ โดยที่ Redirect server จะไม่มีการส่งต่อข้อมูล SIP messages ไปยังเครื่องแม่ข่ายอื่น ๆ เหมือน Proxy server

ตัวอย่าง SIP's Call flow

[แก้]
  • แบบ Point to Point

Alice Bob| || 1. INVITE ||- ---------------------->|| 2. 180 Ringing || <-----------------------|| || 3. 200 OK || <-----------------------|| 4. ACK ||- ---------------------->|| RTP Media || <============>|| || 5. BYE || <----------------------- || 6. 200 OK ||- ----------------------> || |

  • แบบ Via Proxy server โทรจาก John's Soft phone ไปยัง Bob's SIP Phone โดยที่ John's Soft phone ส่งข้อมูลผ่าน Proxy server ที่ชื่อ site-a.com ส่วน Bob's SIP Phone ส่งข้อมูลผ่าน Proxy server ที่ชื่อ site-b.com

site-a.com............site-b.com. proxy proxy .. .John's .......................................................... Bob'ssoftphone SIP Phone| | | |John | 1. INVITE | | |เริ่มต้นโทรออก |-----------------> | 2. INVITE | || 3. 100 Trying |---------------> | 4. INVITE || <---------------- | 5. 100 Trying |----------------> || |<-------------- | 6. 180 Ringing | BobJohn | | 7. 180 Ringing |<---------------- | ได้ยินสัญญาณโทรเข้าได้ยิน Ringback tone | 8. 180 Ringing |<--------------- | 9. 200 OK |หรือ Music on hold |<--------------- | 10. 200 OK |<--------------- | Bob รับสาย| 11. 200 OK |<--------------- | || <--------------- | | || 12. ACK F12 ||- -------------------------------------------------------> || RTP Media Session |สนทนา |<==============================> | สนทนา| 13. BYE || <-------------------------------------------------------- | Bob วางหู| 14. 200 OK |John วางหู |--------------------------------------------------------> || |

ตัวอย่าง SIP Request

[แก้]

INVITEsip:junk@realm SIP/2.0Route: <sip:192.168.0.79;lr>Via: SIP/2.0/UDP 192.168.0.200:5060;branch=z9hG4bKrfpISNp7Z6jqnFrom:sip:original@192.168.0.79;tag=aEJISW8NwmTo:sip:junk@realmSupported: 100rel, sec-agreeContact:sip:original@192.168.0.200CSeq: 5714 INVITECall-ID: 34VISPImLSPTBk0OgCZ3lgbCyjup48s: subjectMax-Forwards: 70Content-Type: application/sdpContent-Length: 157v=0o=original 3326093141 3326093142 IN IP4 192.168.0.200s=SipSessionc=IN IP4 192.168.0.200t=0 0m=application 49152 TCP Chipflipa=direction:both

รายละเอียดของ SIP Messages

[แก้]

1xx: การร้องขอและจัดเตรียมทรัพยากรของระบบ (Provisional)

CodeDescriptionReferences
100Trying.RFC 3261
180Ringing.RFC 3261
182Queued.RFC 3261
183Session progress.RFC 3261

2xx:การตอบกลับการร้องขอว่ากระทำสำเร็จ (Success)

CodeDescriptionReferences
200OK.
202Accepted.RFC 3265
204No Notification.

3xx: การส่งต่อและการร้องขอเพิ่มเติมเพื่อทำให้การร้องขอสมบูรณ์ (Redirection)

CodeDescriptionReferences
300Multiple choices.RFC 3261
301Moved permanently.
302Moved temporarily.
305Use proxy.
380Alternative service.

4xx: การตอบกลับข้อผิดพลาดที่เกิดจากไคลเอนต์ (Client error)

CodeDescriptionReferences
400Bad request.
401Unauthorized.
402Payment required.
403Forbidden.
404Not found.
405Bad request.
406Not acceptable.
407Proxy authentication required.
408Request timeout.
410Gone.
412Conditional request failed.RFC 3903
413Request entity too large.
414Request-URI too long.
415Unsupported media type.
416Unsupported URI scheme.
417Unknown Resource-Priority.RFC 4412
420Bad extension.
421Extension required.
422Session Interval too small.RFC 4028
423Interval too brief.
428Use Identity Header.RFC 4474
429Provide referrer identity.RFC 3892
433Anonymity Disallowed.RFC 5079
436Bad Identity-Info.RFC 4474
437Unsupported Certificate.RFC 4474
438Invalid Identity Header.RFC 4474
439First Hop Lacks Outbound Support.RFC 5626
440Max-Breadth Exceeded.RFC 5393
470Consent needed.RFC 5360
480Temporarily unavailable.
481Call/Transaction does not exist.
482Loop detected.
483Too many hops.
484Address incomplete.
485Ambiguous.
486Busy here.
487Request terminated.
488Not acceptable here.
489Bad event.RFC 3265
491Request pending.
493Undecipherable.
494Security agreement required.RFC 3329

5xx: การตอบกลับข้อผิดพลาดที่เกิดจากเครื่องแม่ข่าย (Server error)

CodeDescriptionReferences
500Server internal error.RFC 3261
501Not implemented.
502Bad gateway.
503Service unavailable.RFC 3261
504Server timeout.
505Version not supported.
513Message too large.
580Precondition Failure.RFC 3312

6xx: การร้องขอไม่สามารถดำเนินการได้ (Global failure)

CodeDescriptionReferences
600Busy everywhere.
603Decline.
604Does not exist anywhere.
606Not acceptable.

ตัวอย่างภาษา Perl

[แก้]

use Net::SIP;

  1. create new agent

my $ua = Net::SIP::Simple->new (outgoing_proxy => '192.168.0.10',registrar => '192.168.0.10',domain => 'example.com',from => 'me',auth => [ 'me', 'secret' ], );

  1. Register agent

$ua->register;

  1. Invite other party, send anncouncement once connected

$ua->invite ('you',init_media => $ua->rtp ('send_recv', 'announcement.pcmu-8000' ),asymetric_rtp => 1, );

  1. Mainloop

$ua->loop;

โพรโทคอล
(เปรียบเทียบ)
เปิด
ปิด
บริการ
ไคลเอนต์
(เปรียบเทียบ)
โพรโทคอลเดียว
หลายโพรโทคอล
เอกซ์เอ็มพีพี (แจบเบอร์)
เอ็มเอสเอ็นพี
ดูเพิ่ม
Stub icon

บทความคอมพิวเตอร์อุปกรณ์ต่าง ๆ หรือเครือข่ายนี้ยังเป็นโครง คุณสามารถช่วยวิกิพีเดียได้โดยการเพิ่มเติมข้อมูล

เข้าถึงจาก "https://th.wikipedia.org/w/index.php?title=Session_Initiation_Protocol&oldid=12210248"
หมวดหมู่:
หมวดหมู่ที่ซ่อนอยู่:

[8]ページ先頭

©2009-2025 Movatter.jp