【问题标题】:TCP flags present in the header标头中存在 TCP 标志
【发布时间】:2010-12-01 14:53:23
【问题描述】:

在我的 ubuntu 9.04 上,/usr/include/netinet/tcp.h 定义 tcp 标头如下

struct tcphdr
  {
    u_int16_t source;
    u_int16_t dest;
    u_int32_t seq;
    u_int32_t ack_seq;
#  if __BYTE_ORDER == __LITTLE_ENDIAN
    u_int16_t res1:4;
    u_int16_t doff:4;
    u_int16_t fin:1;
    u_int16_t syn:1;
    u_int16_t rst:1;
    u_int16_t psh:1;
    u_int16_t ack:1;
    u_int16_t urg:1;
    u_int16_t res2:2;
#  elif __BYTE_ORDER == __BIG_ENDIAN
    u_int16_t doff:4;
    u_int16_t res1:4;
    u_int16_t res2:2;
    u_int16_t urg:1;
    u_int16_t ack:1;
    u_int16_t psh:1;
    u_int16_t rst:1;
    u_int16_t syn:1;
    u_int16_t fin:1;
#  else
#   error "Adjust your <bits/endian.h> defines"
#  endif
    u_int16_t window;
    u_int16_t check;
    u_int16_t urg_ptr;
};

在标志部分,定义了 FIN、SYN、RST、PSH、ACK、URG 值,而我找不到 ECE 和 CWR 标志。 struct tcphdr 中定义的 res1、res2 和 doff 值是什么意思? 是否也可以访问 ECE 和 CWR 标志值?

谢谢。

【问题讨论】:

    标签: linux tcp flags


    【解决方案1】:

    我相信您的 ECE 和 CWR TCP 标志包含在“res2”结构成员中,TCP Header Image 表明 ECE 和 CWR 位位于 URG 旁边。

    【讨论】:

      【解决方案2】:

      是的,它们是“保留 6 位”(res1 + res2)的一部分。它们是可选的,并且或多或少地讨厌添加(史蒂文斯的书甚至没有提到它们)。 Doff 是 4 位,并指定通常为 20 字节的标头长度,但如果包含 MSS 等选项,则可以更长。

      【讨论】:

        【解决方案3】:

        这个 Perl 'NetPacket::TCP' TCP Encode-Decode 代码显示 ECN 和控制位解释。
        但是,Networksorcery TCP page 是这些位的更好参考。

        # TCP 标志 使用常量 FIN => 0x01; 使用常量 SYN => 0x02; 使用常量 RST => 0x04; 使用常量 PSH => 0x08; 使用常量 ACK => 0x10; 使用常量 URG => 0x20; 使用常量 ECE => 0x40; 使用常量 CWR => 0x80;

        CWR”和“ECE”这两个标志用于 Explicit Congestion Notification,如 RFC 3168 中所定义。
        Wikipedia link 是一个很好的信息来源和可选 ECN 支持的 implementation
        最后包括 Floyd ECN page reference
        请务必注意,除非两个 TCP 端点都支持,否则不支持 ECN。
        为此,它并不常见(在线和 TCP 代码上也是如此)。

        另请注意,支持 ECN 的实现的 IP 标头
        还将在其TOS bits 中携带两位 ECN 字段

        【讨论】:

          猜你喜欢
          • 2012-04-13
          • 2021-12-25
          • 1970-01-01
          • 2011-01-05
          • 2023-03-26
          • 2016-12-29
          • 2016-10-29
          • 2012-01-13
          • 2018-07-09
          相关资源
          最近更新 更多