1膀跌,TCP連接的建立
(1)服務(wù)器必須準(zhǔn)備好接受外來的連接,通常通過socket固灵,bind和listen這3個函數(shù)完成捅伤,稱之為被動打開
(2)客戶端通過connect發(fā)起主動打開,客戶端TCP發(fā)送一個SYN分節(jié)巫玻,告訴服務(wù)器端客戶將在連接中發(fā)送的數(shù)據(jù)的初始序列號丛忆,通常SYN分節(jié)不攜帶數(shù)據(jù)
(3)服務(wù)器端必須確認(rèn)(ACK)客戶端的SYN,同時自己發(fā)送一個SYN分節(jié)仍秤,它包含服務(wù)端在同一鏈接中發(fā)送的數(shù)據(jù)的初始序列號熄诡。服務(wù)端在單個分節(jié)中發(fā)送SYN和對客戶端SYN的ACK(確認(rèn))
(4)客戶端必須確認(rèn)服務(wù)端的SYN(發(fā)送一個ACK進(jìn)行確認(rèn))
這個交換至少需要3個分組,以上稱之為TCP連接建立的三次握手
2诗力,TCP連接的終止
(1)某個應(yīng)用進(jìn)程首先close凰浮,執(zhí)行主動關(guān)閉∥荆客戶端的TCP發(fā)送一個FIN分節(jié)
(2)接收到這個FIN的服務(wù)端執(zhí)行被動關(guān)閉袜茧。這個FIN由TCP確認(rèn)。
(3)一段時間后瓣窄,接收這個文件結(jié)束符的應(yīng)用進(jìn)程將調(diào)用close關(guān)閉它的套接字笛厦,這就導(dǎo)致它的TCP也發(fā)送一個FIN。
(4)接收這個最終的FIN的原發(fā)端TCP(即執(zhí)行主動關(guān)閉的一段)確認(rèn)這個FIN
既然每個方向都要發(fā)送一個FIN和ACK康栈,通常情況下4個分節(jié)递递,某些情況下步驟1的FIN隨數(shù)據(jù)一起發(fā)送喷橙,另外步驟2和3發(fā)送的分節(jié)也有可能合并成一個分節(jié)。