計(jì)算機(jī)網(wǎng)絡(luò)就是用 物理鏈路 將各個(gè)孤立的工作站或主機(jī)連接在一起,組成 數(shù)據(jù)鏈路凝果,從而達(dá)到資源共享和通信的目的。
網(wǎng)絡(luò)協(xié)議
OSI/RM(開放系統(tǒng)互聯(lián)參考模型)模型將計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)劃分為7層睦尽。自下而上分別是:物理層器净、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層当凡、傳輸層掌动、會(huì)話層四啰、表示層、應(yīng)用層粗恢。
- 應(yīng)用層:開放系統(tǒng)互聯(lián)環(huán)境的最高層柑晒,為操作系統(tǒng)或網(wǎng)絡(luò)應(yīng)用程序提供訪問網(wǎng)絡(luò)服務(wù)的接口。
- 表示層:為上層用戶提供共同的數(shù)據(jù)或信息的語法表示轉(zhuǎn)換眷射。為了讓采用不同編碼方法的計(jì)算機(jī)在通信中能相互理解數(shù)據(jù)的內(nèi)容匙赞,可以采用抽象的標(biāo)準(zhǔn)方法來定義數(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ì)話層:主要功能就是組織和同步不同的主機(jī)上各種進(jìn)程間的通信(稱為對(duì)話)坐榆,負(fù)責(zé)在兩個(gè)會(huì)話層實(shí)體之間進(jìn)行對(duì)話鏈接的建立和拆除。
- 傳輸層:負(fù)責(zé)數(shù)據(jù)傳送的最高層次冗茸。傳輸層完成同處于資源子網(wǎng)中的兩個(gè)主機(jī)間的鏈接和數(shù)據(jù)傳輸席镀,也稱為端到端的數(shù)據(jù)傳輸。
- 網(wǎng)絡(luò)層:主要任務(wù)就是選擇合適的路由夏漱,使網(wǎng)絡(luò)層的數(shù)據(jù)傳輸單元(分組)能夠正確無誤的按照地址找到目的站豪诲。
- 數(shù)據(jù)鏈路層:負(fù)責(zé)在兩個(gè)相鄰的節(jié)點(diǎn)間的線路上無差錯(cuò)的傳輸以幀為單位的數(shù)據(jù)。
- 物理層:定義了為建立挂绰、維護(hù)和拆除物理鏈路所需的機(jī)械的屎篱、電氣的、功能的和規(guī)程的特性葵蒂,其作用是使原始的數(shù)據(jù)比特流能在物理介質(zhì)上傳輸交播。
IP、TCP/UDP協(xié)議
由于OSI/RM模型過于復(fù)雜也難以實(shí)現(xiàn)践付,現(xiàn)實(shí)中廣泛使用的是TCP/IP 模型堪侯。TCP/IP是一個(gè)協(xié)議集,它也是分層模型荔仁,分為四層
- 應(yīng)用層:應(yīng)用層是大多數(shù)普通與網(wǎng)絡(luò)相關(guān)的程序?yàn)榱送ㄟ^網(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)來自應(yīng)用層的服務(wù)請(qǐng)求,并向網(wǎng)絡(luò)層發(fā)出服務(wù)請(qǐng)求亥啦。傳輸層提供兩臺(tái)主機(jī)之間透明的數(shù)據(jù)傳輸炭剪,通常用于端到端的鏈接、流量控制或錯(cuò)誤恢復(fù)翔脱。這一層兩個(gè)最終要的協(xié)議是 TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)包協(xié)議)奴拦。
- 網(wǎng)絡(luò)層:網(wǎng)絡(luò)層提供端到端的數(shù)據(jù)交付,換句話說届吁,它負(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é)通過網(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通信要傳送的信息国裳。
- 版本號(hào)(Version):長度4bit(位)形入,標(biāo)識(shí)目前采用的IP協(xié)議的版本號(hào)。IPv4值為 0100缝左,IPv6值為0110亿遂。
- IP包頭部長度(IHL:Internet Header Length):長度4bit,作用是用來描述IP包頭部長度渺杉,因?yàn)樵贗P包中有變化的可選部分蛇数。一個(gè)IP包頭部最大長度為60個(gè)字節(jié),最小長度為20個(gè)字節(jié)是越。IPv6的頭部固定長度為40bytes耳舅,所以IPv6沒有IHL區(qū)域。
- 服務(wù)類型(Type of Service):長度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最初是用來給IP包分優(yōu)先級(jí)霞丧,比如語音通話需要實(shí)時(shí)性,所以它的IP包應(yīng)該比Web服務(wù)的IP包有更高的優(yōu)先級(jí)纯出。然而蚯妇,這個(gè)最初不錯(cuò)的想法沒有被微軟采納。在Windows下生成的IP包都是相同的最高優(yōu)先級(jí)暂筝,所以在當(dāng)時(shí)造成Linux和Windows混合網(wǎng)絡(luò)中箩言,Linux的IP傳輸會(huì)慢于Windows (僅僅是因?yàn)長inux更加守規(guī)矩!)焕襟。后來陨收,Type of Service被實(shí)際分為兩部分:Differentiated Service Field (DS, 前6位)和Explicit Congestion Notification (ECN, 后2位),前者依然用來區(qū)分服務(wù)類型鸵赖,而后者用于表明IP包途徑路由的交通狀況务漩。IPv6的Traffic Class也被如此分成兩部分。通過IP包提供不同服務(wù)的想法它褪,并針對(duì)服務(wù)進(jìn)行不同的優(yōu)化的想法已經(jīng)產(chǎn)生很久了饵骨,但具體做法并沒有形成公認(rèn)的協(xié)議。比如ECN區(qū)域茫打,它用來表示IP包經(jīng)過路徑的交通狀況居触。如果接收者收到的ECN區(qū)域顯示路徑上的很擁擠,那么接收者應(yīng)該作出調(diào)整老赤。但在實(shí)際上轮洋,許多接收者都會(huì)忽視ECN所包含的信息。交通狀況的控制往往由更高層的比如TCP協(xié)議實(shí)現(xiàn)抬旺。
- IP包總長度(Total length):長度16比特弊予。 以字節(jié)為單位計(jì)算的IP包的長度 (包括頭部和數(shù)據(jù)),所以IP包最大長度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包的大小超過了局域網(wǎng)支持的MTU,就需要在進(jìn)入該局域網(wǎng)時(shí)碎片化傳輸(就好像方面面面餅太大了薇搁,必須掰碎才能放進(jìn)碗里)斋扰。碎片化會(huì)給路由器和網(wǎng)絡(luò)帶來很大的負(fù)擔(dān)。最好在IP包發(fā)出之前探測整個(gè)路徑上的最小MTU,IP包的大小不超過該最小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包在傳輸過程中超過Time to Live,那么IP包就作廢粮宛。后來窥淆,IPv4的這個(gè)區(qū)域記錄一個(gè)整數(shù)(比如30),表示在IP包接力過程中最多經(jīng)過30個(gè)路由接力巍杈,如果超過30個(gè)路由接力忧饭,那么這個(gè)IP包就作廢。IP包每經(jīng)過一個(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)中無限接力鼎文。
- Protocol 協(xié)議(Next Header in IPv6):Protocol用來說明IP包Payload部分所遵循的協(xié)議渔肩,也就是IP包之上的協(xié)議是什么。它說明了IP包封裝的是一個(gè)怎樣的高層協(xié)議包(TCP? UDP?)拇惋。
- 頭部校驗(yàn)(header CheckSum):長度16位周偎。用來做IP頭部的正確性檢測,但不包含數(shù)據(jù)部分蚤假。 因?yàn)槊總€(gè)路由器要改變TTL的值,所以路由器會(huì)為每個(gè)通過的數(shù)據(jù)包重新計(jì)算這個(gè)值栏饮。
- 起源和目標(biāo)地址(Source and Destination Addresses):這兩個(gè)地段都是32比特吧兔。標(biāo)識(shí)了這個(gè)IP包的起源和目標(biāo)地址磷仰。要注意除非使用NAT,否則整個(gè)傳輸?shù)倪^程中境蔼,這兩個(gè)地址不會(huì)改變灶平。
至此,IP包頭基本的20字節(jié)已介紹完畢箍土,此后部分屬于可選項(xiàng)逢享,不是必須的部分。
可選項(xiàng)(Options):這是一個(gè)可變長的字段吴藻。該字段屬于可選項(xiàng)瞒爬,主要用于測試,由起源設(shè)備根據(jù)需要改寫〔嗟可選項(xiàng)目包含以下內(nèi)容:
松散源路由(Loose source routing):給出一連串路由器接口的IP地址矢空。IP包必須沿著這些IP地址傳送,但是允許在相繼的兩個(gè)IP地址之間跳過多個(gè)路由器禀横。
嚴(yán)格源路由(Strict source routing):給出一連串路由器接口的IP地址屁药。IP包必須沿著這些IP地址傳送,如果下一跳不在IP地址表中則表示發(fā)生錯(cuò)誤柏锄。
路由記錄(Record route):當(dāng)IP包離開每個(gè)路由器的時(shí)候記錄路由器的出站接口的IP地址酿箭。
時(shí)間戳(Timestamps):當(dāng)IP包離開每個(gè)路由器的時(shí)候記錄時(shí)間。
填充(Padding):因?yàn)镮P包頭長度(Header Length)部分的單位為32bit趾娃,所以IP包頭的長度必須為32bit的整數(shù)倍缭嫡。因此,在可選項(xiàng)后面茫舶,IP協(xié)議會(huì)填充若干個(gè)0械巡,以達(dá)到32bit的整數(shù)倍。
TCP協(xié)議
傳輸控制協(xié)議TCP(Transmission Control Protocol)是一種面向連接的饶氏、可靠的讥耗、基于字節(jié)流的傳輸層通信協(xié)議。
1疹启、TCP通過以下方式提供可靠性:
- 應(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)和廊宪,目的是檢測數(shù)據(jù)在傳輸過程中的任何變化矾瘾,如果收到報(bào)文段的校驗(yàn)和有錯(cuò),TCP將丟棄這個(gè)報(bào)文段和不確認(rèn)收到這個(gè)報(bào)文段箭启。
- 既然TCP報(bào)文段作為IP數(shù)據(jù)報(bào)來傳輸壕翩,而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首部格式如下:
- 每個(gè)TCP段都包含源端口和目的端口號(hào)模聋,用于尋找發(fā)送端和接收端的應(yīng)用程序。這兩個(gè)值加上IP首部的源端口IP地址和目的端IP地址唯一確定一個(gè)TCP鏈接唠亚。
- 序號(hào)用來標(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無需任何代價(jià)颜阐,因?yàn)?2位的確認(rèn)序號(hào)字段和ACK標(biāo)志一樣平窘,總是TCP首部的一部分。因此一旦一個(gè)連接建立起來凳怨,這個(gè)字段總是被設(shè)置瑰艘,ACK標(biāo)志也總是被設(shè)置為1。
- TCP為應(yīng)用層提供全雙工的服務(wù)猿棉。因此磅叛,連接的每一端必須保持每個(gè)方向上的傳輸數(shù)據(jù)序號(hào)屑咳。
- TCP可以表述為一個(gè)沒有選擇確認(rèn)或否認(rèn)的窗口協(xié)議萨赁。因此TCP首部中的確認(rèn)序號(hào)表示發(fā)送方已成功收到字節(jié),但還不包含確認(rèn)序號(hào)所指的字符兆龙。當(dāng)前還無法對(duì)數(shù)據(jù)流中選定的部分進(jìn)行確認(rèn)杖爽。
- 首部長度需要設(shè)置敲董,因?yàn)槿芜x字段的長度是可變的。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)用來發(fā)送一個(gè)鏈接
f: FIN - 發(fā)送端完成發(fā)送任務(wù) - TCP的流量控制由連接的每一端通過聲明的窗口大小來提供腋寨。窗口大小為字節(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ù)共有多長坐桩。
- 選項(xiàng):最常用的選項(xiàng)字段是最大段大杏芘ā(Maximum Segment Size, MSS)撕攒,向?qū)Ψ酵ㄖ緳C(jī)可以接收的最大TCP段長度陡鹃。MSS選項(xiàng)只在建立連接的請(qǐng)求中發(fā)送。
3抖坪、TCP連接的建立和終止
1)萍鲸、建立連接協(xié)議(三次握手):
- 客戶端發(fā)送一個(gè)帶SYN標(biāo)志的TCP報(bào)文到服務(wù)器。這是三次握手過程中的報(bào)文1
- 服務(wù)器發(fā)回包含服務(wù)器初始化序號(hào)的SYN報(bào)文段(報(bào)文段2)作為應(yīng)答擦俐,同時(shí)將確認(rèn)序號(hào)設(shè)置為客戶端的ISN加1以對(duì)客戶端的SYN報(bào)文段進(jìn)行確認(rèn)脊阴。一個(gè)SYN將占用一個(gè)序號(hào)。
- 客戶必須將確認(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來終止這個(gè)方向的連接埋合。收到一個(gè)FIN只意味著這一個(gè)方向上沒有數(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客戶端發(fā)送一個(gè)FIN秀菱,用來關(guān)閉客戶端到服務(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)閉客戶端的鏈接,發(fā)送一個(gè)FIN給客戶端(報(bào)文6)清钥。
- 客戶端發(fā)回確認(rèn)洪规,并將確認(rèn)序號(hào)設(shè)置為收到序號(hào)加1(報(bào)文段7)
3)、連接建立的超時(shí):
如果與服務(wù)器無法建立連接循捺,客戶端就會(huì)三次向服務(wù)器發(fā)送連接請(qǐng)求斩例。在規(guī)定的時(shí)間內(nèi)服務(wù)器未應(yīng)答,則連接失敗从橘。
4)念赶、最大報(bào)文段長度MSS:
最大報(bào)文段長度表示TCP傳往另一端的最大塊數(shù)據(jù)的長度。當(dāng)一個(gè)連接建立時(shí)恰力,連接的雙方都要通告各自的MSS叉谜。
一般,如果沒有分段發(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長度減去IP首部和TCP首部長度。對(duì)于以太網(wǎng)企孩,MSS值可達(dá)到1460.
如果目的地址為非本地的锭碳,MSS值通常默認(rèn)為536,是否本地主要通過網(wǎng)絡(luò)號(hào)區(qū)分勿璃。MSS讓主機(jī)限制另一端發(fā)送數(shù)據(jù)報(bào)的長度擒抛,加上主機(jī)也能控制它發(fā)送數(shù)據(jù)報(bào)的長度,這將使以較小MTU連接到一個(gè)網(wǎng)絡(luò)上的主機(jī)避免分段补疑。
TCP協(xié)議格式參考 http://blog.csdn.net/tanqiantot/article/details/7947525
UDP協(xié)議
用戶數(shù)據(jù)包協(xié)議(UDP)是TCP/IP模型中一種面向無連接的傳輸層協(xié)議歧沪,提供了面向事物的簡單不可靠信息傳送服務(wù)。UDP基本上是IP協(xié)議與上層協(xié)議的接口莲组。UDP協(xié)議適用于端口分別運(yùn)行在同一臺(tái)設(shè)備上的多個(gè)應(yīng)用程序中诊胞。
UDP特點(diǎn):
- 是無連接的。相比TCP協(xié)議胁编,UDP協(xié)議在傳送數(shù)據(jù)前不需要建立連接厢钧,當(dāng)然也就沒有釋放連接了。
- 是盡最大努力交付的嬉橙,也就是說UDP協(xié)議無法保證數(shù)據(jù)能夠準(zhǔn)確的交付到目的主機(jī)早直。也不需要對(duì)接收到的UDP報(bào)文進(jìn)行確認(rèn)。
- 是面向報(bào)文的市框,也就是說UDP協(xié)議將應(yīng)用層傳輸下來的數(shù)據(jù)封裝在一個(gè)UDP包中霞扬,不進(jìn)行拆分或合并,因此傳輸層再收到對(duì)方的UDP包后回去掉首部后枫振,將數(shù)據(jù)原封不動(dòng)的交給應(yīng)用進(jìn)程喻圃。
- 沒有擁塞控制,因此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é)的源端口、目的端口扫腺、長度和檢驗(yàn)和岗照。
- 長度: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長度渠抹。這個(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)和相與败去,如果無差錯(cuò)應(yīng)該全為1放航。如果有誤,則將報(bào)文丟棄或者發(fā)給應(yīng)用層圆裕、并附上差錯(cuò)警告广鳍。