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