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 字节
    • 对于传播时延和带宽都很大的网络, 为获得高吞吐率较, 需要更大的窗口
  • 时间戳
    • 序号重复时, 为了使接收方能够把新报文段和迟到很久的旧报文段区分开, 可以在报文段中加上时间戳
相关推荐
REDcker6 小时前
埋点系统设计:从成熟工具到自建方案
运维·服务器·网络·用户分析·埋点·埋点系统
优橙教育6 小时前
通信行业四大热门岗位解析:谁才是数字时代的黄金赛道?
网络·学习·5g
迎仔7 小时前
11-云网络与混合云运维:弹性数字世界的交通管理
网络·安全·web安全
Trouvaille ~7 小时前
【Linux】应用层协议设计实战(二):Jsoncpp序列化与完整实现
linux·运维·服务器·网络·c++·json·应用层
pitch_dark7 小时前
渗透测试系统基础篇——kali系统
网络·安全·web安全
独行soc7 小时前
2026年渗透测试面试题总结-20(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
EmbedLinX7 小时前
嵌入式之协议解析
linux·网络·c++·笔记·学习
凉、介7 小时前
VMware 三种网络模式(桥接 / NAT / Host-Only)原理与实验解析
c语言·网络·笔记·操作系统·嵌入式·vmware
Aliex_git7 小时前
跨域请求笔记
前端·网络·笔记·学习
小白电脑技术8 小时前
飞牛漏洞焦虑?别瞎折腾WAF了!用Lucky五步搞定“防爬墙”
服务器·网络·安全