TCP四次挥手。

数据传输结束后,通信的双方都可释放连接。现在A和B都处于ESTABLISHED状态。A的应用程序先向TCP发出连接释放报文段,主动关闭TCP连接。A把连接释放报文段的首部FIN置为1,序号seq=u,它等于前面已传送过的数据的最后一个字节的序号加1。这时A进入FIN-WAIT-1状态,等待B的确认。

B收到连接释放报文段后即发出确认,确认号是ack=u+1,而这个报文段自己的序号是v,等于B前面已传送过的数据的最后一个字节的序号加1。然后B就进入CLOSE-WAIT状态。TCP服务器进程这时通知高层应用进程,因为从A到B这个方向的连接释放了,这时的TCP连接处于半关闭状态,即A已经没有数据要发送了,但B若发送数据,A仍要接受。也就是说,从B到A这个方向的连接并未关闭。这个状态可以会持续一些时间。

A收到B的确认后,就进入FIN-WAIT-2状态,等待B发出的连接释放报文段。

若B已经没有要向A发送的数据,其应用进程就通知TCP释放连接。这时B发出的连接释放报文段必须使用FIN=1。现假定B的序号为w(在半关闭状态B可能又发送了一些数据)。B还必须重复上次已发送过的确认号ack=u+1。这是B就进入LAST-ACK状态,等待A的确认。

在A收到B的连接释放报文段后,必须对此发出确认。在确认报文段中把ACK置为1,确认号ack=w+1,而自己的序号是seq=u+1(前面的FIN报文消耗了1个序号)。然后进入TIME-WAIT状态。请注意,现在TCP连接还没释放掉。必须再经过2MSL后,A才进入到CLOSED状态。MSL叫最长报文段寿命,一般为2分钟。

当B收到A发出的确认,就进入CLOSED状态。由此可见B结束TCP连接的时间要比A早一些。等到2MSL结束后A也进入CLOSED状态,至此完成了TCP四次挥手断开连接全过程。

最新文章

  1. 简述UIScrollView的属性和用法
  2. 强连通分量的一二三 | | JZOJ【P1232】 | | 我也不知道我写的什么
  3. adb 常用命令
  4. ecmall程序结构图与常用数据库表
  5. 下载服务器dll文件并动态加载
  6. ios学习:页面跳转(present)
  7. 并发下常见的加锁及锁的PHP具体实现
  8. iOS Block中的weakSelf/strongSelf
  9. Memcached源码分析——process_command函数解析
  10. 自定义view(二)
  11. LINQ to XML编程之编程基础
  12. JAVA基础知识总结:七
  13. nsq理解
  14. sass进阶—变量运算
  15. CodeForce Div 2 C. Masha and two friends
  16. NO.4: 确定对象被使用前已被初始化
  17. error "OPatch cannot find a valid oraInst.loc file to locate Central Inventory
  18. C#之数据类型学习
  19. Linux学习笔记:touch新建文件、修改访问、改动时间
  20. sqlmap简单使用方法

热门文章

  1. java.sql.SQLException: Access denied for user ''@'localhost' (using password: No)
  2. Combination Sum IV -- LeetCode
  3. 【主席树】bzoj3653 谈笑风生
  4. 【DFS序】【莫队算法】【权值分块】bzoj2809 [Apio2012]dispatching
  5. 长按事件OnLongClickListener
  6. 【spring boot】4.spring boot配置多环境资源文件
  7. Intellij IDEA System.out.println输出中文乱码问题
  8. 转:ios学习指南
  9. 文档对象模型-DOM(一)
  10. unity web项目发布服务器Data file is corrupt (not a Unity W