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