1,TCP连接的建立
(1)服务器必须准备好接受外来的连接,通常通过socket,bind和listen这3个函数完成,称之为被动打开
(2)客户端通过connect发起主动打开,客户端TCP发送一个SYN分节,告诉服务器端客户将在连接中发送的数据的初始序列号,通常SYN分节不携带数据
(3)服务器端必须确认(ACK)客户端的SYN,同时自己发送一个SYN分节,它包含服务端在同一链接中发送的数据的初始序列号。服务端在单个分节中发送SYN和对客户端SYN的ACK(确认)
(4)客户端必须确认服务端的SYN(发送一个ACK进行确认)
这个交换至少需要3个分组,以上称之为TCP连接建立的三次握手
2,TCP连接的终止
(1)某个应用进程首先close,执行主动关闭。客户端的TCP发送一个FIN分节
(2)接收到这个FIN的服务端执行被动关闭。这个FIN由TCP确认。
(3)一段时间后,接收这个文件结束符的应用进程将调用close关闭它的套接字,这就导致它的TCP也发送一个FIN。
(4)接收这个最终的FIN的原发端TCP(即执行主动关闭的一段)确认这个FIN
既然每个方向都要发送一个FIN和ACK,通常情况下4个分节,某些情况下步骤1的FIN随数据一起发送,另外步骤2和3发送的分节也有可能合并成一个分节。

网友评论