字段 |
含义 |
URG |
紧急指针是否有效。为1表示需要被优先处理 |
ACK |
确认号字段有效,一般为1 |
PSH |
提示接受端应用程序立即从TCP缓冲区把数据读走 |
RST |
对方要求重新建立连接,复位 |
SYN |
请求建立连接,并将其序列号的字段进行序列号的初始值设定 |
FIN |
断开连接 |


为什么连接的时候是三次挥手,关闭的时候却是四次挥手?
因为当服务器端收到客户端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务器端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端,"你发的FIN报文我收到了"。只有等到我服务器端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态?
答:虽然按道理,四个报文都发送完毕,我们可以直接进入CLOSE状态了,但是我们必须假象网络是不可靠的,有可以最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。在客户发送出最后的ACK回复,但该ACK可能丢失。服务器如果没有收到ACK,将不断重复发送FIN片段。所以客户不能立即关闭,它必须确认服务器接收到了该ACK。客户会在发送出ACK之后进入到TIME_WAIT状态。客户会设置一个计时器,等待2MSL的时间。如果在该时间内再次收到FIN,那么客户会重发ACK并再次等待2MSL。所谓的2MSL是两倍的MSL(Maximum Segment Lifetime)。MSL指一个片段在网络中最大的存活时间,2MSL就是一个发送和一个回复所需的最大时间。如果直到2MSL,客户都没有再次收到FIN,那么客户推断ACK已经被成功接收,则结束TCP连接。
为什么不能用两次握手进行连接?
3次握手完成两个重要的功能,既要双方做好发送数据的准备工作(双方都知道彼此已准备好),也要允许双方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。
如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
关于我们:
河北镌远网络科技有限公司(Hebei JYCYBER TechnologyCo.,Ltd.)是一家集人才、技术和经验于一体的,提供全面网络安全解决方案的专业服务商。镌远科技致力于为各行业的网络安全需求提供软件研发和通用解决方案,业务领域主要包括基础服务、咨询业务、产品研发和安全培训四大版块,各版块相互独立又相辅相成,完美阐释了“专业服务、全程服务、延伸服务”的服务体系和“单一业务与长远目标相融合”的服务理念。
关注镌远科技,关注网络安全!
河北分公司:河北镌远网络科技有限公司
地址:河北省邯郸市丛台区中华北大街193号慧谷大厦14层
总公司:北京冠程科技有限公司
地址:北京市昌平区科技园区东区产业基地企业墅上区一号楼九单元四层
实训基地:河北省石家庄市电子信息学校冠程科技研究与实训中心


欢迎扫描关注我们,及时了解更多关于网络安全相关知识

