ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

TCP三次握手和四次挥手

2022-06-01 19:31:22  阅读:181  来源: 互联网

标签:ACK 报文 SYN TCP 四次 FIN 握手 服务端 客户端


三次握手

 

 

第一次握手:客户端向服务端发送SYN报文(SYN=1),指明客户端的初始化序列号(ISN 发送数据中第一个字节的序号),即seq=x,然后客户端进入SYN-SENT状态

第二次握手:服务器接收到客户端的SYN报文,发送SYN报文响应(SYN=1),指定服务端的初始化序列号,即seq=y,回复ACK=1表示确认收到客户端的SYN报文,同时发送客户端ISN+1作为ack确认号的值,表示希望接受下一个数据,即ack=x+1,服务器此时进入SYN_RCVD

第三次握手:客户端接收到服务端的SYN报文,回复ACK=1表示确认收到服务端的SYN报文,同时发送客户端ISN+1作为ack确认号的值,表示希望接受下一个数据,即ack=y+1,指明客户端的序列号,即seq=x+1,客户端进入Established状态,服务端收到ACK报文后,也进入Established状态。

注意:ISN随时间变化,SYN=1的阶段(前两次握手)不能携带数据。

半连接队列和SYN flood攻击
前两次握手完成时,客户端和服务端处于办理按揭状态。泛洪攻击就是发生在此阶段,客户端伪造大量不存在的IP,向服务端发送SYN包,让服务端确认。因为IP地址不存在,服务端需要不断的重传直至超时。

 

 

四次挥手


第一次挥手:客户端发送一个 FIN 报文(请求连接终止:FIN = 1),报文中会指定一个序列号 seq = u。并停止再发送数据,主动关闭 TCP 连接。此时客户端处于 FIN_WAIT1 状态,等待服务端的确认
FIN = 1,seq = u

第二次挥手:服务端收到 FIN 之后,会发送 ACK 报文,且把客户端的序号值 +1 作为 ACK 报文的序列号值,表明已经收到客户端的报文了,此时服务端处于 CLOSE_WAIT状态。
ACK = 1,seq = w,ack= u + 1

此时TCP是半关闭状态,服务端去向应用层确认是否能关闭连接。同时,客户端接收到确认后,进入FIN_WAIT2,等待服务端发送释放报文。

第三次挥手:如果服务端也想断开连接了(没有要向客户端发出的数据),和客户端的第一次挥手一样,发送 FIN 报文,且指定一个序列号。此时服务端处于 LAST_ACK 的状态,等待客户端的确认
FIN = 1,ACK = 1,seq = w,ack = u + 1

第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答(ack = w+1),且把服务端的序列值 +1 作为自己 ACK 报文的序号值(seq=u+1),此时客户端处于 TIME_WAIT(时间等待)状态。
ACK = 1,seq = u + 1,ack = w + 1

标签:ACK,报文,SYN,TCP,四次,FIN,握手,服务端,客户端
来源: https://www.cnblogs.com/zh-dream/p/16335386.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有