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

計(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é)議集,它也是分層模型荔仁,分為四層

屏幕快照 2017-01-09 下午4.33.48.png
  • 應(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通信要傳送的信息国裳。

屏幕快照 2017-01-10 上午11.06.37.png
  • 版本號(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首部格式如下:

屏幕快照 2017-01-10 下午3.50.58.png
  • 每個(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)和岗照。

屏幕快照 2017-01-10 下午5.58.41.png
  • 長度: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ò)警告广鳍。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荆几,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赊时,更是在濱河造成了極大的恐慌吨铸,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件祖秒,死亡現(xiàn)場離奇詭異诞吱,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)竭缝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門房维,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人抬纸,你說我怎么就攤上這事咙俩。” “怎么了湿故?”我有些...
    開封第一講書人閱讀 153,443評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵暴浦,是天一觀的道長。 經(jīng)常有香客問我晓锻,道長歌焦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評(píng)論 1 279
  • 正文 為了忘掉前任砚哆,我火速辦了婚禮独撇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘躁锁。我一直安慰自己纷铣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,458評(píng)論 5 374
  • 文/花漫 我一把揭開白布战转。 她就那樣靜靜地躺著搜立,像睡著了一般。 火紅的嫁衣襯著肌膚如雪槐秧。 梳的紋絲不亂的頭發(fā)上啄踊,一...
    開封第一講書人閱讀 49,185評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音刁标,去河邊找鬼颠通。 笑死,一個(gè)胖子當(dāng)著我的面吹牛膀懈,可吹牛的內(nèi)容都是我干的顿锰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼硼控!你這毒婦竟也來了刘陶?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤牢撼,失蹤者是張志新(化名)和其女友劉穎匙隔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浪默,經(jīng)...
    沈念sama閱讀 43,609評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡牡直,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,083評(píng)論 2 325
  • 正文 我和宋清朗相戀三年缀匕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了纳决。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,163評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乡小,死狀恐怖阔加,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情满钟,我是刑警寧澤胜榔,帶...
    沈念sama閱讀 33,803評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站湃番,受9級(jí)特大地震影響夭织,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吠撮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,357評(píng)論 3 307
  • 文/蒙蒙 一尊惰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧泥兰,春花似錦弄屡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至削彬,卻和暖如春全庸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背融痛。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評(píng)論 1 261
  • 我被黑心中介騙來泰國打工糕篇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人酌心。 一個(gè)月前我還...
    沈念sama閱讀 45,636評(píng)論 2 355
  • 正文 我出身青樓拌消,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子墩崩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,925評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容