TCP协议

文章目录

TCP的特点

TCP的主要特点

  • 面向连接:通信前需建立连接,通信后需释放连接
  • 点对点通信:每条TCP连接只有两个端点
  • 可靠交付:确保数据正确、完整、有序到达
  • 全双工通信:双方可同时发送和接收数据
  • 面向字节流:数据被视为无结构的字节序列
    • TCP 中的"流"(stream) 指的是流入或流出进程的字节序列
    • 面向字节流:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流

面向字节流

  • TCP将应用层交下来的数据看作字节流
  • 不保留应用层数据的边界
  • 接收方可能一次收到多个应用层数据块,也可能一个数据块分多次收到

TCP如何实现可靠传输

  • 理想传输条件的特点
    • 传输信道不产生差错
    • 不管发送方以多快的速度发送数据, 接收方总是来得及处理收到的数据
    • 在理想传输条件下,不需要采取任何措施就能够实现可靠传输
    • 但实际网络都不具备理想传输条件,必须使用一些可靠传输协议 ,在不可靠的传输信道实现可靠传输

停止等待协议

工作方式

  • 每发送完一个分组就停止发送, 等待对方的确认
  • 在收到确认后再发送下一个分组
  • 全双工通信的双方既是发送方也是接收方
  • 假设仅考虑 A 发送数据, 而 B 接收数据并发送确认 ,因此 A 叫做发送方, 而 B 叫做接收方

差错处理

流水线传输

  • 提高传输效率

连续ARQ协议

发送窗口滑动

  • 发送窗口滑动:发送方每收到一个确认, 就把发送窗口向前滑动一个分组的位置

累积确认

  • 累积确认:接收方对按序到达的最后一个分组发送确认, 表示:到这个分组为止的所有分组都已正确收到了

TCP报文首部格式

  • 源端口和目的端口
    • 源端口和目的端口各占 2 字节
    • 端口是传输层与应用层的服务接口
  • 序号
    • 序号占 4 字节。
    • TCP 连接中传送的数据流中的每一个字节都有一个序号
    • 序号字段的值则指的是本报文段所发送的数据的第一个字节的序号
  • 确认号
    • 占 4 字节, 是期望收到对方的下一个报文段的数据的第一个字节的序号
  • 数据偏移
    • 即首部长度,占 4 位, 指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远
    • 单位是 32 位字( 以 4 字节为计算单位)
  • 保留
    • 占 6 位 ,保留为今后使用 ,但目前应置为 0
  • 紧急 URG
    • 控制位
    • 当 URG = 1 时, 表明紧急指针字段有效, 告诉系统此报文段中有紧急数据, 应尽快传送 (相当于高优先级的数据)
  • 确认 ACK
    • 控制位
    • 只有当 ACK =1 时, 确认号字段才有效
    • 当 ACK =0 时, 确认号无效
  • 推送 PSH (PuSH)
    • 控制位
    • 接收 TCP 收到 PSH = 1 的报文段后, 就尽快( 即 "推送" 向前) 交付接收应用进程, 而不再等到整个缓存都填满后再交付
  • 复位 RST (ReSeT)
    • 控制位
    • 当 RST=1 时, 表明 TCP 连接中出现严重差错( 如主机崩溃或其他原因), 必须释放连接, 然后再重新建立运输连接
  • 同步 SYN (SYNchronization)
    • 控制位
    • 同步 SYN = 1 表示这是一个连接请求或连接接受报文
      • 当 SYN = 1 ,ACK = 0 时, 表明这是一个连接请求报文段
      • 当 SYN = 1 ,ACK = 1 时, 表明这是一个连接接受报文段
  • 终止 FIN (FINish)
    • 控制位
    • 用来释放一个连接
    • FIN=1 表明此报文段的发送端的数据已发送完毕, 并要求释放运输连接
  • 窗口
    • 占 2 字节
    • 窗口值告诉对方:从本报文段首部中的确认号算起, 接收方目前允许对方发送的数据量( 以字节为单位)
  • 检验和
    * 占 2 字节
    * 检验和字段检验的范围包括首部和数据这两部分
  • 紧急指针
    • 占 2 字节
    • 在 URG = 1时, 指出本报文段中的紧急数据的字节数( 紧急数据结束后就是普通数据), 指出了紧急数据的末尾在报文段中的位置
  • 选项
    • 长度可变, 最长可达 40 字节
      • 最大报文段长度 MSS
      • 窗口扩大
      • 时间戳
  • 填充
    • 使整个 TCP 首部长度是 4 字节的整数倍
  • 最大报文段长度 MSS
    • 最大报文段长度 MSS (Maximum Segment Size) 是每个 TCP 报文段中的数据字段的最大长度MSS
    • 告诉对方 TCP:"我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节 。"
  • 窗口扩大
    • TCP 窗口字段长度= 16 位, 最大窗口大小 = 64 K 字节
    • 对于传播时延和带宽都很大的网络, 为获得高吞吐率较, 需要更大的窗口
  • 时间戳
    • 序号重复时, 为了使接收方能够把新报文段和迟到很久的旧报文段区分开, 可以在报文段中加上时间戳
相关推荐
蚂蚁吃大象6662 小时前
TLS-国密ECC握手流程
网络
码农学院2 小时前
Windows 服务中获取本机的 IP 地址
网络·网络协议·tcp/ip
2502_911679142 小时前
行业标杆再进化:罗德施瓦茨ZNB8网络分析仪,如何重新定义射频测试精度?
网络
Selenium-Wang2 小时前
动态HTTP隧道代理IP:从配置到实战的完整指南
网络协议·tcp/ip·http
阿湯哥3 小时前
Reactor响应式编程中Flux和FluxSink
运维·服务器·网络
以太浮标3 小时前
华为eNSP模拟器综合实验之- 通过流策略实现Vlan内二/三层隔离
网络·网络协议·华为
flashier3 小时前
ESP32学习笔记_WiFi(3)——HTTP
网络·笔记·单片机·网络协议·学习·http·esp32
桌面运维家3 小时前
vDisk考场环境网络瓶颈怎么定位?快速排查指南
运维·服务器·网络
谢怜823 小时前
计算机网络第四章网络层
网络·计算机网络