您的位置:首页 > 理论基础 > 计算机网络

TCP 三次握手机制

2015-09-10 14:59 399 查看


tcp为什么要第三次握手,time_wait是做什么的? 
tcp有几种状态,画出所有的状态转换图。 

晚上看到的面试题,TCP三次握手的印象很深,但为什么需要3次握手,还是想不起来了。

简单而言:如果不是三次握手的话,那么到底需要几次握手最佳呢?2次握手,或者4次以上的握手?

先看2次握手的情况:客户端给服务器发送建立连接的请求,服务器同意连接请求发回应给客户端,连接就此建立。

有问题的就是网络中经常会出现的包的延迟,如果客户端的某个包在路由器上延迟了,过了很久才发给服务器,服务器收到这个包后回应给客户端,服务器以为连接就此建立成功,分配资源,这样就会出现问题。

再看四次握手的情况:

①A发送SYN,

②B收到SYN后发送ACK+SYN

③A发送ACK

④B再发送ACK

实际上这样的过程可以一直循环下去,其实3次握手已经是能够使双方知道对方设备都是好用的最少次数。四次握手会浪费资源。

综上所述,TCP 3次握手最好。

下面是第二个问题:time_wait是做什么的?



假设客户端发送的最后一个ACK丢失了,服务器会重发它发送的最后一个FIN,所以客户端必须维持一个状态信息,以便能够重发ACK;如果不维持这种状态,客户端在接收到FIN后将会响应一个RST,服务器端接收到RST后会认为这是一个错误。如果TCP协议能够正常完成必要的操作而终止双方的数据流传输,就必须完全正确的传输四次握手的四个节,不能有任何的丢失。这就是为什么socket在关闭后,仍然处于
TIME_WAIT状态,因为他要等待以便重发ACK。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: