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 字节
    • 对于传播时延和带宽都很大的网络, 为获得高吞吐率较, 需要更大的窗口
  • 时间戳
    • 序号重复时, 为了使接收方能够把新报文段和迟到很久的旧报文段区分开, 可以在报文段中加上时间戳
相关推荐
leoFY1231 小时前
STM32H750配置LAN PHY芯片LAN8742
网络·stm32·嵌入式硬件
阿部多瑞 ABU2 小时前
AI红队攻防演化史(2023-2026):从虚拟角色到RLHF劫持——所有攻击方法全景总结与最新趋势分析
网络·人工智能·安全
博客-小覃2 小时前
Zabbix之华为交换机的日志记录信息操作详细教程
服务器·网络·华为·zabbix
stolentime2 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
ytdbc3 小时前
OSPF综合实验
网络
kaisun644 小时前
Docker 构建网络问题排查
网络·docker·eureka
雪度娃娃5 小时前
存储器层次结构——磁盘硬盘存储
服务器·网络·数据库·计算机组成原理
YUANQIANG20245 小时前
通信领域进行蒙特卡洛仿真的思路和步骤
网络
eam0511235 小时前
OSPF综合实验
网络
QQ15401828565 小时前
USB转千兆以太网芯片方案
网络·pt153s·千兆以太网芯片·usb转以太网·千兆网口芯片