标签:ACK 报文 基本知识 计算机网络 整理 服务器 FIN 连接 客户端
本基本知识整理及代码源于牛客网C++面试宝典导读,
网址https://www.nowcoder.com/tutorial/93/e1b14ab2b40a4ef98d9e55830eb48d66
TCP
建立连接和断开连接过程:
建立连接:
三次握手:
1.客户端将标志位SYN置为1,随机产生一个值标志位seq=i,将该数据包发送给服务器,客户端进入SYN_SENT状态,等待服务器确认。
2.服务器收到数据包后由SYN=1知道客户端请求建立连接,服务器将SYN和ACK都置为1,ack=i+1,随机产生seq=j,并将数据包发送给客户端,进入SYN_RCVD状态。
3.客户端收到确认后,检查ack=i+1,ACK=1,如果正确将ACK置1,ack=j+1,将数据包发送给服务器,服务器检查ack=j+1,ACK=1,如果正确则建立连接。
为什么要三次握手:
防止客户端已失效的连接请求传到B,产生错误。
例如:客户端发送第一个请求,超时后再次发送请求,最后有两个请求到达服务器,如果没有三次握手,则会建立两个连接,而只有一个连接有效,另一个连接则会占用服务器资源。如果采用三次握手,服务器收不到第二个请求确认,则不会建立第二个连接。
断开连接:
四次挥手:
TCP连接时全双工的,因此每个方向都要单独关闭。
1.客户端发送FIN报文,停止发送数据,进入FIN_WAIT_1状态,此时客户端还可以接受数据。
2.服务器收到FIN报文后,发送ACK给客户端,服务器进入CLOSE_WAIT状态,客户端收到后进入FIN_WAIT_2状态。
3.当服务器没有数据要发送时,发送FIN报文,服务器进入LAST-ACK状态,等待客户端确认。
4.客户端收到FIN报文后,发送ACK报文,客户端进入TIME_WAIT状态,等待2MSL(报文最大生存时间),然后关闭连接。
标签:ACK,报文,基本知识,计算机网络,整理,服务器,FIN,连接,客户端 来源: https://www.cnblogs.com/wshr007/p/11455909.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。