当前位置:   article > 正文

tcp 11种状态转换图_tcp状态转换图

tcp状态转换图

tcp 11种状态转换图:

这里写图片描述

tcp 11种状态含义:

这里写图片描述

LISTEN:等待从任何远端TCP 和端口的连接请求。

SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。

SYN_RECEIVED:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。

ESTABLISHED:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。

FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。

FIN_WAIT_2:等待远端TCP 的连接终止请求。

CLOSE_WAIT:等待本地用户的连接终止请求。

CLOSING:等待远端TCP 的连接终止请求确认。

LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)

TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。
TIME_WAIT 两个存在的理由:
          1.可靠的实现tcp全双工连接的终止;
          2.允许老的重复分节在网络中消逝。

CLOSED:不在连接状态(这是为方便描述假想的状态,实际不存在)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

tcp连接的建立3次握手
服务器端通常处于监听状态即LISTEN,accept()处于阻塞状态
当客户端连接服务器端时此时客户端的connect()刚刚调用并处于阻塞状态,
将会触发以下事件:
首先客户端的应用程序将会使tcp进程发送SYN,MSS,此时客户端将会处于SYN_SENT
网络传输给服务器端后,服务器端tcp接收到后服务器端将会由LISTEN状态变为SYN_RCVD
然后服务器端也会发送一个SYN,MSS还有一个ACK,注意这个ACK是客户端发送的SYN值加1
客户端在接收到服务器端的SYN,MSS,ACK核对无误后将会由SYN_SENT状态变为ESTABLILSHED
此时客户端的connect()函数将会返回不再处于阻塞状态,同时客户端发送ACK,此ACK是服务器端
发送的SYN值加1,服务器端在接收到客户端的ACK核对无误后,accept()将从阻塞状态返回,
同时read()处于阻塞状态。此时连接已经建立

tcp断开连接4次挥手
当一端数据已经发送完了,就会将本端的tcp断开掉通常是客户端主动断开
这种情况同时是客户端应用程序调用close(fd)关闭套接字,这将触发tcp进程发送
FIN,此时客户端将会处于FIN_WAIT_1,服务器端在接收到这个FIN后将会处于close_wait()状态
同时read()return 0,然后服务器端将会发送ACK 值为客户端发送的FIN值加1,客户端在接收到
服务器端发送给它的ACK后将会处于FIN_WAIT_2然后服务器端将
客户端的文件描述符读端关闭,此时服务器端可能还会有未发送的数据,通常会悄悄丢弃掉,然后
关闭客户端描述符close(),然后服务器端tcp进程将会发送FIN此时服务器端将会处于LAST_ACK状态
客户端在接收到服务器端发送的FIN后将会由FIN_WAIT_2状态变为TIME_WAIT状态,同时发送ACK值为
客户端发送的FIN值加1,服务器端在接收到客户端发送的ACK后核对无误后将由LAST_ACK状态变为
CLOSED状态。注意客户端在处于TIME_WAIT状态时要经历2个MSL时间才会将状态变为CLOSED通常这个
等待的时间为60秒

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/158652?site
推荐阅读
相关标签
  

闽ICP备14008679号