TCP/IP状态转换图过程解析,三次握手,四次挥手。

第一次写博客,总结TCP状态转换过程,主要用于记录自己的学习过程,方便以后回头查看。有错误之处,请多多指教。

第一次看这张图的时候有点蒙,主要是那些箭头问题有点蒙。其实是不知道那个什么时候开始,以及客户端服务器顺序变换。

为了方便知道每个步骤对应图中,便在每个节点添加了字母。

1.CLOSED:客户端,服务器起点。在超时或者关闭时会进入这个状态,可以说是起点和终点。

2.LISTEN:服务器等待连接的状态。(经过socket,bind,listen函数之后进入此状态)开始监听客户端发过来的请求。(A---B)

3.SYN_SENT:第一次握手发生阶段,客户端调用connect,,发送SYN给服务器,然后进入SYN_SENT状态(对应途中A--->C),此时会等待服务器回复ACK报文(服务器收到SYN,会发送SYN和ACK给客户端,对应三次握手中的第二步)。但如果服务器不能连接,则直接回进入CLOSED状态(既回到原点A了)。

4.SYN_RCVD:第二次握手发生的阶段,这里是服务器接收到了客户端的SYN,此时服务器由LISTEN进入SYN_RCVD状态,服务器回复一个ACK给客户端(第三步有说到客户端会等待服务器确认,就是发送在此步骤),同时也会发送一个SYN。(这里对应B--->D)

5.ESTABLISHED:第三次握手发生阶段,客户端接收第二次握手ACK包后,会给服务端发送ACK确认包,同时客户端会进入ESTABLISHED状态(对应C---->E),服务端收到客户端的ACK后会从SYN_RCVD状态转变成ESTABLISHED状态(对应D--->E)。当服务端客户端变成该状态,就代表可以进行数据传输了。

以上可以说是三次握手的过程了。

四次挥手:

1.FIN_WAIT_1:第一次挥手。主动关闭的一方(服务端和客户端都可以,一般都是客户端),断开连接时,发送FIN给对方,然后等待对方的ACK,然后调用close()第一次挥手就进入此状态。(E--->J

2.CLOSE_WAIT:接收到FIN后,被动方(当前客户端作为主动关闭,因此这个被动方则是服务端)就会进入此状态。首先接收到客户端发送的FIN,同时向客户端发送ACK(此部分是CLOSE_WAIT)(E--->F);服务端的应用进程会接收到由客户端发送的FIN来作为一个文件结束符,一段时间后,这个

应用进程将调用close关闭套接字,此时TCP会给客户端发送一个FIN,服务器状态变迁LAST_ACK。(F--->G

3.FIN_WAIT_2:客户端(主动方)收到第3步由服务端发的ACK后会进入FIN_WAIT_2;(J--->K)在这之后,收到服务端close(应用进程关闭,TCP发送的)发送的那个FIN,状态改变成TIME_WAIT,然后也会给服务端发送ACK。(L--->H)

4:服务端收到这个ACK后,服务端酒完全关闭,状态变为CLOSED,客户端也会变成CLOSED。

 

 

参考链接:https://blog.csdn.net/simanstar/article/details/80627529

https://www.cnblogs.com/Victor-Tian/p/7842501.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值