TCP连接的建立与终止

 三路握手

  下述步骤建立一个TCP连接:

  1、服务器必需准备好接受外来的连接。这通过调用socket、bind和listen函数来完成,成为被动打开(passive open)。

  2、客户通过调用connect进行主动打开(active open)。这引起客户TCP发送一个SYN(表示同步)分节,它告诉服务器客户将在(待建立的)连接中发送的数据的初始序列号。一般情况下SYN分节不携带数据,它只包含一个IP头部、一个TCP头部及可能有的TCP选项。

  3、服务器必需确认客户的SYN,同时自己也得发送一个SYN分节,它含有服务器将在同一连接中发送的数据的初始序列号。服务器以单个分节向客户发送SYN和对客户SYN的ACK(表示确认)。

  4、客户必需确认服务器的SYN。

连接建立过程至少需要交换三个分组,因此称之为TCP的三路握手(three-way handshake)。

 TCP连接终止:

  TCP建立一个连接需三个分节,终止一个连接则需四个分节。

  1、某个应用进程首先调用close,我们称这一端执行主动关闭(active close)。这一端的TCP于是发送一个FIN分节,表示数据发送完毕。

  2、接收到FIN的另一端执行被动关闭(passive close)。这个FIN由TCP确认。它的接收也作为文件结束符传递给接收端应用进程(放在已排队等候该应用进程接收的任何其他数据之后),因为FIN的接收意味着应用进程在相应连接上再也接收不到额外数据。

  3、一段时间后,接收到文件结束符的应用进程将调用close关闭它的套接口。这导致它的TCP也发送一个FIN。

  4、接收到这个FIN的原发送端TCP(即执行主动关闭的那一端)对它进行确认。

  被动关闭那一端的TCP在步骤2和3发出的ACK与FIN也可以合并成一个分节。在步骤2和3之间可以有从执行被动关闭端到执行主动关闭端的数据流,这成为半关闭(half-close)。

  通常情况是客户执行主动关闭,但某些协议如HTTP则是服务器执行主动关闭。

转载于:https://www.cnblogs.com/ChangeIt/archive/2011/12/17/2289395.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值