`
stephen830
  • 浏览: 3011638 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

TCP头结构

阅读更多

  TCP协议头最少20个字节,包括以下的区域(由于翻译不禁相同,文章中给出相应的英文单词):
   TCP源端口(Source Port):16位的源端口其中包含初始化通信的端口。源端口和源IP地址的作用是标示报问的返回地址。
   TCP目的端口(Destination port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。
   TCP序列号(序列码,Sequence Number):32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1。这个序列号(序列码)是可以补偿传输中的不一致。
   TCP应答号(Acknowledgment   Number):32位的序列号由接收端计算机使用,重组分段的报文成最初形式。,如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。
   数据偏移量(HLEN):4位包括TCP头大小,指示何处数据开始。
   保留(Reserved):6位值域,这些位必须是0。为了将来定义新的用途所保留。
   标志(Code Bits):6位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。
   窗口(Window):16位,用来表示想收到的每个TCP数据段的大小。
   校验位(Checksum):16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值 结果完全一样,从而证明数据的有效性。
   优先指针(紧急,Urgent  Pointer):16位,指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。
   选项(Option):长度不定,但长度必须以字节。如果 没有 选项就表示这个一字节的域等于0。
   填充:不定长,填充的内容必须为0,它是为了数学目的而存在。目的是确保空间的可预测性。保证包头的结合和数据的开始处偏移量能够被32整除,一般额外的零以保证TCP头是32位的整数倍。
<附图是用SNIFFER抓的一个包头结构>

        00 50 07 45 9b d6 43        3c 47 fd 37 50 50 18
        ff 1f 05 a5 00 00 48         54 54 50 2f 31 2e 31
        20 32 30 30 20 4f 4b         0d 0a 53 65 72 76 65
        72 3a 20 4d 69 63 72         6f 73 6f 66 74 2d 49
        49 53 2f 35 2e 30 0d         0a 44 61 74 65 3a 20
        57 65 64 2c 20 31 32         20 4e 6f 76 20 32 30
        30 33 20 30 33 3a 33         37 3a 35 35 20 47 4d
        54 0d 0a 43 6f 6e 6e         65 63 74 69 6f 6e 3a
        20 63 6c 6f 73 65 0d         0a 48 54 54 50 2f 31
        2e 31 20 32 30 30 20         4f 4b 0d 0a 53 65 72
        76 65 72 3a 20 4d 69         63 72 6f 73 6f 66 74
        2d 49 49 53 2f 35 2e         30 0d 0a 50 72 61 67
        6d 61 3a 20 6e 6f 2d         63 61 63 68 65 0d 0a
        43 6f 6e 74 65 6e 74         2d 74 79 70 65 3a 20
        74 65 78 74 2f 70 6c         61 69 6e 3b 63 68 61
        72 73 65 74 3d 67 62         32 33 31 32 0d 0a 0d
        0a

解析:
源端口:00 50    目的端口:07 45  序列号:9b d6 43 3c
应答号:47 fd 37 50   数据偏移量:50   保留:
标志位:18       窗口:ff 1f             校验位:05 a5
优先指针:00 00    选项:       填充:(余下的205字节为TCP数据)

      标志控制功能 URG:紧急标志
      紧急(The urgent pointer) 标志有效。紧急标志置位,
    ACK:确认标志 确认编号(Acknowledgement  Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。
  PSH:推标志
      该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。
    RST:复位标志 复位标志有效。用于复位相应的TCP连接。
    SYN:同步标志 同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户 端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字 节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。
  FIN:结束标志
    带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。服务端处于监听状态,客户端用于建立连接请求的数据包(IP packet)按照TCP/IP协议堆栈组合成为TCP处理的分段(segment)。
    分析报头信息: TCP层接收到相应的TCP和IP报头,将这些信息存储到内存中。
    检查TCP校验和(checksum):标准的校验和位于分段之中(Figure:2)。如果检验失败,不返回确认,该分段丢弃,并等待客户端进行重传。
  查找协议控制块(PCB{}):TCP查找与该连接相关联的协议控制块。如果没有找到,TCP将该分段丢弃并返回RST。(这就是TCP处理没有端口监听情况下的机制)
       如果该协议控制块存在,但状态为关闭,服务端不调用connect()或listen()。该分段丢弃,但不返回RST。客户端会尝试重新建立连接请求。
   建立新的socket:当处于监听状态的socket收到该分段时,会建立一个子socket,同时还有socket{},tcpcb{}和pub{} 建立。这时如果有错误发生,会通过标志位来拆除相应的socket和释放内存,TCP连接失败。如果缓存队列处于填满状态,TCP认为有错误发生,所有的 后续连接请求会被拒绝。这里可以看出SYN Flood攻击是如何起作用的。
     丢弃:如果该分段中的标志为RST或ACK,或者没有SYN标志,则该分段丢弃。并释放相应的内存。
     发送序列变量
       SND.UNA : 发送未确认
       SND.NXT : 发送下一个
       SND.WND : 发送窗口
       SND.UP : 发送优先指针
       SND.WL1 : 用于最后窗口更新的段序列号
       SND.WL2 : 用于最后窗口更新的段确认号
       ISS : 初始发送序列号
    接收序列号
       RCV.NXT : 接收下一个
       RCV.WND : 接收下一个
       RCV.UP : 接收优先指针
       IRS : 初始接收序列号
     当前段变量
        SEG.SEQ : 段序列号
        SEG.ACK : 段确认标记
        SEG.LEN : 段长
        SEG.WND : 段窗口
        SEG.UP : 段紧急指针
        SEG.PRC : 段优先级
     CLOSED表示没有连接,各个状态的意义如下:
        LISTEN : 监听来自远方TCP端口的连接请求。
        SYN-SENT : 在发送连接请求后等待匹配的连接请求。
        SYN-RECEIVED : 在收到和发送一个连接请求后等待对连接请求的确认。
        ESTABLISHED : 代表一个打开的连接,数据可以传送给用户。
        FIN-WAIT-1 : 等待远程TCP的连接中断请求,或先前的连接中断请求的确认。
        FIN-WAIT-2 : 从远程TCP等待连接中断请求。
        CLOSE-WAIT : 等待从本地用户发来的连接中断请求。
        CLOSING : 等待远程TCP对连接中断的确认。
        LAST-ACK : 等待原来发向远程TCP的连接中断请求的确认。
        TIME-WAIT : 等待足够的时间以确保远程TCP接收到连接中断请求的确认。
        CLOSED : 没有任何连接状态。
        TCP连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS。传送过 来的数据段,特别那些包括以下标记的数据段SYN,ACK,RST和FIN。还有超时,上面所说的都会时TCP状态发生变化。
   序列号:请注意,我们在TCP连接中发送的字节都有一个序列号。因为编了号,所以可以确认它们的收到。对序列号的确认是累积性的。TCP必须进行的序列号比较操作种类包括以下几种:
      ①决定一些发送了的但未确认的序列号。
      ②决定所有的序列号都已经收到了。
       ③决定下一个段中应该包括的序列号。
     对于发送的数据TCP要接收确认,确认时必须进行的:
        SND.UNA = 最老的确认了的序列号。
        SND.NXT = 下一个要发送的序列号。
        SEG.ACK = 接收TCP的确认,接收TCP期待的下一个序列号。
        SEG.SEQ = 一个数据段的第一个序列号。
        SEG.LEN = 数据段中包括的字节数。
        SEG.SEQ+SEG.LEN-1 = 数据段的最后一个序列号。
     如果一个数据段的序列号小于等于确认号的值,那么整个数据段就被确认了。而在接收数据时下面的比较操作是必须的:
        RCV.NXT = 期待的序列号和接收窗口的最低沿。
        RCV.NXT+RCV.WND:1 = 最后一个序列号和接收窗口的最高沿。
        SEG.SEQ = 接收到的第一个序列号。
        SEG.SEQ+SEG.LEN:1 = 接收到的最后一个序列号

分享到:
评论

相关推荐

    实验:Wireshark软件在运用FTP命令时抓取TCP头结构.docx

    实验:Wireshark软件在运用FTP命令时抓取TCP头结构.docx

    IP头_TCP头_UDP头_MAC帧头定义

    网络协议头部结构定义 在计算机网络中,各种协议的头部结构是协议的核心...MAC 帧头、IP 头、TCP 头和UDP 头是网络协议中最重要的头部结构,它们定义了数据包的结构和格式,了解这些头部结构是理解网络协议的基础。

    TCP RAW_SOCKET源码

    // 创建一个TCP头结构 tcphdr tcpHeader; // ... 初始化tcpHeader... // 组装数据包 char packetBuffer[IP_MAXPACKET]; memcpy(packetBuffer, &ipHeader, sizeof(ipHeader)); memcpy(packetBuffer + sizeof...

    TCP.rar_tcp

    ### TCP头部结构 TCP头部包含了多个字段,如源端口号和目的端口号用于标识通信的两端,序列号和确认号用于可靠传输,数据偏移量指明头部长度,标志位(如FIN、SYN、ACK)用于控制连接状态,还有窗口大小、紧急指针...

    tcp.rar_TCP 51_tcp_tcp 单片机_单片机_单片机TCP

    此外,还需要理解TCP头部结构,以便正确解析和构建TCP报文。 原程序代码应包括以下关键部分: 1. **初始化**:设置串行通信接口,配置波特率,并连接到网络模块。 2. **TCP连接管理**:实现TCP的三次握手过程,发送...

    TCP-IP技术大全

    IP协议家族 77 9.1 TCP/IP模型 77 9.1.1 解剖TCP/IP模型 78 9.1.2 协议组件 78 9.2 理解网际协议(IP) 79 9.2.1 IPv4结构 79 9.2.2 IP做什么 80 9.3 理解传输控制协议(TCP) 81 9.3.1 TCP头...

    以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解

    以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解 以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解

    TCP/IP教程TCP/IP基础

    9.3.1 TCP头结构 81 9.3.2 TCP做什么 83 9.4 理解用户数据报协议(UDP) 85 9.4.1 UDP头结构 85 9.4.2 UDP能做什么 85 9.4.3 TCP和UDP 86 9.5 小结 86 第10章 IPv6 87 10.1 IPv6数据报 87 10.1.1 优先级分类 88 10.1.2...

    TCPC.rar_W5500 TCP例程_tcp server_w5500_两块w5500通讯

    在实现过程中,开发者需要熟悉W5500的SPI通信协议,理解TCP连接的三次握手和四次挥手过程,同时掌握TCP头部结构以及滑动窗口机制,确保数据的正确性和完整性。此外,还需要关注网络编程中的异常处理,例如超时重传、...

    TCP/IP技术大全

    9.3.1 TCP头结构 81 9.3.2 TCP做什么 83 9.4 理解用户数据报协议(UDP) 85 9.4.1 UDP头结构 85 9.4.2 UDP能做什么 85 9.4.3 TCP和UDP 86 9.5 小结 86 第10章 IPv6 87 10.1 IPv6数据报 87 10.1.1 优先级分类 88 10.1.2...

    TCP/IP详解第二卷实现

    书中会详细介绍TCP的连接建立(三次握手)、数据传输、流量控制、拥塞控制、断开连接(四次挥手)等机制,并剖析TCP头部结构及各种标志位的含义。 2. **IP(网际协议)**:作为网络层的核心,IP负责数据在网络中的...

    TCP包结构.

    以下为TCP包结构的相关知识点。 TCP提供全双工的数据通信服务,即在同一TCP连接上,数据可以双向流动。TCP可以确保数据传输的可靠性,即使在网络环境不佳时,也能保证数据的有序和正确送达。它通过序列号和确认应答...

    抓包分析TCP的三次握手(建立连接)和四次挥手(关闭连接)

    TCP 三次握手和四次挥手...* TCP 头长度(4 位) * Reserved(6 位) * 控制代码(6 位) * 窗口大小(16 位) * 偏移量(16 位) * 校验和(16 位) * 选项(32 位,optional) TCP 包头结构的最小长度为 20 字节。

    互联网技术与应用--tcp\ip技术

    - 在`IPHead.h`中定义IP和TCP头部结构,利用共用体处理版本和头部长度的位运算,以节省内存空间。 - `IP_HEAD`结构体包含IP包头所有字段,如源/目标地址、协议类型等。 - `TCP_HEAD`结构体则包含了TCP头部的关键...

    tcp_header_state.pdf

    本文档将以内容提供的信息为依据,深入探讨TCP协议头的结构以及TCP在数据传输过程中的各种状态。 首先,TCP头部结构中包含以下几个关键字段: 1. 序号字段(Sequence Number):该字段长度为32位,用于标识TCP报文...

    Linux高性能服务器编程清晰PDF+源码

    3.2.1 TCP固定头部结构 3.2.2 TCP头部选项 3.2.3 使用tcpdump观察TCP头部信息 3.3 TCP连接的建立和关闭 3.3.1 使用tcpdump观察TCP连接的建立和关闭 3.3.2 半关闭状态 3.3.3 连接超时 3.4 TCP状态转移...

    tcpip协议tcp模块代码

    - `struct tcp_hdr`:TCP头结构,包含源端口、目的端口、序列号、确认号、数据偏移、保留、标志、窗口大小等字段。 - `tcp_conn`:表示TCP连接的状态机,管理连接的各种状态,如CLOSED、LISTEN、SYN_SENT、SYN_RCVD...

    TCPTestTool-master_TCP压测_TCP协议mfc_tcp_压测_

    这可能涉及到对TCP头部结构的理解,包括源和目的端口号、序列号、确认号、数据偏移、保留位、标志位(如SYN、ACK、FIN等)、窗口大小以及选项和填充等字段。自定义协议解析意味着用户需要根据具体应用的报文格式,...

    TCP协议之连接过程

    TCP头部结构包含多个字段,如源端口和目的端口(16位),序列号和确认号(32位),以及头部长度、标志位、窗口大小、紧急指针、选项和填充等,这些字段共同保证了TCP协议的高效和灵活。 TCP协议虽然提供了强大的...

Global site tag (gtag.js) - Google Analytics