首页 > 编程知识 正文

面试回答缺点的范例,调整面试时间最好的理由是什么

时间:2023-05-04 11:44:11 阅读:63272 作者:1285

首先,请了解TCP连接上的time_wait的状态

解答:先上TCP状态转移图

1. time_wait状态如何产生?

在以上的转移图中,首先close ) )而开始主动关闭的一侧在发送最后的ACK后变为time_wait的状态,该发送侧保持2MSL时间后返回初始状态。 MSL是数据包在网络中的最大生存时间。 因此,在等待2MSL连接时,此TCP连接将无法使用定义此连接的四组元组(客户端IP地址和端口、服务端IP地址和端口号)。

2.time_wait状态产生的原因

1)为实现TCP全双工连接的可靠释放

从TCP状态转移图中可以看到,如果开始主动关闭的一侧[客户端]上次发送的ACK在网络上丢失,则TCP协议的重新发送机制会导致执行被动关闭的一侧[服务器]重新发送其FIN 即,与该TCP连接对应的资源(客户端侧的local_ip, local_port ) )不能立即释放或重新分配,而是在客户端从另一个重新发送的FIN到达后重新发送ACK后经过2MSL的时间不再从另一个接收FIN后, 如果该TCP连接主动关闭而不保持这种可以恢复原始clock的TIME_WAIT状态,则当从被动关闭方发送的FIN到达时,主动关闭方的TCP传输

2)为使旧的数据包在网络因过期而消失

为了说明这个问题,首先假设TCP协议没有TIME_WAIT状态限制,然后假设当前有TCP连接。 ((local_ip、local_port、remote_ip、remote_port ) )出于某些原因,请先将其关闭。 如上所述,由于TCP连接在4组中是唯一标识的,在我们假设的情况下,TCP协议栈无法区分前后两条TCP连接之间的差异,因此在看来,这基本上是相同的连接,在中途释放后建立的过程更是如此这在前面的TCP连接由本地peer发送的数据到达远程peer之后,由该remot peer的TCP传输层作为当前TCP连接的正常数据接收,并且可能传递到APP应用层(旧连接由于建立了由相同四对组成的新TCP连接,这些旧数据不应该传递到APP应用层),这会引起数据混乱,并导致各种无法预测的奇怪现象。 作为可靠的传输协议,TCP必须在协议级别考虑并避免这种情况。 这是TIME_WAIT状态存在的第二个原因。

3)总结

更具体地说,在local peer主动调用close后,此时的TCP连接将处于TIME_WAIT状态,处于该状态的TCP连接不能立即在同一对4中建立新连接。 也就是说,无法在TIME_WAIT期间重新分配启动活动关闭的一方占用的local port。 由于TIME_WAIT状态的持续时间为2MSL,因此可以确保旧TCP连接的双工链路中的旧分组在过期(超过MSL )时丢失,然后在相同的四对新连接中不会发生前后两次连接数据混乱

3.time_wait状态如何避免

首先,设置SO_REUSEADDR套接字选项以通知内核,以便在端口忙且TCP连接处于TIME_WAIT状态时重用端口。 一个非常有用的方案是,如果希望在服务器程序停止后立即重新启动,但新套接字想要使用同一端口,则使用SO_REUSEADDR选项可以避免TIME_WAIT状态。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。