一、简述3次握手和4次挥手
【3次握手】
【4次挥手】
二、为什么TCP连接的时候是3次?2次不可以吗?
主要是为了确认客户端、服务端都有接受和发送消息的能力
第一次:客户端-----发送请求—>服务端,确认客户端有发送消息的能力
第二次:服务端-----发送请求—>客户端,确认服务端有接收消息的能力、服务端有发送消息的能力
第三次:客户端-----发送请求—>服务端,确认客户端有接收消息的能力
没有第三次无法确认客户端是否有接收消息的能力
三、为什么TCP连接的时候是3次,关闭的时候却是4次?
因为关闭时,需要客户端、服务端都同意,并且需要等待服务端处理完数据。
因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。
服务端收到断开的请求后,会先给客户端一个回应,然后客户端等待服务端处理完正在传输的数据,传输完毕后,服务端会再向客户端发送一次请求告诉客户端数据传输完毕,可以断开连接了。
四、为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?
这里同样是要考虑丢包的问题。
如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到了。
五、如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
最后修改时间:2025-02-17 16:23:37
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
TA的专栏
Java中间件
收录0篇内容
热门文章
一次Connection reset by peer的问题排查
2021-12-07 33611浏览
Java8-Stream: no instance(s) of type variable(s) R exist so that void conforms to R
2021-02-19 32247浏览
nginx: [emerg] "user" directive is not allowed here in /etc/nginx/conf.d/nginx.conf:1
2022-02-15 24150浏览
ORA-00904: "POLTYP": invalid identifier
2019-06-19 12914浏览
PageHelper排坑,处理排序失败: net.sf.jsqlparser.JSQLParserException
2022-05-19 12669浏览
目录