Socket编程

 TCP 为什么三次握手而不是两次握手(正解版) 
Socket编程详解_小羊的预备程序员的博客-CSDN博客_socket

1、TCP为什么需要三次握手,采用两次握手可以吗? 

TCP 为什么三次握手而不是两次握手(正解版)

假设主机A为客户端,主机B为服务端

采用三次握手是为了:防止失效的连接请求报文突然又传送到主机B,因而产生错误。

考虑这种情况:主机A第一次发送的连接请求没有丢失,而是因为网络结点导致延迟到达主机B,主机B以为是主机A又发起新的连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B浪费资源。 

2、为什么建立连接协议是三次握手,而关闭连接却是四次握手?

服务器收到客户端的连接请求后,可以把ACK和SYN(ACK起到应答作用,而SYN起到同步作用)放在一个报文里来发送。

但是关闭连接时,当收到对方的FIN报文通知时,仅表示对方没有数据发送给你了;但未必你所有的数据全部发送给对方了,所以你未必会马上关闭SOCKET,你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示同意现在可以关闭连接了。

所以这里的ACK报文和FIN报文都是分开发送的。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值