網(wǎng)絡(luò)協(xié)議IP、TCP And UDP詳解

計(jì)算機(jī)網(wǎng)絡(luò)就是用 物理鏈路 將各個(gè)孤立的工作站或主機(jī)連接在一起,組成 數(shù)據(jù)鏈路,從而達(dá)到資源共享和通信的目的。

網(wǎng)絡(luò)協(xié)議

OSI/RM(開(kāi)放系統(tǒng)互聯(lián)參考模型)模型將計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)劃分為7層。自下而上分別是:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話(huà)層、表示層、應(yīng)用層。

  • 應(yīng)用層:開(kāi)放系統(tǒng)互聯(lián)環(huán)境的最高層,為操作系統(tǒng)或網(wǎng)絡(luò)應(yīng)用程序提供訪問(wèn)網(wǎng)絡(luò)服務(wù)的接口。
  • 表示層:為上層用戶(hù)提供共同的數(shù)據(jù)或信息的語(yǔ)法表示轉(zhuǎn)換。為了讓采用不同編碼方法的計(jì)算機(jī)在通信中能相互理解數(shù)據(jù)的內(nèi)容,可以采用抽象的標(biāo)準(zhǔn)方法來(lái)定義數(shù)據(jù)結(jié)構(gòu),并采用標(biāo)準(zhǔn)的編碼表示形式。表示層管理這些抽象的數(shù)據(jù)結(jié)構(gòu),并將計(jì)算機(jī)內(nèi)部的表示形式轉(zhuǎn)換成網(wǎng)絡(luò)通信中采用的標(biāo)準(zhǔn)表示形式。數(shù)據(jù)壓縮和加密也是表示層提供的表示變換的能力。
  • 會(huì)話(huà)層:主要功能就是組織和同步不同的主機(jī)上各種進(jìn)程間的通信(稱(chēng)為對(duì)話(huà)),負(fù)責(zé)在兩個(gè)會(huì)話(huà)層實(shí)體之間進(jìn)行對(duì)話(huà)鏈接的建立和拆除。
  • 傳輸層:負(fù)責(zé)數(shù)據(jù)傳送的最高層次。傳輸層完成同處于資源子網(wǎng)中的兩個(gè)主機(jī)間的鏈接和數(shù)據(jù)傳輸,也稱(chēng)為端到端的數(shù)據(jù)傳輸。
  • 網(wǎng)絡(luò)層:主要任務(wù)就是選擇合適的路由,使網(wǎng)絡(luò)層的數(shù)據(jù)傳輸單元(分組)能夠正確無(wú)誤的按照地址找到目的站。
  • 數(shù)據(jù)鏈路層:負(fù)責(zé)在兩個(gè)相鄰的節(jié)點(diǎn)間的線(xiàn)路上無(wú)差錯(cuò)的傳輸以幀為單位的數(shù)據(jù)。
  • 物理層:定義了為建立、維護(hù)和拆除物理鏈路所需的機(jī)械的、電氣的、功能的和規(guī)程的特性,其作用是使原始的數(shù)據(jù)比特流能在物理介質(zhì)上傳輸。

IP、TCP/UDP協(xié)議

由于OSI/RM模型過(guò)于復(fù)雜也難以實(shí)現(xiàn),現(xiàn)實(shí)中廣泛使用的是TCP/IP 模型。TCP/IP是一個(gè)協(xié)議集,它也是分層模型,分為四層

屏幕快照 2017-01-09 下午4.33.48.png
  • 應(yīng)用層:應(yīng)用層是大多數(shù)普通與網(wǎng)絡(luò)相關(guān)的程序?yàn)榱送ㄟ^(guò)網(wǎng)絡(luò)與其他程序通信所使用的層。在應(yīng)用層中,數(shù)據(jù)以應(yīng)用內(nèi)部使用的格式進(jìn)行傳送,然后被編碼成標(biāo)準(zhǔn)協(xié)議格式。(如:HTTP協(xié)議、FTP文件傳輸協(xié)議、接收電子郵件的POP3和IMAP協(xié)議、發(fā)送郵件使用的SMTP協(xié)議、遠(yuǎn)程登錄使用的SSH和Telnet等)
  • 傳輸層:傳輸層響應(yīng)來(lái)自應(yīng)用層的服務(wù)請(qǐng)求,并向網(wǎng)絡(luò)層發(fā)出服務(wù)請(qǐng)求。傳輸層提供兩臺(tái)主機(jī)之間透明的數(shù)據(jù)傳輸,通常用于端到端的鏈接、流量控制或錯(cuò)誤恢復(fù)。這一層兩個(gè)最終要的協(xié)議是 TCP(傳輸控制協(xié)議)和UDP(用戶(hù)數(shù)據(jù)包協(xié)議)。
  • 網(wǎng)絡(luò)層:網(wǎng)絡(luò)層提供端到端的數(shù)據(jù)交付,換句話(huà)說(shuō),它負(fù)責(zé)數(shù)據(jù)包從源發(fā)送到目的地,任務(wù)包括網(wǎng)絡(luò)路由、差錯(cuò)控制和IP編址等。這一層的重要協(xié)議是IP(版本4和版本6)、ICMP(Internet控制報(bào)文協(xié)議)和IPSec(Internet協(xié)議安全)。
  • 網(wǎng)絡(luò)接口層:是TCP/IP模型的最底層,負(fù)責(zé)通過(guò)網(wǎng)絡(luò)發(fā)送和接收數(shù)據(jù)報(bào);允許主機(jī)倆如網(wǎng)絡(luò)是使用多種現(xiàn)成的與流行的技術(shù),如以太網(wǎng),令牌網(wǎng)等。

IP協(xié)議

互聯(lián)網(wǎng)協(xié)議(Internet Protocol)是用于報(bào)文交換網(wǎng)絡(luò)的一種面向數(shù)據(jù)的協(xié)議。IP實(shí)在TCP/IP協(xié)議中網(wǎng)絡(luò)層的主要協(xié)議,任務(wù)根據(jù)源主機(jī)和目的主機(jī)的地址傳送數(shù)據(jù)。為達(dá)到此目的,IP定義了尋址方法和數(shù)據(jù)報(bào)的封裝結(jié)構(gòu)。第一個(gè)架構(gòu)的主要版本是IPv4,現(xiàn)在仍是最主要的互聯(lián)網(wǎng)協(xié)議。

IP包格式:一個(gè)IP分為頭部(header)和數(shù)據(jù)(payload/data)兩部分。頭部是為實(shí)現(xiàn)IP通信必須的附加信息,數(shù)據(jù)是IP通信要傳送的信息。

屏幕快照 2017-01-10 上午11.06.37.png
  • 版本號(hào)(Version):長(zhǎng)度4bit(位),標(biāo)識(shí)目前采用的IP協(xié)議的版本號(hào)。IPv4值為 0100,IPv6值為0110。
  • IP包頭部長(zhǎng)度(IHL:Internet Header Length):長(zhǎng)度4bit,作用是用來(lái)描述IP包頭部長(zhǎng)度,因?yàn)樵贗P包中有變化的可選部分。一個(gè)IP包頭部最大長(zhǎng)度為60個(gè)字節(jié),最小長(zhǎng)度為20個(gè)字節(jié)。IPv6的頭部固定長(zhǎng)度為40bytes,所以IPv6沒(méi)有IHL區(qū)域。
  • 服務(wù)類(lèi)型(Type of Service):長(zhǎng)度8bit,8位按位被如下定義PPPDTRC0

PPP:定義包的優(yōu)先級(jí),取值越大數(shù)據(jù)越重要。
000 普通 (Routine)
001 優(yōu)先的 (Priority)
010 立即的發(fā)送 (Immediate)
011 閃電式的 (Flash)
100 比閃電還閃電式的 (Flash Override)
101 CRI/TIC/ECP(找不到這個(gè)詞的翻譯)
110 網(wǎng)間控制 (Internetwork Control)
111 網(wǎng)絡(luò)控制 (Network Control)
D 延時(shí):0普通,1延時(shí)盡量小
T 吞吐量: 0:普通 1:流量盡量大
R 可靠性: 0:普通 1:可靠性盡量大
M 傳輸成本: 0:普通 1:成本盡量小
0 最后一位被保留,恒定為0

Type of Service最初是用來(lái)給IP包分優(yōu)先級(jí),比如語(yǔ)音通話(huà)需要實(shí)時(shí)性,所以它的IP包應(yīng)該比Web服務(wù)的IP包有更高的優(yōu)先級(jí)。然而,這個(gè)最初不錯(cuò)的想法沒(méi)有被微軟采納。在Windows下生成的IP包都是相同的最高優(yōu)先級(jí),所以在當(dāng)時(shí)造成Linux和Windows混合網(wǎng)絡(luò)中,Linux的IP傳輸會(huì)慢于Windows (僅僅是因?yàn)長(zhǎng)inux更加守規(guī)矩!)。后來(lái),Type of Service被實(shí)際分為兩部分:Differentiated Service Field (DS, 前6位)和Explicit Congestion Notification (ECN, 后2位),前者依然用來(lái)區(qū)分服務(wù)類(lèi)型,而后者用于表明IP包途徑路由的交通狀況。IPv6的Traffic Class也被如此分成兩部分。通過(guò)IP包提供不同服務(wù)的想法,并針對(duì)服務(wù)進(jìn)行不同的優(yōu)化的想法已經(jīng)產(chǎn)生很久了,但具體做法并沒(méi)有形成公認(rèn)的協(xié)議。比如ECN區(qū)域,它用來(lái)表示IP包經(jīng)過(guò)路徑的交通狀況。如果接收者收到的ECN區(qū)域顯示路徑上的很擁擠,那么接收者應(yīng)該作出調(diào)整。但在實(shí)際上,許多接收者都會(huì)忽視ECN所包含的信息。交通狀況的控制往往由更高層的比如TCP協(xié)議實(shí)現(xiàn)。

  • IP包總長(zhǎng)度(Total length):長(zhǎng)度16比特。 以字節(jié)為單位計(jì)算的IP包的長(zhǎng)度 (包括頭部和數(shù)據(jù)),所以IP包最大長(zhǎng)度65535字節(jié)。
  • Identification, flags和fragment offset:這三個(gè)包都是為碎片化(fragmentation)服務(wù)的。碎片化是指一個(gè)路由器將接收到的IP包分拆成多個(gè)IP包傳送,而接收這些“碎片”的路由器或者主機(jī)需要將“碎片”重新組合(reassembly)成一個(gè)IP包。不同的局域網(wǎng)所支持的最大傳輸單元(MTU, Maximum Transportation Unit)不同。如果一個(gè)IP包的大小超過(guò)了局域網(wǎng)支持的MTU,就需要在進(jìn)入該局域網(wǎng)時(shí)碎片化傳輸(就好像方面面面餅太大了,必須掰碎才能放進(jìn)碗里)。碎片化會(huì)給路由器和網(wǎng)絡(luò)帶來(lái)很大的負(fù)擔(dān)。最好在IP包發(fā)出之前探測(cè)整個(gè)路徑上的最小MTU,IP包的大小不超過(guò)該最小MTU,就可以避免碎片化。IPv6在設(shè)計(jì)上避免碎片化。每一個(gè)IPv6局域網(wǎng)的MTU都必須大于等于1280 bytes。IPv6的默認(rèn)發(fā)送IP包大小為1280 bytes。
  • Time to Live 存活時(shí)間(Hop Limit in IPv6):Time to Live最初是表示一個(gè)IP包的最大存活時(shí)間:如果IP包在傳輸過(guò)程中超過(guò)Time to Live,那么IP包就作廢。后來(lái),IPv4的這個(gè)區(qū)域記錄一個(gè)整數(shù)(比如30),表示在IP包接力過(guò)程中最多經(jīng)過(guò)30個(gè)路由接力,如果超過(guò)30個(gè)路由接力,那么這個(gè)IP包就作廢。IP包每經(jīng)過(guò)一個(gè)路由器,路由器就給Time to Live減一。當(dāng)一個(gè)路由器發(fā)現(xiàn)Time to Live為0時(shí),就不再發(fā)送該IP包。IPv6中的Hop Limit區(qū)域記錄的也是最大路由接力數(shù),與IPv4的功能相同。Time to Live/Hop Limit避免了IP包在互聯(lián)網(wǎng)中無(wú)限接力。
  • Protocol 協(xié)議(Next Header in IPv6):Protocol用來(lái)說(shuō)明IP包Payload部分所遵循的協(xié)議,也就是IP包之上的協(xié)議是什么。它說(shuō)明了IP包封裝的是一個(gè)怎樣的高層協(xié)議包(TCP? UDP?)。
  • 頭部校驗(yàn)(header CheckSum):長(zhǎng)度16位。用來(lái)做IP頭部的正確性檢測(cè),但不包含數(shù)據(jù)部分。 因?yàn)槊總€(gè)路由器要改變TTL的值,所以路由器會(huì)為每個(gè)通過(guò)的數(shù)據(jù)包重新計(jì)算這個(gè)值。
  • 起源和目標(biāo)地址(Source and Destination Addresses):這兩個(gè)地段都是32比特。標(biāo)識(shí)了這個(gè)IP包的起源和目標(biāo)地址。要注意除非使用NAT,否則整個(gè)傳輸?shù)倪^(guò)程中,這兩個(gè)地址不會(huì)改變。

至此,IP包頭基本的20字節(jié)已介紹完畢,此后部分屬于可選項(xiàng),不是必須的部分。

  • 可選項(xiàng)(Options):這是一個(gè)可變長(zhǎng)的字段。該字段屬于可選項(xiàng),主要用于測(cè)試,由起源設(shè)備根據(jù)需要改寫(xiě)??蛇x項(xiàng)目包含以下內(nèi)容:

  • 松散源路由(Loose source routing):給出一連串路由器接口的IP地址。IP包必須沿著這些IP地址傳送,但是允許在相繼的兩個(gè)IP地址之間跳過(guò)多個(gè)路由器。

  • 嚴(yán)格源路由(Strict source routing):給出一連串路由器接口的IP地址。IP包必須沿著這些IP地址傳送,如果下一跳不在IP地址表中則表示發(fā)生錯(cuò)誤。

  • 路由記錄(Record route):當(dāng)IP包離開(kāi)每個(gè)路由器的時(shí)候記錄路由器的出站接口的IP地址。

  • 時(shí)間戳(Timestamps):當(dāng)IP包離開(kāi)每個(gè)路由器的時(shí)候記錄時(shí)間。

  • 填充(Padding):因?yàn)镮P包頭長(zhǎng)度(Header Length)部分的單位為32bit,所以IP包頭的長(zhǎng)度必須為32bit的整數(shù)倍。因此,在可選項(xiàng)后面,IP協(xié)議會(huì)填充若干個(gè)0,以達(dá)到32bit的整數(shù)倍。

TCP協(xié)議

傳輸控制協(xié)議TCP(Transmission Control Protocol)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。

1、TCP通過(guò)以下方式提供可靠性:

  • 應(yīng)用程序分割成TCP認(rèn)為最合適發(fā)送的數(shù)據(jù)塊。由TCP傳遞給IP的信息單位叫做報(bào)文段。
  • 當(dāng)TCP發(fā)出一個(gè)報(bào)文段后,它啟動(dòng)一個(gè)定時(shí)器,等待目的端確認(rèn)收到這個(gè)報(bào)文段。如果不能及時(shí)收到一個(gè)確認(rèn),它就會(huì)重發(fā)這個(gè)報(bào)文段。
  • 當(dāng)TCP收到發(fā)自TCP鏈接另一端的數(shù)據(jù),它將發(fā)送一個(gè)確認(rèn)。這個(gè)確認(rèn)不是立即發(fā)送的,通常延時(shí)幾分之一秒
  • TCP將保持它首部和數(shù)據(jù)的校驗(yàn)和。這個(gè)一個(gè)端到端的校驗(yàn)和,目的是檢測(cè)數(shù)據(jù)在傳輸過(guò)程中的任何變化,如果收到報(bào)文段的校驗(yàn)和有錯(cuò),TCP將丟棄這個(gè)報(bào)文段和不確認(rèn)收到這個(gè)報(bào)文段。
  • 既然TCP報(bào)文段作為IP數(shù)據(jù)報(bào)來(lái)傳輸,而IP數(shù)據(jù)包的到達(dá)可能失序,因此TCP報(bào)文段的到達(dá)也可能失序。如果必要,TCP將對(duì)收到的數(shù)據(jù)進(jìn)行排序,將收到的數(shù)據(jù)已正確的順序交給應(yīng)用層。
  • 既然IP數(shù)據(jù)報(bào)會(huì)發(fā)生重復(fù),TCP鏈接端必須丟棄重復(fù)的數(shù)據(jù)。
  • TCP還能提供流量控制,TCP鏈接的每一方都有固定大小的緩空間。TCP的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù)。這將防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出。

2、TCP首部
TCP首部格式如下:

屏幕快照 2017-01-10 下午3.50.58.png
  • 每個(gè)TCP段都包含源端口和目的端口號(hào),用于尋找發(fā)送端和接收端的應(yīng)用程序。這兩個(gè)值加上IP首部的源端口IP地址和目的端IP地址唯一確定一個(gè)TCP鏈接。
  • 序號(hào)用來(lái)標(biāo)識(shí)從TCP發(fā)送端向接收端發(fā)送的數(shù)據(jù)字節(jié)流,它表示在這個(gè)報(bào)文段中第一個(gè)數(shù)據(jù)字節(jié)。如果將字節(jié)流看做在兩個(gè)應(yīng)用程序間的單項(xiàng)流動(dòng),則TCP用序號(hào)對(duì)每個(gè)字節(jié)進(jìn)行計(jì)數(shù)。
  • 當(dāng)建立一個(gè)鏈接時(shí),SYN標(biāo)志變1,序號(hào)字段包含由這個(gè)主機(jī)選擇的該鏈接的初始序號(hào)ISN,該主機(jī)要發(fā)送數(shù)據(jù)的第一個(gè)字節(jié)序號(hào)為這個(gè)ISN加1,因?yàn)镾YN標(biāo)志使用了一個(gè)序號(hào)。
  • 既然每個(gè)被傳輸?shù)淖止?jié)都被計(jì)數(shù),確認(rèn)序號(hào)包含發(fā)送確認(rèn)的一段所期望收到的下一個(gè)序號(hào)。因此,確認(rèn)序號(hào)應(yīng)當(dāng)是上次已成功收到數(shù)據(jù)字節(jié)序號(hào)加1。只有ACK標(biāo)志為1時(shí)確認(rèn)序號(hào)字段才有效。
  • 發(fā)送ACK無(wú)需任何代價(jià),因?yàn)?2位的確認(rèn)序號(hào)字段和ACK標(biāo)志一樣,總是TCP首部的一部分。因此一旦一個(gè)連接建立起來(lái),這個(gè)字段總是被設(shè)置,ACK標(biāo)志也總是被設(shè)置為1。
  • TCP為應(yīng)用層提供全雙工的服務(wù)。因此,連接的每一端必須保持每個(gè)方向上的傳輸數(shù)據(jù)序號(hào)。
  • TCP可以表述為一個(gè)沒(méi)有選擇確認(rèn)或否認(rèn)的窗口協(xié)議。因此TCP首部中的確認(rèn)序號(hào)表示發(fā)送方已成功收到字節(jié),但還不包含確認(rèn)序號(hào)所指的字符。當(dāng)前還無(wú)法對(duì)數(shù)據(jù)流中選定的部分進(jìn)行確認(rèn)。
  • 首部長(zhǎng)度需要設(shè)置,因?yàn)槿芜x字段的長(zhǎng)度是可變的。TCP首部最多60個(gè)字節(jié)。
  • 6個(gè)標(biāo)志位中的多個(gè)可同時(shí)設(shè)置為1 a:URG - 緊急指針有效
    b: ACK - 確認(rèn)序號(hào)有效
    c: PSH - 接收方應(yīng)盡快將這個(gè)報(bào)文段交給應(yīng)用層
    d: RST - 重新連接
    e:SYN - 同步序號(hào)用來(lái)發(fā)送一個(gè)鏈接
    f: FIN - 發(fā)送端完成發(fā)送任務(wù)
  • TCP的流量控制由連接的每一端通過(guò)聲明的窗口大小來(lái)提供。窗口大小為字節(jié)數(shù),起始于確認(rèn)序號(hào)字段指明的值,這個(gè)值是接收端期望接收的字節(jié)數(shù)。窗口大小是一個(gè)16位的字段,因而窗口大小最大為65535字節(jié)。
  • 檢驗(yàn)和覆蓋整個(gè)TCP報(bào)文端,TCP首部和TCP數(shù)據(jù)。這是一個(gè)強(qiáng)制性的字段,一定是由發(fā)送端計(jì)算和存儲(chǔ),并由接收端進(jìn)行驗(yàn)證。TCP檢驗(yàn)和的計(jì)算和UDP首部檢驗(yàn)和的計(jì)算一樣,也是用偽首部。
  • 緊急指針是一個(gè)正的偏移量,URG標(biāo)志為1時(shí)才有效,表示數(shù)據(jù)需要優(yōu)先處理,緊急指針指出在TCP段中的緊急數(shù)據(jù)的最后一個(gè)字節(jié)的序號(hào),使接收方可以知道緊急數(shù)據(jù)共有多長(zhǎng)。
  • 選項(xiàng):最常用的選項(xiàng)字段是最大段大?。∕aximum Segment Size, MSS),向?qū)Ψ酵ㄖ緳C(jī)可以接收的最大TCP段長(zhǎng)度。MSS選項(xiàng)只在建立連接的請(qǐng)求中發(fā)送。

3、TCP連接的建立和終止
1)、建立連接協(xié)議(三次握手):

  • 客戶(hù)端發(fā)送一個(gè)帶SYN標(biāo)志的TCP報(bào)文到服務(wù)器。這是三次握手過(guò)程中的報(bào)文1
  • 服務(wù)器發(fā)回包含服務(wù)器初始化序號(hào)的SYN報(bào)文段(報(bào)文段2)作為應(yīng)答,同時(shí)將確認(rèn)序號(hào)設(shè)置為客戶(hù)端的ISN加1以對(duì)客戶(hù)端的SYN報(bào)文段進(jìn)行確認(rèn)。一個(gè)SYN將占用一個(gè)序號(hào)。
  • 客戶(hù)必須將確認(rèn)序號(hào)設(shè)置為服務(wù)器的ISN加1以對(duì)服務(wù)器的SYN報(bào)文段進(jìn)行確認(rèn)(報(bào)文3).

2)、連接終止協(xié)議(四次揮手):
由于TCP連接是全雙工的,因此每個(gè)方向都必須單獨(dú)進(jìn)行關(guān)閉。這個(gè)原則是當(dāng)一方完成它的數(shù)據(jù)發(fā)送任務(wù)后就能發(fā)送一個(gè)FIN來(lái)終止這個(gè)方向的連接。收到一個(gè)FIN只意味著這一個(gè)方向上沒(méi)有數(shù)據(jù)流動(dòng),一個(gè)TCP連接在收到一個(gè)FIN后仍能發(fā)送數(shù)據(jù)。首先進(jìn)行關(guān)閉的一方將執(zhí)行主動(dòng)關(guān)閉,而另一方執(zhí)行被動(dòng)關(guān)閉。

  • TCP客戶(hù)端發(fā)送一個(gè)FIN,用來(lái)關(guān)閉客戶(hù)端到服務(wù)器的數(shù)據(jù)傳送(報(bào)文4)。
  • 服務(wù)器收到這個(gè)FIN,它發(fā)回一個(gè)ACK,確認(rèn)序號(hào)為收到序號(hào)加1(報(bào)文段5),和SYN一樣,一個(gè)FIN將占用一個(gè)序號(hào)。
  • 服務(wù)器關(guān)閉客戶(hù)端的鏈接,發(fā)送一個(gè)FIN給客戶(hù)端(報(bào)文6)。
  • 客戶(hù)端發(fā)回確認(rèn),并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1(報(bào)文段7)

3)、連接建立的超時(shí):
如果與服務(wù)器無(wú)法建立連接,客戶(hù)端就會(huì)三次向服務(wù)器發(fā)送連接請(qǐng)求。在規(guī)定的時(shí)間內(nèi)服務(wù)器未應(yīng)答,則連接失敗。
4)、最大報(bào)文段長(zhǎng)度MSS:
最大報(bào)文段長(zhǎng)度表示TCP傳往另一端的最大塊數(shù)據(jù)的長(zhǎng)度。當(dāng)一個(gè)連接建立時(shí),連接的雙方都要通告各自的MSS。
一般,如果沒(méi)有分段發(fā)生,MSS還是越大越好。報(bào)文段越大允許每個(gè)報(bào)文段傳送的數(shù)據(jù)越多,相對(duì)IP和TCP首部有更高的網(wǎng)絡(luò)利用率。當(dāng)TCP發(fā)送一個(gè)SYN時(shí),它能將MSS值設(shè)置為外出接口得MTU長(zhǎng)度減去IP首部和TCP首部長(zhǎng)度。對(duì)于以太網(wǎng),MSS值可達(dá)到1460.
如果目的地址為非本地的,MSS值通常默認(rèn)為536,是否本地主要通過(guò)網(wǎng)絡(luò)號(hào)區(qū)分。MSS讓主機(jī)限制另一端發(fā)送數(shù)據(jù)報(bào)的長(zhǎng)度,加上主機(jī)也能控制它發(fā)送數(shù)據(jù)報(bào)的長(zhǎng)度,這將使以較小MTU連接到一個(gè)網(wǎng)絡(luò)上的主機(jī)避免分段。

TCP協(xié)議格式參考 http://blog.csdn.net/tanqiantot/article/details/7947525

UDP協(xié)議

用戶(hù)數(shù)據(jù)包協(xié)議(UDP)是TCP/IP模型中一種面向無(wú)連接的傳輸層協(xié)議,提供了面向事物的簡(jiǎn)單不可靠信息傳送服務(wù)。UDP基本上是IP協(xié)議與上層協(xié)議的接口。UDP協(xié)議適用于端口分別運(yùn)行在同一臺(tái)設(shè)備上的多個(gè)應(yīng)用程序中。

UDP特點(diǎn):
  • 是無(wú)連接的。相比TCP協(xié)議,UDP協(xié)議在傳送數(shù)據(jù)前不需要建立連接,當(dāng)然也就沒(méi)有釋放連接了。
  • 是盡最大努力交付的,也就是說(shuō)UDP協(xié)議無(wú)法保證數(shù)據(jù)能夠準(zhǔn)確的交付到目的主機(jī)。也不需要對(duì)接收到的UDP報(bào)文進(jìn)行確認(rèn)。
  • 是面向報(bào)文的,也就是說(shuō)UDP協(xié)議將應(yīng)用層傳輸下來(lái)的數(shù)據(jù)封裝在一個(gè)UDP包中,不進(jìn)行拆分或合并,因此傳輸層再收到對(duì)方的UDP包后回去掉首部后,將數(shù)據(jù)原封不動(dòng)的交給應(yīng)用進(jìn)程。
  • 沒(méi)有擁塞控制,因此UDP協(xié)議的發(fā)送速率不受網(wǎng)絡(luò)擁塞度的影響。
  • UDP支持一對(duì)一,一對(duì)多,多對(duì)一和多對(duì)多的交互通信。
  • UDP的頭部占用較小,只占8個(gè)字節(jié)。
UDP報(bào)文格式:

UDP協(xié)議分為首部字段和數(shù)據(jù)字段,其中首部字段只占用8個(gè)字節(jié),分別是個(gè)占用兩個(gè)字節(jié)的源端口、目的端口、長(zhǎng)度和檢驗(yàn)和。

屏幕快照 2017-01-10 下午5.58.41.png
  • 長(zhǎng)度:UDP報(bào)文的整個(gè)大小,最小為8個(gè)字節(jié)(僅為首部)。
  • 檢驗(yàn)和:在進(jìn)行檢驗(yàn)和計(jì)算時(shí),會(huì)添加一個(gè)偽首部一起進(jìn)行運(yùn)算。偽首部(占用12個(gè)字節(jié))為:4個(gè)字節(jié)的源IP地址、4個(gè)字節(jié)的目的IP地址、1個(gè)字節(jié)的0、一個(gè)字節(jié)的數(shù)字17、以及占用2個(gè)字節(jié)UDP長(zhǎng)度。這個(gè)偽首部不是報(bào)文的真正首部,只是引入為了計(jì)算校驗(yàn)和。相對(duì)于IP協(xié)議的只計(jì)算首部,UDP檢驗(yàn)和會(huì)把首部和數(shù)據(jù)一起進(jìn)行校驗(yàn)。接收端進(jìn)行的校驗(yàn)和與UDP報(bào)文中的校驗(yàn)和相與,如果無(wú)差錯(cuò)應(yīng)該全為1。如果有誤,則將報(bào)文丟棄或者發(fā)給應(yīng)用層、并附上差錯(cuò)警告。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容