首页 > 其他 > 详细

TCP连接的建立和终止

时间:2014-04-26 03:48:14      阅读:627      评论:0      收藏:0      [点我收藏+]

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。
bubuko.com,布布扣
TCP的三次握手
TCP连接的终止:
  1. 某个应用进程首先调用close,我们称这一端执行主动关闭(active close)。这一端的TCP于是发送一个FIN分节,表示数据发送完毕。
  2. 接收到FIN的另一端执行被动关闭(passive close)。这个FIN由TCP确认。他的接受也作为文件结束符传递给接收端应用进程(放在已排队等候该应用进程接受的任何其他数据之后),因为FIN的接受意味着应用进程在相应的连接上再也接收不到额外数据。
  3. 一段时间后,接收到文件结束符的应用进程将调用close关闭它的套接口。这导致它的TCP也发送一个FIN。
  4. 接收到这个FIN的原发送端TCP(即执行主动关闭的那一端)对它进行确认。
bubuko.com,布布扣
TCP连接关闭时的分组交换
TCP状态转换图:
bubuko.com,布布扣
TCP连接中的分组交换
CLOSED状态:TCP未建立的一般状态
SYN_SENT状态:当应用进程在CLOSED状态下执行一个主动打开时(connect),TCP将发送一个SYN(J)并从CLOSED状态转换成该状态。
LISTEN状态:应用进程被动打开的状态(socket,bind,listen)。
SYN_RCVD状态:应用进程执行被动打开后,接收到一个SYN,TCP将发送一个ACK(J+1)和一个SYN(K)并从LISTEN状态转换成该状态。
ESTAB-LISHED状态:进程执行一个主动打开后,接收到一个捎带ACK的SYN,它将发送一个ACK并转换成该状态。这个最终状态是绝大多数数据传送发生的状态。

FIN_WAIT_1状态:如果应用进程在接收到文件结束符前调用close(主动关闭),发送一个FIN(M)则转换成该状态。
CLOSE_WAIT状态:如果在ESTAB-LISHED状态下,应用进程接收到FIN,并发送一个ACK(M+1),则转换成该状态。
FIN_WAIT_2状态:处在FIN_WAIT_1状态的进程收到也ACK(M+1),转换成该状态。
LAST_ACK状态:被动关闭一方也发送一个FIN(N),并从CLOSE_WAIT状态转换成该状态。
TIME_WAIT:主动关闭一方收到一个FIN(N)后,发送一个ACK(N+1),并转换成该状态。至此,整个TCP连接就完全关闭了,即重新进入CLOSED状态。

TCP连接的建立和终止,布布扣,bubuko.com

TCP连接的建立和终止

原文:http://blog.csdn.net/wan_hust/article/details/24492863

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!