[TCP灵魂之问]介绍一下 TCP 报文头部的字段

TCP 报文头部的字段

在这里插入图片描述

  • 源端口、目标端口
如何标识唯一标识一个连接?答案是 TCP 连接的四元组——源 IP、源端口、目标 IP 和目标端口。

那 TCP 报文怎么没有源 IP 和目标 IP 呢?这是因为在 IP 层就已经处理了 IP 。TCP 只需要记录两者的端口即可。
  • 序列号
    即Sequence number, 指的是本报文段第一个字节的序列号。
序列号在 TCP 通信的过程中有两个作用:

在 SYN 报文中交换彼此的初始序列号。
保证数据包按正确的顺序组装。
  • ISN
即Initial Sequence Number(初始序列号),在三次握手的过程当中,双方会用过SYN报文来交换彼此的 ISN。
ISN 并不是一个固定的值,而是每 4 ms 加一,溢出则回到 0,这个算法使得猜测 ISN 变得很困难。那为什么要这么做?
如果 ISN 被攻击者预测到,要知道源 IP 和源端口号都是很容易伪造的,当攻击者猜测 ISN 之后,直接伪造一个 RST 后,就可以强制连接关闭的,这是非常危险的。
而动态增长的 ISN 大大提高了猜测 ISN 的难度。
  • 确认号
    即ACK(Acknowledgment number)。用来告知对方下一个期望接收的序列号,小于ACK的所有字节已经全部收到。

  • 标记位
    常见的标记位有SYN,ACK,FIN,RST,PSH。

  • SYN 和 ACK 已经在上文说过,后三个解释如下:
    FIN: 即 Finish,表示发送方准备断开连接。
    RST:即 Reset,用来强制断开连接。
    PSH: 即 Push, 告知对方这些数据包收到后应该马上交给上层的应用,不能缓存。

  • 窗口大小
    占用两个字节,实际上是不够用的。因此 TCP 引入了窗口缩放的选项,作为窗口缩放的比例因子,这个比例因子的范围在 0 ~ 14,比例因子可以将窗口的值扩大为原来的 2 ^ n 次方。

  • 校验和
    占用两个字节,防止传输过程中数据包有损坏,如果遇到校验和有差错的报文,TCP 直接丢弃之,等待重传。

  • 可选项
    常用的可选项有以下几个:
    TimeStamp: TCP 时间戳,后面详细介绍。
    MSS: 指的是 TCP 允许的从对方接收的最大报文段。
    SACK: 选择确认选项。
    Window Scale: 窗口缩放选项。

不要死记,只要有个印象就行

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值