三次握手和四次断开

三次握手

第一次:客户端给服务器发送一段TCP报文,标记位为syn,意思是请求建立新链接。

第二次:服务器给客户端返回一段TCP报文,标记位为syn和ack,意思是确认可以接收客户端发送的数据,并同意建立新链接。

第三次:客户端给服务器再次发送一段TCP报文,标记位为syn和ack,意思是我可以收到你的数据确认和你建立新链接。(注意第三次握手可以减少服务器开销,例如这种情况:若client 发出的第一个连接请求报文在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达 server。那么这就是一个失效的报文。但 server 收到此失效的连接请求报文段后,就误认为是 client 再次发出的一个新的连接请求。于是就向 client 发出确认报文段,同意建立连接。假设不采用 “三次握手”,那么只要 server 发出确认,新的连接就建立了。由于现在 client 并没有发出建立连接的请求,因此不会理睬 server 的确认,也不会向 server 发送数据。但 server 却以为新的运输连接已经建立,并一直等待 client 发来数据。这样server 的很多资源就白白浪费掉了。)

4ca455027ed74ed3ab64155286793a2c.png

 

四次断开

举例:有客户端A和服务器B正在发送数据

(1)A发送完了,想要断开链接,于是就给B发送FIN报文,A进入FIN_WAIT_1状态

(2)B收到了A发送的FIN,发回给A一个ACK报文用以确认收到,B进入CLOSE_WAIT状态

(3)B关闭了与A的链接口,发回给A一个FIN报文,B进入LAST_ACK状态

(为什么B不将FIN和ACK一并发送呢?

答:“接收到A发来的请求时,B可能还在发送数据,没有想要关闭数据口的意思,所以FIN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给A。”)

(4)A接收到以后给B发送ACK报文,确认断开链接,B进入CLOSED状态

d0a9e8e517074a1ab144faa8ecaf82a1.png

 以下为TCP报文格式

04709df403594b9da4fe7d6bfef4adae.png

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值