当前位置: 首页 > article >正文

计算机网络 (39)TCP的运输连接管理

前言

       TCP(传输控制协议)是一种面向连接的、可靠的传输协议,它在计算机网络中扮演着至关重要的角色。TCP的运输连接管理涉及连接建立、数据传送和连接释放三个阶段。

一、TCP的连接建立

     TCP的连接建立采用三次握手机制,其过程如下:

  1. SYN报文发送:客户端向服务器发送一个SYN(同步)报文段,并随机生成一个初始序列号seq=x,标志位SYN=1。这个报文段表示客户端希望建立连接。
  2. SYN+ACK报文回复:服务器接收到SYN报文后,回复一个SYN+ACK报文段,确认号ack=x+1(表示收到了客户端的SYN报文),同时也生成一个随机序列号seq=y,标志位SYN=1,ACK=1。这个报文段表示服务器同意建立连接。
  3. ACK确认报文:客户端收到服务器的SYN+ACK报文后,回复一个ACK确认报文段,确认号ack=y+1(表示收到了服务器的SYN报文),序列号seq=x+1(此时客户端的序列号需要加1,因为已经发送过一个SYN报文),标志位ACK=1。这个报文段表示客户端确认建立连接。

       三次握手完成后,TCP连接就成功建立了。此时,双方都会创建一个传输控制块TCB,用于存储连接的相关信息,如TCP连接表、指向发送/接收缓存的指针、指向重传队列的指针等。

二、TCP的数据传送

       TCP连接建立后,双方就可以开始传输数据了。TCP利用序列号、确认应答、重传、流量控制、拥塞控制等机制,实现可靠的数据传输。

  1. 序列号:发送方给每个传输的字节分配一个序列号seq,接收方根据序列号来确认数据的顺序和完整性。
  2. 确认应答:接收方收到数据后,会发送一个ACK确认报文段,确认号ack=seq+len(len表示接收到的数据长度),表示已经收到了序列号seq到seq+len-1的数据。
  3. 重传机制:如果发送方在一定时间内没有收到接收方的ACK确认报文段,就会认为数据丢失了,然后重新发送该数据段。
  4. 流量控制:通过接收方的窗口大小来控制发送方的发送速率,避免发送方发送过多数据导致接收方处理不过来。
  5. 拥塞控制:通过动态调整发送速率来避免网络拥塞,提高网络的传输效率。

三、TCP的连接释放

     TCP的连接释放采用四次挥手机制,其过程如下:

  1. FIN报文发送:主动关闭方(可以是客户端或服务器)发送一个FIN(结束)报文段,seq=m(m表示当前发送方的序列号),标志位FIN=1,表示数据发送完毕,请求关闭连接。
  2. ACK确认报文:被动关闭方收到FIN报文后,回复一个ACK确认报文段,ack=m+1(表示收到了主动关闭方的FIN报文),此时主动关闭方到被动关闭方的单向连接就释放了,TCP连接进入半关闭状态。被动关闭方仍可以继续发送数据。
  3. FIN报文再次发送:被动关闭方数据发送完毕后,也发送一个FIN报文段,seq=n(n表示此时被动关闭方的序列号),标志位FIN=1,表示数据也发送完毕,请求关闭连接。
  4. ACK确认并等待:主动关闭方收到被动关闭方的FIN报文后,回复一个ACK确认报文段,ack=n+1(表示收到了被动关闭方的FIN报文)。然后主动关闭方等待2MSL(最大报文段生存时间)时间,确保所有迟到的数据包都已经消失,最后再完全关闭TCP连接。被动关闭方收到ACK确认报文后,就直接关闭连接。

     四次挥手完成后,TCP连接就完全释放了。此时,双方都会删除之前创建的传输控制块TCB。

总结 

       综上所述,TCP的运输连接管理通过三次握手建立连接、可靠的数据传送机制和四次挥手释放连接,确保了数据在不可靠的网络环境下能够按照正确的顺序到达目的地,并且保证了数据的完整性和可靠性。

 结语  

你终将发现,真正的力量

在于怯魅后的自我觉醒

!!!


http://www.kler.cn/a/502071.html

相关文章:

  • vue3+ts+element-plus 对话框el-dialog设置圆角
  • 泛目录和泛站有什么差别
  • rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库
  • Apache Hop从入门到精通 第二课 Apache Hop 核心概念/术语
  • WPF中如何在MVVM模式下跨线程更新UI
  • 微调神经机器翻译模型全流程
  • 36_Lua中的变量
  • 用 Python 从零开始创建神经网络(二十一):保存和加载模型及其参数
  • 6Hive Sql 大全
  • 网络学习记录5
  • AI代理的分类体系与发展路径:从概念重构到基础设施升级
  • 【大模型】大语言模型的数据准备:构建高质量训练数据的关键指南
  • 机器学习之留出法中的分层采样和多次切分
  • 3D目标检测数据集——Nusence坐标变换
  • 电梯系统的UML文档01
  • 【机器学习】主动学习-增加标签的操作方法-流式选择性采样(Stream-based selective sampling)
  • 48_Lua错误处理
  • Solidity入门: 函数
  • 小程序自定义底部tabbar,并且解决遮罩层无法遮挡住底部tabbar问题
  • type 属性的用途和实现方式(图标,表单,数据可视化,自定义组件)
  • 《零基础Go语言算法实战》【题目 2-8】defer 和 return 语句
  • 逆向分析的小短文
  • 6Hive Sql 大全-Hive 函数
  • 【MySQL】基础语法详解:SELECT, INSERT, UPDATE, DELETE轻松上手
  • leetcode(hot100)10、11、12
  • 【HTML+CSS+JS+VUE】web前端教程-29-清除浮动