一、TCP 三次握手
connect是一個(gè)抽象概念,不是實(shí)際存在的。
三次握手就是connect的過(guò)程,目的是為了交換序號(hào)初始值。
二、發(fā)送數(shù)據(jù)
發(fā)送方的數(shù)據(jù)如果比較大,就需要進(jìn)行拆包發(fā)送。為了能讓接收方還原包的順序,每個(gè)包都有一個(gè)序列號(hào),第一包的數(shù)列號(hào)就是在connect過(guò)程初始化的(第一包的序列號(hào)不是1的原因是為了安全性)。
ACK機(jī)制保證接收方一定能收到發(fā)送方的數(shù)據(jù),如果發(fā)送的包有丟失,超時(shí)未確認(rèn),發(fā)送方會(huì)重新發(fā)送沒(méi)確認(rèn)的包的數(shù)據(jù)。接收方可能收到重復(fù)的數(shù)據(jù),但是因?yàn)槲覀冇行蛄刑?hào),所以接收方可以知道包是否是重復(fù),如果是重復(fù)的就會(huì)自動(dòng)丟棄掉。
TCP的頭部就是存放這些控制數(shù)據(jù)的(序列號(hào)、ACK號(hào)等)。
三、數(shù)據(jù)路由
IP頭部存放了目標(biāo)的IP地址,但是通常目標(biāo)服務(wù)在比較遠(yuǎn)的地方,和發(fā)送方不是直連的,這就需要進(jìn)行路由,通過(guò)多個(gè)路由節(jié)點(diǎn),接力傳輸,把數(shù)據(jù)送達(dá)目標(biāo)服務(wù)。就像發(fā)快遞一樣 ,IP就是快遞的收貨地址。
路由節(jié)點(diǎn)收數(shù)據(jù)的時(shí)候是不認(rèn)IP地址的,只認(rèn)MAC地址,所以為了把數(shù)據(jù)路由到下一個(gè)節(jié)點(diǎn),需要添加MAC頭部,路由過(guò)程中MAC地址會(huì)被頻繁的修改。
整體過(guò)程是通過(guò)路由表,知道下一個(gè)路由節(jié)點(diǎn)的IP,然后通過(guò)ARP協(xié)議獲取這個(gè)路由節(jié)點(diǎn)的MAC地址,把目標(biāo)MAC地址寫(xiě)到MAC頭部中,直到數(shù)據(jù)包到達(dá)目的地。