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 字节
    • 对于传播时延和带宽都很大的网络, 为获得高吞吐率较, 需要更大的窗口
  • 时间戳
    • 序号重复时, 为了使接收方能够把新报文段和迟到很久的旧报文段区分开, 可以在报文段中加上时间戳
相关推荐
2401_8653825014 分钟前
密评与等保的关系:不是替代,而是互补
网络·信息化造价
白狐_7982 小时前
408计算机网络第3章:PPP协议——帧格式、LCP/NCP、状态机与真题精讲
网络·计算机网络·智能路由器
MIXLLRED2 小时前
解决——Ubuntu远程桌面指令更换网络
linux·网络·ubuntu
zt1985q4 小时前
本地部署开源网络书签与内容管理工具 Karakeep 并实现外部访问
运维·服务器·网络·数据库·网络协议·开源
白狐_7986 小时前
408计算机网络第3章:以太网交换机与共享式以太网——知识总结
服务器·网络·计算机网络
笨鸟先飞,勤能补拙6 小时前
网络安全等级保护 2.0:从定级备案、建设整改到持续合规的系统指南
网络·人工智能·windows·安全·web安全·网络安全·github
wgh6537 小时前
策略路由实验
网络
難釋懷7 小时前
Nginx日志
前端·网络·nginx
Loongproxy8 小时前
大规模采集为啥用隧道代理IP?会话保持如何做到无感轮换
java·服务器·网络
老赵的博客8 小时前
工控机之UDP组播
网络·网络协议·udp