TCP在網路OSI的七層模型中的第四層——Transport層,IP在第三層——Network層,ARP在第二層——Data Link層,在第二層上的資料,我們叫Frame,在第三層上的資料叫Packet,第四層的資料叫Segment。 首先,我們需要知道,我們程式的資料首先會打到TCP的Segment中,然後TCP的Segment會打到IP的Packet中,然後再打到乙太網Ethernet的Frame中,傳到對端後,各個層解析自己的協議,然後把資料交給更高層的協議處理。
你需要注意這麼幾點:
- TCP的包是沒有IP地址的,那是IP層上的事。但是有源埠和目標埠。
- 一個TCP連線需要四個元組來表示是同一個連線(src_ip, src_port, dst_ip, dst_port)準確說是五元組,還有一個是協議。但因為這裡只是說TCP協議,所以,這裡我只說四元組。
- 注意上圖中的四個非常重要的東西:
- Sequence Number是包的序號,用來解決網路包亂序(reordering)問題。
- Acknowledgement Number就是ACK——用於確認收到,用來解決不丟包的問題。
- Window又叫Advertised-Window,也就是著名的滑動視窗(Sliding Window),用於解決流控的。
- TCP Flag ,也就是包的型別,主要是用於操控TCP的狀態機的。