TCP三次握手四次挥手

举报
野猪佩奇996 发表于 2022/01/23 00:52:32 2022/01/23
【摘要】 一.建立连接 SYN是同步位:当SYN=1,ACK=0表明是连接请求报文;若对方同意建立连接后,用SYN=1,ACK=1. ACK=1表示确认号字段ack有效(规定:在连接建立后所有传送的报文段都必须ACK=1)。 注意: (1)服务器同意建立连接,发回的确认段报文不携带数据,但也要消耗一个序号(服务器随机产生起始序号seq=y)...

一.建立连接

SYN是同步位:当SYN=1,ACK=0表明是连接请求报文;若对方同意建立连接后,用SYN=1,ACK=1.
ACK=1表示确认号字段ack有效(规定:在连接建立后所有传送的报文段都必须ACK=1)。
注意:
(1)服务器同意建立连接,发回的确认段报文不携带数据,但也要消耗一个序号(服务器随机产生起始序号seq=y)。
(2)第三条中,可以携带数据,若不携带数据则不消耗序号

二.断开连接

选择题喜欢考察关于连接和释放的题目,牢记ACK/SYN/FIN一定等于1!!!

(1)第一条:【连接释放报文】客户机发送FIN后客户机不能再发data了(单向)——后面第四条还能发确认报文。
(2)第二条:【确认报文】服务器对1确认后,客户机到服务器的连接(单向)彻底释放。
(3)第三条:【连接释放报文】注意这次的确认号ack仍和第二条的ack相同
(4)第四条 :【确认报文】发完后要等2MSL,客户机才进入连接关闭状态。
【注意】TCP是全双工(一条TCP连接有2条数据通路)。

三、常见面试题

(1)为什么连接是三次握手,关闭是四次?

答:四次是因为客户端发送FIN请求释放后,服务器端还可能继续发送数据,所以第一个是先回复客户端的FIN,等发送完所有数据服务器端再发送FIN。
而三次握手是因为客户端发送连接请求后,客户端可以直接发送SYN+ACK报文,而四次挥手是只是先发送ACK报文回应客户端的FIN报文已被接收。

(2)为啥四次挥手要等待2MSL?

答:防止客户端最后一次发送给服务器的确认ACK在网络中丢失,以至于客户端关闭了而服务端未关闭(如果服务端没有收到ACK则会不断发送FIN报文,即客户端不能立马关闭)。
2MSL即一个发送和一个回复的最大时间。

(3)为啥不用两次握手?四次握手?

答:TCP是可靠传输的,面向字节即对每个字节的数据分配一个序号。
1)因为如果两次握手,只有服务器对客户端的起始序列号做出确认,但客户端却没有对服务器的起始序列号做确认,不能保证TCP运输可靠性;
2)而四次握手没必要(第二三步可以合并,提高连接的速度和效率)。

(4)出现很多close_wait咋办?

答:close_wait状态是被动关闭的一方在四次挥手中的第二个步骤,该状态即wait to close,即等待应用程序,主动关闭端关闭socket。

文章来源: andyguo.blog.csdn.net,作者:山顶夕景,版权归原作者所有,如需转载,请联系作者。

原文链接:andyguo.blog.csdn.net/article/details/104425626

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。