TCP三次握手、四次挥手及特殊情况总结

TCP三次握手、四次挥手及特殊情况总结

前言

TCP协议是一个非常重要的传输层协议,它是一个基于连接的、具有可靠性的数据流协议。

TCP三次握手

流程

[外链图片转存失败(img-MrEX6NWB-1562922482162)(./pic/三次握手.jpg)]

  1. 发送方向接受方发送SYN,进入SYN_SENT阶段。
  2. 接受方收到后若接受连接请求,向发送方发送SYN ACK,进入SYN_RCVD阶段。
  3. 发送方收到后,向接受方发送ACK,进入ESTABLISHED阶段。
  4. 接受方收到ACK后进入ESTABLISHED阶段。
为什么是三次握手而不是两次或是四次?
  • 三次握手是保证连接的最少次数。
  • 如果是两次连接:
    • 不能有效防止洪范攻击,没有半连接队列,无法连接数量进行控制;
    • 假定当前网络状况不佳,A向B发送了SYN请求连接,此时因网络原因阻塞造成超时。A重发SYN,B收到后建立起连接并传输数据后关闭,此时之前阻塞的SYN再次到达B,B会以为A又要建立连接。
TCP连接的特殊情况

[外链图片转存失败(img-5tnL7Dws-1562922482163)(./pic/连接特殊情况.jpg)]
这种情况是极为少见的,发送方和接受方几乎同时发起连接请求,此时并不会建立起两条连接,而是会经历四次交互。

TCP四次挥手

流程

[外链图片转存失败(img-QZZ0dVdU-1562922482164)(./pic/四次挥手.jpg)]

  1. 发送方向接受方发送FIN,进入FIN_WAIT1阶段。
  2. 接受方收到后向发送方发送ACK,进入CLOSE_WAIT阶段。
  3. 发送方收到后进入FIN_WAIT2阶段。此时链路进入到一个半双工阶段,接受方仍可以向发送方发送数据。
  4. 接受方准备好关闭连接后,向发送方发送FIN,进入LASR_ACK阶段。
  5. 发送方收到后,向接受方发送ACK,进入TIME_WAIT阶段,等待2MSL后关闭连接。
  6. 接受方收到ACK后就进入了CLOSED阶段。
为什么是四次挥手?

TCP协议是一个全双工协议,当收发双方中一方关闭了连接,进入半双工状态,仍能向对方发送数据。

为什么要等待2MSL?

2MSL(Maximum Segment Lifetime)
连接化身:在关闭一个TCP连接后,马上又重新建立起一个相同五元组的连接,后一个连接被称为前一个连接的化身。
1.确保最后一个ACK能到达接受方。
若发生超时,可以及时补发ACK
2.让延时的报文在网络中消失。
在2MSL内不允许一个新的连接化身建立,因为这样之前延时的报文会发送到新的连接上,发生混乱。

特殊情况

[外链图片转存失败(img-xXupmtOY-1562922609121)(./pic/挥手特殊情况.jpg)]
同建立连接时的特殊情况类似,收发双方几乎同时关闭连接,此时会有一个新的状态CLOSING

总结

以上简单介绍了一下TCP三次握手、四次挥手以及一些常规问题,特殊情况的总结。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值