什么是多路復用?什么是多路分解?
UDP和TCP最基本的任務是蚊丐,將兩個端系統(tǒng)間IP的交付服務擴展為運行在兩個端系統(tǒng)上的進程之間的交付服務。將運輸層報文段中的數(shù)據交付到正確的套接字艳吠,被稱為多路分解麦备;從源主機的不同套接字收集數(shù)據塊,并為每個數(shù)據塊封裝上首部信息從而生成報文段昭娩,然后將報文段傳遞到網絡層凛篙,這一工作被稱為多路復用。
多路復用/多路分解的實現(xiàn)
多路復用的要求:
1.套接字有唯一的標示符栏渺;
2.每個報文段有特殊字段來指示該報文段要交付的套接字呛梆。
UDP套接字是由一組二元組來標示報文段的:
1.目的IP地址;
2.目的端口號磕诊。
TCP套接字是由一組四元組來標示報文段的:
1.源IP地址填物;
2.源端口號纹腌;
3.目的IP地址;
4.目的端口號滞磺。
TCP 協(xié)議為終端設備提供了面向連接的升薯、可靠的網絡服務;UDP 協(xié)議為終端設備提供了無連接的击困、不可靠的數(shù)據報服務涎劈。從上圖我們可以看出,TCP 協(xié)議為了保證數(shù)據傳輸?shù)目煽啃栽牟瑁鄬τ赨DP 報文蛛枚,TCP 報文頭部有更多的字段選項。
首先讓我們來看一下 TCP 的報文頭部主要字段:
TCP報文頭
1.源端口號(source port)和目的端口號(destination port):用于標識和區(qū)分源端設備和目的端設備的應用進程脸哀。
在TCP/IP 協(xié)議棧中蹦浦,源端口號和目的端口號分別與源IP 地址和目的IP 地址組成套接字(socket),唯一的確定一條TCP 連接企蹭。
2.序列號(Sequence number):用來標識TCP 源端設備向目的端設備發(fā)送的字節(jié)流白筹,它表示在這個報文段中的第一個數(shù)據字節(jié)。
如果將字節(jié)流看作在兩個應用程序間的單向流動谅摄,則TCP 用序列號對每個字節(jié)進行計數(shù)徒河。序列號是一個32bits 的數(shù)。
3.確認序號(Acknowledgement number送漠,32bits):既然每個傳輸?shù)淖止?jié)都被計數(shù)顽照,確認序號包含發(fā)送確認的一端所期望接收到的下一個序號。
因此闽寡,確認序號應該是上次已成功收到的數(shù)據字節(jié)序列號加1代兵。
4.窗口大小(windows size):TCP 的流量控制由連接的每一端通過聲明的窗口大小來提供爷狈。
窗口大小用數(shù)據包來表示植影,例如Windows size=3, 表示一次可以發(fā)送三個數(shù)據包。窗口大小起始于確認字段指明的值涎永,是一個16bits 字段思币。窗口大小可以調節(jié)。
5.校驗和(checksum):用于校驗TCP 報頭部分和數(shù)據部分的正確性羡微。
6.可選字段:最常見的可選字段是 MSS(Maximum Segment Size谷饿,最大報文大小)妈倔。
MSS指明本端所能夠接收的最大長度的報文段博投。當一個TCP 連接建立時,連接的雙方都要通告各自的MSS 協(xié)商可以傳輸?shù)淖畲髨笪拈L度盯蝴。我們常見的MSS有1024(以太網可達1460 字節(jié))字節(jié)毅哗。
UDP報文頭
相對于 TCP 報文听怕,UDP 報文只有少量的字段:源端口號、目的端口號黎做、長度叉跛、校驗和等,各個字段功能和TCP 報文相應字段一樣蒸殿。
UDP 報文沒有可靠性保證和順序保證字段筷厘,流量控制字段等,可靠性較差宏所。當然酥艳,使用傳輸層UDP 服務的應用程序也有優(yōu)勢。正因為UDP 協(xié)議較少的控制選項爬骤,在數(shù)據傳輸過程中充石,延遲較小,數(shù)據傳輸效率較高霞玄,適合于對可靠性要求并不高的應用程序骤铃,或者可以保障可靠性的應用程序像DNS、 TFTP坷剧、SNMP 等惰爬;UDP 協(xié)議也可以用于傳輸鏈路可靠的網絡。