TCP/IP 協(xié)議族
Internet 的核心協(xié)議就是 TCP/IP佑附,廣泛應(yīng)用于局域網(wǎng)和廣域網(wǎng)搞乏,目前已有20+年發(fā)展史邻眷,是現(xiàn)用國際通行標(biāo)準(zhǔn)。TCP/IP 是個(gè)協(xié)議族剔交,包含有多種協(xié)議肆饶,網(wǎng)絡(luò)模型及分層如圖所示
TCP/IP 五層網(wǎng)絡(luò)模型
應(yīng)用層:應(yīng)用程序通過TCP/IP互連網(wǎng)絡(luò)后發(fā)送、接收數(shù)據(jù)岖常。選擇所需服務(wù)類型驯镊,按照傳輸層要求組織數(shù)據(jù),向下傳遞報(bào)文序列或字節(jié)流2種類型
傳輸層:提供應(yīng)用層間通信服務(wù)竭鞍,又稱端到端通信板惑。提供可靠的數(shù)據(jù)傳輸服務(wù),確保數(shù)據(jù)準(zhǔn)確偎快、有序送達(dá)到目的地洒放。數(shù)據(jù)發(fā)送后需對(duì)方回送確認(rèn)信息,有丟失的數(shù)據(jù)需發(fā)送方重發(fā)分組滨砍。傳輸?shù)膶?duì)象是傳輸層分組
網(wǎng)際層:又稱IP層,負(fù)責(zé)機(jī)器間通信妖异,接收到傳輸層請(qǐng)求后惋戏,向目的地傳送信息分組。此分組會(huì)被封裝進(jìn)IP數(shù)據(jù)報(bào)中他膳,由路由選擇算法決定直送目的地或發(fā)給路由响逢,然后將數(shù)據(jù)向下傳遞給網(wǎng)絡(luò)接口層。接收到數(shù)據(jù)報(bào)時(shí)棕孙,檢驗(yàn)正確性舔亭,由路由選擇算法決定本地處理或轉(zhuǎn)發(fā),若目的地屬于本機(jī)所在網(wǎng)絡(luò)蟀俊,就把數(shù)據(jù)報(bào)的報(bào)頭剝?nèi)デ掌蹋x擇適當(dāng)?shù)膫鬏攲訁f(xié)議向上傳遞分組
網(wǎng)絡(luò)接口層:又稱數(shù)據(jù)鏈路層,處于TCP/IP協(xié)議層之下肢预,負(fù)責(zé)接收IP數(shù)據(jù)報(bào)并將數(shù)據(jù)報(bào)通過選定網(wǎng)絡(luò)發(fā)送出去
硬件層:處理連接網(wǎng)絡(luò)的硬件部分矛洞。包括控制操作系統(tǒng)、硬件的設(shè)備驅(qū)動(dòng)烫映、NIC(Network Interface Card沼本,網(wǎng)絡(luò)適配器,即網(wǎng)卡)锭沟,及光纖等 物理可見部分(還包括連接器等一切傳輸媒介)
移步至我的博客主頁抽兆,可見 ISO/OSI 七層網(wǎng)絡(luò)模型詳述
TCP/IP 內(nèi)含協(xié)議職責(zé)
TCP 協(xié)議數(shù)據(jù)傳輸流程
傳輸控制協(xié)議(Transmission Control Protocol,TCP)是 Internet 傳輸層協(xié)議,提供面向連接的可靠傳輸服務(wù)族淮,可靠性由重發(fā)技術(shù)保證辫红。TCP 報(bào)文首部的大小一定是4字節(jié)的倍數(shù)凭涂,其中固定首部大小為20字節(jié)且不變
ACK:確認(rèn)位,當(dāng)它的值為1時(shí)厉熟,確認(rèn)號(hào)才是有效的
SYN:同步請(qǐng)求导盅,TCP連接中連接雙方協(xié)商初始的序號(hào)
RST:復(fù)位,TCP連接中數(shù)據(jù)傳輸發(fā)生異常需要重新發(fā)送
FIN :通信結(jié)束后揍瑟,當(dāng)它的值為1時(shí)拆除連接
TCP 三次握手建立連接
第一次握手:建立連接時(shí)白翻,客戶端發(fā)送SYN包(syn=i)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài)绢片,等待服務(wù)器確認(rèn)滤馍。SYN表示同步序列編碼(Synchronize Sequence Numbers)
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=i+1)底循,同時(shí)自己也發(fā)送一個(gè)SYN包(seq=j)巢株,即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)
第三次握手:客戶端收到服務(wù)器的SYN+ACK的包后熙涤,向服務(wù)器發(fā)送確認(rèn)包ACK(j+1)阁苞,此包發(fā)送完畢,客戶端與服務(wù)器進(jìn)入ESTABLISHED狀態(tài)祠挫,完成三次握手
TCP 正常數(shù)據(jù)傳輸過程
本圖表示傳輸2個(gè)數(shù)據(jù)報(bào)的過程那槽。主機(jī)A向B發(fā)送第一個(gè) N 字節(jié)的數(shù)據(jù)包,SEQ為 i 等舔,主機(jī)B收到后需要立即向主機(jī)A發(fā)送確認(rèn)ACK包骚灸,ACK = i + N +1 ,這樣主機(jī)A才可確認(rèn)數(shù)據(jù)傳輸成功慌植。第二個(gè)數(shù)據(jù)包傳輸時(shí)甚牲,SEQ數(shù)值 = R,主機(jī)B收到后立即回傳ACK蝶柿,此時(shí)ACK = R + N + 1丈钙,之后數(shù)據(jù)包傳輸?shù)倪^程持續(xù)此流程,需要注意的是發(fā)送方只有收到目標(biāo)方的確認(rèn)包后才會(huì)清除緩沖區(qū)中的數(shù)據(jù)
ACK確認(rèn)位 = SEQ數(shù)據(jù)編號(hào) + 傳遞的字節(jié)數(shù)N + 1交汤。第一個(gè)字節(jié)的SEQ編號(hào)由本地隨機(jī)產(chǎn)生著恩,SEQ+N的作用是為了讓主機(jī)A確認(rèn)發(fā)送給主機(jī)B的數(shù)據(jù)是否全部接收 / 是否出現(xiàn)丟失
TCP 數(shù)據(jù)重傳與快重傳
- 數(shù)據(jù)重傳:主機(jī)A向主機(jī)B傳送數(shù)據(jù),但中間發(fā)生錯(cuò)誤蜻展,主機(jī)B未能收到喉誊。經(jīng)過一段時(shí)間后,主機(jī)A未收到主機(jī)B的ACK確認(rèn)包纵顾,故主機(jī)A再次重傳此數(shù)據(jù)包伍茄。主機(jī)A每次發(fā)送數(shù)據(jù)時(shí)都會(huì)啟動(dòng)一個(gè)定時(shí)器,規(guī)定時(shí)間沒收到響應(yīng)包則啟動(dòng)重傳
- 快重傳:重傳發(fā)生在超時(shí)之后施逾,但當(dāng)主機(jī)A收到3個(gè)以上重復(fù)的ACK敷矫,其實(shí)就說明有數(shù)據(jù)丟失例获,也需要重傳,此時(shí)重傳定時(shí)器還沒有結(jié)束曹仗,所以叫快速重傳
TCP 四次揮手結(jié)束連接
第一次揮手:客戶端發(fā)送一個(gè)FIN榨汤,用來關(guān)閉客戶端到服務(wù)器的數(shù)據(jù)傳送,客戶端進(jìn)入FIN_WAIT_1狀態(tài)
第二次揮手:服務(wù)端收到FIN后怎茫,發(fā)送一個(gè)ACK給客戶端收壕,確認(rèn)序號(hào)為收到序號(hào)+1(與SYN相同,一個(gè)FIN占用一個(gè)序號(hào))轨蛤,服務(wù)端進(jìn)入CLOSE_WAIT狀態(tài)
第三次揮手:服務(wù)端發(fā)送一個(gè)FIN蜜宪,用來關(guān)閉服務(wù)端到客戶端的數(shù)據(jù)傳送,服務(wù)端進(jìn)入LAST_ACK狀態(tài)
第四次揮手:客戶端收到FIN后祥山,客戶端進(jìn)入TIME_WAIT狀態(tài)圃验,接著發(fā)送一個(gè)ACK給服務(wù)端,確認(rèn)序號(hào)為收到序號(hào)+1缝呕,服務(wù)端進(jìn)入CLOSED狀態(tài)澳窑,完成四次揮手
TCP 滑動(dòng)窗口與擁塞控制
IP 協(xié)議數(shù)據(jù)傳輸流程
網(wǎng)際協(xié)議(Internet Protocol,IP)通常被認(rèn)為提供的是無連接和不可靠的,但實(shí)際上供常,在網(wǎng)絡(luò)性能良好的情況下摊聋,IP傳送的數(shù)據(jù)能夠完好無損的到達(dá)目的地
無連接是指沒有確定目標(biāo)系統(tǒng)是否已做好接收數(shù)據(jù)的準(zhǔn)備之前就發(fā)送數(shù)據(jù)。不可靠是指目的系統(tǒng)不對(duì)成功完成接收到的分組進(jìn)行確認(rèn)
IP 發(fā)送數(shù)據(jù)
發(fā)送數(shù)據(jù)時(shí)话侧,源計(jì)算機(jī)上的IP協(xié)議需要確定目的地是否在同一網(wǎng)絡(luò),若目的地在同一網(wǎng)絡(luò)闯参,使用直達(dá)通信瞻鹏,若不在同一網(wǎng)絡(luò),則需要通過網(wǎng)關(guān)或路由器完成通信:
主機(jī)A組裝目的IP地址為主機(jī)B的數(shù)據(jù)報(bào)鹿寨,之后進(jìn)行路由選擇新博,再將次數(shù)據(jù)報(bào)發(fā)送至默認(rèn)路由器(由APR地址解析確定路由器,得到下一默認(rèn)路由器IP地址與MAC地址的映射關(guān)系脚草,然后以該MAC地址為幀的目的地址形成一個(gè)幀赫悄,并將IP數(shù)據(jù)報(bào)封裝在幀的數(shù)據(jù)區(qū),最后由具體的物理網(wǎng)絡(luò)(以太網(wǎng))完成數(shù)據(jù)報(bào)的真正傳輸)
IP 轉(zhuǎn)發(fā)數(shù)據(jù)
路由器接收到主機(jī)A的數(shù)據(jù)幀后馏慨,去掉幀頭并對(duì)其進(jìn)行處理埂淮,發(fā)現(xiàn)此數(shù)據(jù)報(bào)的目的地非本地,需要將其轉(zhuǎn)發(fā)写隶,由路由選擇算法及本地路由表確定下一跳路由器地址倔撞,通過ARP地址解析確定下一跳路由的IP地址與MAC地址的映射關(guān)系后,將該MAC地址作為數(shù)據(jù)幀的目的地將數(shù)據(jù)報(bào)封裝為數(shù)據(jù)幀慕趴,通過以太網(wǎng)完成數(shù)據(jù)轉(zhuǎn)發(fā)痪蝇。重復(fù)此步驟直到第N個(gè)路由器與目的地直連鄙陡,通過ARP地址解析確定目的主機(jī)的IP地址與MAC地址的映射關(guān)系,利用該MAC地址作為幀的目的地址躏啰,將IP數(shù)據(jù)報(bào)封裝成幀趁矾,并由以太網(wǎng)實(shí)現(xiàn)數(shù)據(jù)的真正傳遞
IP 接收數(shù)據(jù)
主機(jī)B接收到數(shù)據(jù)幀后,解封該幀并對(duì)其進(jìn)行處理给僵,確定本機(jī)即為目的地址后毫捣,將數(shù)據(jù)報(bào)中封裝的數(shù)據(jù)交由上層協(xié)議進(jìn)行處理,隨即逐層處理并上交直到應(yīng)用層想际,完成此次通信
更多協(xié)議工作原理
移步至我的博客主頁培漏,可見全部
TCP/IP 五大重要特性
邏輯編址:通過IP地址+主機(jī)ID,確保計(jì)算機(jī)可尋
路由選擇:通過網(wǎng)絡(luò)路徑選擇協(xié)議胡本,確保數(shù)據(jù)包到達(dá)目的地
域名解析:將域名映射為IP地址牌柄,使用域名一是便于記憶,二是域名相對(duì)固定不變
錯(cuò)誤檢測(cè):確保分組交換的可靠性傳遞侧甫,確認(rèn)數(shù)據(jù)正常接收
流量控制:監(jiān)測(cè)網(wǎng)絡(luò)流量珊佣,防止網(wǎng)絡(luò)擁塞出現(xiàn)
本篇將持續(xù)更新 TCP / IP 相關(guān)知識(shí),一起查漏補(bǔ)缺學(xué)個(gè)痛快披粟!