前言
在沒有理解TCP連接是如何建立和終止之前,我想你可能并不會使用connect,accept,close這三個函數(shù)并且使用netstat程序來調(diào)試應(yīng)用。所以掌握TCP連接的建立和終止勢在必行。
三次握手
客戶端首先通過調(diào)用connect函數(shù)發(fā)起主動打開(服務(wù)器為被動打開),這導(dǎo)致客戶端TCP發(fā)送一個SYN同步分節(jié)(Synchronize Sequence Numbers),告訴服務(wù)器將在連接中發(fā)送的數(shù)據(jù)的初始序列號,如圖為 J;(SYN分節(jié)不攜帶數(shù)據(jù),其所在的IP數(shù)據(jù)報只含有一個IP首部、一個TCP首部以及可能有的TCP選項)
服務(wù)器需要對客戶端的請求進(jìn)行確認(rèn),同時自己也發(fā)送一個SYN分節(jié)(包含服務(wù)器將在同一連接中發(fā)送的數(shù)據(jù)的初始序列號)
客戶端進(jìn)行確認(rèn)。
為什么發(fā)送加一的序列號呢?因為這是發(fā)送這一端所期待的下一個序列號,而且SYN占據(jù)一個字節(jié)的序列號空間;