内容简介:前言很早以前,去面试,面试官问我,tcp连接一共有多少种状态以及各状态的含义。我一脸懵逼,我知道一些状态,如LISTEN、TIME_WAIT等,但没有关注过总共有多少种状态,更别说每种状态的意义了,后面为了面试详细看了下tcp协议状态,虽然当时记住了(其实也只是粗略的知道),后面总是会忘记,又去搜索,现在将其记下tcp11中状态及变迁其实基本包含在正常的三次握手和四次挥手中,除开CLOSING
前言
很早以前,去面试,面试官问我,tcp连接一共有多少种状态以及各状态的含义。我一脸懵逼,我知道一些状态,如LISTEN、TIME_WAIT等,但没有关注过总共有多少种状态,更别说每种状态的意义了,后面为了面试详细看了下tcp协议状态,虽然当时记住了(其实也只是粗略的知道),后面总是会忘记,又去搜索,现在将其记下
TCP三次握手和四次挥手
tcp11中状态及变迁其实基本包含在正常的三次握手和四次挥手中,除开CLOSING
tcp正常三次握手
从图片流程看,正常的三次握手从服务端打开监听监听(LISTEN)->客户端先发起SYN请求->服务端发起SYN及ACK确认->客户端再确认即三次握手TCP连接成功
而三次握手里面也包含tcp其中四种状态及变迁
LISTEN服务端状态,应用程序打开监听端口,处理来自客户端TCP端口的连接请求
SYN_SENT
客户端状态,当客户端通过应用程序connect()连接时,客户端TCP发送SYN请求主动建立连接,此时状态为SYN_SENT
SYN_RECV
服务端状态,当收到客户端SYN请求后,服务端会发送一个SYN连接请求及ACK确认到客户端,再等待对方连接请求确认,这时状态为SYN_RECV,如果发现有很多SYN_RCVD状态,可能受到了SYN FLood的Dos攻击
ESTABLISHED
当客户端回复正确的ack值后,就建立一个打开的连接,客户端和服务端就都进入ESTABLISHED状态,此时便可以PSH数据
tcp正常四次挥手
从图片流程看,正常的四次握手包含6种tcp状态变迁
如主动发起关闭方为客户端
客户端发送FIN进入FIN_WAIT1 -> 服务端发送ACK确认并进入CLOSE_WAIT(被动关闭)状态->客户端收到ACK确认后进入FIN_WAIT2状态 -> 服务端再发送FIN进入LAST_ACK状态 -> 客户端收到服务端的FIN后发送ACK确认进入TIME_WAIT状态 -> 服务端收到ACK确认后进入CLOSED状态断开连接 -> 客户端在等待2MSL的时间如果期间没有收到服务端的相关包请求,则进入CLOSED状态断开连接
FIN_WAIT1
客户端调用close()关闭连接后,TCP发出FIN请求主动关闭连接,然后进入FIN_WAIT1状态
等待远程TCP连接中断请求或者确认
CLOSE_WAIT
被动关闭状态,TCP接收到FIN后,就发送ack回应客户端的FIN请求,然后就进入了CLOSE_WAIT状态
FIN_WAIT2
半关闭状态,主动关闭端(也就是客户端调用close()后)接收到ack确认后,此时进入FIN_WAIT2状态,该状态下,客户端应用程序依然能接收数据
LAST_ACK
服务端发送确认中断后,也发送FIN关闭请求,然后进入LAST_ACK最后确认关闭状态
TIME_WAIT
在主动关闭端接收到FIN后,TCP就发送ACK,并进入TIME-WAIT状态,该状态持保持由内核参数net.ipv4.tcp_keepalive_time控制时间,默认为2小时,之后主动关闭方也进入CLOSED状态关闭连接
CLOSED
TCP连接关闭,被动关闭端在接收到ack包后,进入CLOSED状态关闭TCP连接
CLOSING状态
CLOSING状态一般较少出现,这种是客户端和服务端同时发起了FIN主动请求关闭。如客户端发送FIN主动关闭,但是没有收到服务端发来的ACK确认,而是先收到了服务端发来的FIN请求关闭连接,所以必须是同时
在进入CLOSING状态后,只要收到了对方对自己发送的FIN的ACK,收到FIN的ACK确认就进入TIME_WAIT状态,因此,如果RTT(Round Trip Time TCP包的往返延时)处在一个可接受的范围内,发出的FIN会很快被ACK从而进入到TIME_WAIT状态,CLOSING状态持续的时间就特别短,因此很难看到这种状态
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 详解状态压缩动态规划算法
- hibernate教程--持久化类状态详解
- hibernate教程--持久化类状态详解
- 分布式系统关注点:“无状态” 详解
- 分布式系统关注点——“无状态”详解
- 关于redis状态监控和性能调优详解
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Building Social Web Applications
Gavin Bell / O'Reilly Media / 2009-10-1 / USD 34.99
Building a social web application that attracts and retains regular visitors, and gets them to interact, isn't easy to do. This book walks you through the tough questions you'll face if you're to crea......一起来看看 《Building Social Web Applications》 这本书的介绍吧!