精华内容
下载资源
问答
  • ip头、tcp头、udp头详解

    千次阅读 2019-12-30 22:57:48
    mac帧定义 /*数据帧定义,14个字节,尾4个字节*/ typedef struct _MAC_FRAME_HEADER { char m_cDstMacAddress[6]; //目的mac地址 char m_cSrcMacAddress[6]; //源mac地址 short m_cType; //上一层协议类型,...
    报文封装整体结构

    在这里插入图片描述

    mac帧头定义
    /*数据帧定义,头14个字节,尾4个字节*/
    typedef struct _MAC_FRAME_HEADER
    {
     char m_cDstMacAddress[6];    //目的mac地址
     char m_cSrcMacAddress[6];    //源mac地址
     short m_cType;            //上一层协议类型,如0x0800代表上一层是IP协议,0x0806为arp
    }__attribute__((packed))MAC_FRAME_HEADER,*PMAC_FRAME_HEADER;
    
    ip头部定义

    在这里插入图片描述

    /*IP头定义,共20个字节*/
    typedef struct _IP_HEADER 
    {
     char m_cVersionAndHeaderLen;       //版本信息(前4位),头长度(后4位)
     char m_cTypeOfService;            // 服务类型8位
     short m_sTotalLenOfPacket;        //数据包长度
     short m_sPacketID;              //数据包标识
     short m_sSliceinfo;               //分片使用
     char m_cTTL;                  //存活时间
     char m_cTypeOfProtocol;          //协议类型
     short m_sCheckSum;             //校验和
     unsigned int m_uiSourIp;          //源ip
     unsigned int m_uiDestIp;          //目的ip
    } __attribute__((packed))IP_HEADER, *PIP_HEADER ;
    
    • 版本(Version)字段:占4比特。用来表明IP协议实现的版本号,当前一般为IPv4,即0100。
    • 报头长度(Internet Header Length,IHL)字段:占4比特。是头部占32比特的数字,包括可选项。普通IP数据报(没有任何选项),该字段的值是5,即160比特=20字节。此字段最大值为60字节。
    • 服务类型(Type of Service ,TOS)字段:占8比特。其中前3比特为优先权子字段(Precedence,现已被忽略)。第8比特保留未用。第4至第7比特分别代表延迟、吞吐量、可靠性和花费。当它们取值为1时分别代表要求最小时延、最大吞吐量、最高可靠性和最小费用。这4比特的服务类型中只能置其中1比特为1。可以全为0,若全为0则表示一般服务。服务类型字段声明了数据报被网络系统传输时可以被怎样处理。例如:TELNET协议可能要求有最小的延迟,FTP协议(数据)可能要求有最大吞吐量,SNMP协议可能要求有最高可靠性,NNTP(Network News Transfer Protocol,网络新闻传输协议)可能要求最小费用,而ICMP协议可能无特殊要求(4比特全为0)。实际上,大部分主机会忽略这个字段,但一些动态路由协议如OSPF(Open Shortest Path First Protocol)、IS-IS(Intermediate System to Intermediate System Protocol)可以根据这些字段的值进行路由决策。
    • 总长度字段:占16比特。指明整个数据报的长度(以字节为单位)。最大长度为65535字节。
    • 标志字段:占16比特。用来唯一地标识主机发送的每一份数据报。通常每发一份报文,它的值会加1。
    • 标志位字段:占3比特。标志一份数据报是否要求分段。
    • 段偏移字段:占13比特。如果一份数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置。
    • 生存期(TTL:Time to Live)字段:占8比特。用来设置数据报最多可以经过的路由器数。由发送数据的源主机设置,通常为32、64、128等。每经过一个路由器,其值减1,直到0时该数据报被丢弃。
    • 协议字段:占8比特。指明IP层所封装的上层协议类型,如ICMP(1)、IGMP(2) 、TCP(6)、UDP(17)等。
    • 头部校验和字段:占16比特。内容是根据IP头部计算得到的校验和码。计算方法是:对头部中每个16比特进行二进制反码求和。(和ICMP、IGMP、TCP、UDP不同,IP不对头部后的数据进行校验)。
    • 源IP地址、目标IP地址字段:各占32比特。用来标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址。
    • 可选项字段:占32比特。用来定义一些任选项:如记录路径、时间戳等。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。可选项字段的长度必须是32比特的整数倍,如果不足,必须填充0以达到此长度要求。
    tcp头部定义

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LamOzPRb-1577717564835)(file:///C:/Users/sq/Documents/My Knowledge/temp/92ac633e-7865-4478-8495-3f5d25bc5e45/128/index_files/d7949a7a1677b8fe792a4ed27fbd1e8e.jpg)]

    /*TCP头定义,共20个字节*/
    typedef struct _TCP_HEADER 
    {
     short m_sSourPort;              // 源端口号16bit
     short m_sDestPort;              // 目的端口号16bit
     unsigned int m_uiSequNum;         // 序列号32bit
     unsigned int m_uiAcknowledgeNum;  // 确认号32bit
     short m_sHeaderLenAndFlag;        // 前4位:TCP头长度;中6位:保留;后6位:标志位
     short m_sWindowSize;            // 窗口大小16bit
     short m_sCheckSum;              // 检验和16bit
     short m_surgentPointer;           // 紧急数据偏移量16bit
    }__attribute__((packed))TCP_HEADER, *PTCP_HEADER;
    /*TCP头中的选项定义
    
    kind(8bit)+Length(8bit,整个选项的长度,包含前两部分)+内容(如果有的话)
    
    KIND = 
      1表示 无操作NOP,无后面的部分
    
      2表示 maximum segment   后面的LENGTH就是maximum segment选项的长度(以byte为单位,1+1+内容部分长度)
    
      3表示 windows scale     后面的LENGTH就是 windows scale选项的长度(以byte为单位,1+1+内容部分长度)
    
      4表示 SACK permitted    LENGTH为2,没有内容部分
    
      5表示这是一个SACK包     LENGTH为2,没有内容部分
    
      8表示时间戳,LENGTH为10,含8个字节的时间戳
    */
    
    • 源、目标端口号字段:占16比特。TCP协议通过使用"端口"来标识源端和目标端的应用进程。端口号可以使用0到65535之间的任何数字。在收到服务请求时,操作系统动态地为客户端的应用程序分配端口号。在服务器端,每种服务在"众所周知的端口"(Well-Know Port)为用户提供服务。
    • 顺序号字段:占32比特。用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。
    • 确认号字段:占32比特。只有ACK标志为1时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节。
    • 头部长度字段:占4比特。给出头部占32比特的数目。没有任何选项字段的TCP头部长度为20字节;最多可以有60字节的TCP头部。
    • 标志位字段(U、A、P、R、S、F):占6比特。各比特的含义如下:
      • URG:紧急指针(urgent pointer)有效。
      • ACK:确认序号有效。
      • PSH:接收方应该尽快将这个报文段交给应用层。
      • RST:重建连接。
      • SYN:发起一个连接。
      • FIN:释放一个连接。
      • 窗口大小字段:占16比特。此字段用来进行流量控制。单位为字节数,这个值是本机期望一次接收的字节数。
      • TCP校验和字段:占16比特。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。
      • 紧急指针字段:占16比特。它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
      • 选项字段:占32比特。可能包括"窗口扩大因子"、"时间戳"等选项。
    udp头部定义

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ft1AxsqV-1577717564835)(file:///C:/Users/sq/Documents/My Knowledge/temp/92ac633e-7865-4478-8495-3f5d25bc5e45/128/index_files/654c80e17b29819ced20eadc9f6cc6a3.jpg)]

    /*UDP头定义,共8个字节*/
    
    typedef struct _UDP_HEADER 
    {
     unsigned short m_usSourPort;       // 源端口号16bit
     unsigned short m_usDestPort;       // 目的端口号16bit
     unsigned short m_usLength;        // 数据包长度16bit
     unsigned short m_usCheckSum;      // 校验和16bit
    }__attribute__((packed))UDP_HEADER, *PUDP_HEADER;
    
    传输控制协议(tcp)

    由于维基百科专美与前,无法写的比其更好,所以,贴它的链接在这里:
    https://zh.wikipedia.org/wiki/%E4%BC%A0%E8%BE%93%E6%8E%A7%E5%88%B6%E5%8D%8F%E8%AE%AE#.E8.BF.90.E4.BD.9C.E6.96.B9.E5.BC.8F

    主要学习它的运作方式部分,就能较好的理解操作过程了。

    wireshark使用前储备:MTU和MSS

    wireshark以太网帧的封包格式为:

    Frame=Ethernet Header +IP Header +TCP Header +TCP Segment Data

    • Ethernet Header =14 Byte =Dst Physical Address(6 Byte)+ Src Physical Address(6 Byte)+Type(2 Byte),以太网帧头以下称之为数据帧。
    • IP Header =20 Byte(without options field),数据在IP层称为Datagram,分片称为Fragment。
    • TCP Header = 20 Byte(without options field),数据在TCP层称为Stream,分段称为Segment(UDP中称为Message)。
    • 54个字节后为TCP数据负载部分(Data Portion),即应用层用户数据。

    Ethernet Header以下的IP数据报最大传输单位为MTU(Maximum Transmission Unit,Effect of short board),对于大多数使用以太网的局域网来说,MTU=1500。

    TCP数据包每次能够传输的最大数据分段为MSS,为了达到最佳的传输效能,在建立TCP连接时双方将协商MSS值——双方提供的MSS值中的最小值为这次连接的最大MSS值。MSS往往基于MTU计算出来,通常MSS=MTU-sizeof(IP Header)-sizeof(TCP Header)=1500-20-20=1460。

    这样,数据经过本地TCP层分段后,交给本地IP层,在本地IP层就不需要分片了。但是在下一跳路由(Next Hop)的邻居路由器上可能发生IP分片!因为路由器的网卡的MTU可能小于需要转发的IP数据报的大小。

    这时候,在路由器上可能发生两种情况:

    (1)如果源发送端设置了这个IP数据包可以分片(May Fragment,DF=0),路由器将IP数据报分片后转发。

    (2)如果源发送端设置了这个IP数据报不可以分片(Don’t Fragment,DF=1),路由器将IP数据报丢弃,并发送ICMP分片错误消息给源发送端。

    展开全文
  • IP头、TCP头、UDP头详解以及定义

    万次阅读 2018-09-06 19:24:14
    转自:...   一、MAC帧定义 /*数据帧定义,14个字节,尾4个字节*/ typedef struct _MAC_FRAME_HEADER {  char m_cDstMacAddress[6]; //目的mac地址  char m_cSrcMacAddress[6]; ...

    转自:https://blog.csdn.net/mrwangwang/article/details/8537775

     

    一、MAC帧头定义

    /*数据帧定义,头14个字节,尾4个字节*/
    typedef struct _MAC_FRAME_HEADER
    {
     char m_cDstMacAddress[6];    //目的mac地址
     char m_cSrcMacAddress[6];    //源mac地址
     short m_cType;            //上一层协议类型,如0x0800代表上一层是IP协议,0x0806为arp
    }__attribute__((packed))MAC_FRAME_HEADER,*PMAC_FRAME_HEADER;

     

    typedef struct _MAC_FRAME_TAIL
    {
     unsigned int m_sCheckSum;    //数据帧尾校验和
    }__attribute__((packed))MAC_FRAME_TAIL, *PMAC_FRAME_TAIL;

     

    二、IP头结构的定义

     

    /*IP头定义,共20个字节*/
    typedef struct _IP_HEADER 
    {
     char m_cVersionAndHeaderLen;       //版本信息(前4位),头长度(后4位)
     char m_cTypeOfService;            // 服务类型8位
     short m_sTotalLenOfPacket;        //数据包长度
     short m_sPacketID;              //数据包标识
     short m_sSliceinfo;               //分片使用
     char m_cTTL;                  //存活时间
     char m_cTypeOfProtocol;          //协议类型
     short m_sCheckSum;             //校验和
     unsigned int m_uiSourIp;          //源ip
     unsigned int m_uiDestIp;          //目的ip
    } __attribute__((packed))IP_HEADER, *PIP_HEADER ;

    三、tcp头结构定义

     

    /*TCP头定义,共20个字节*/
    typedef struct _TCP_HEADER 
    {
     short m_sSourPort;              // 源端口号16bit
     short m_sDestPort;              // 目的端口号16bit
     unsigned int m_uiSequNum;         // 序列号32bit
     unsigned int m_uiAcknowledgeNum;  // 确认号32bit
     short m_sHeaderLenAndFlag;        // 前4位:TCP头长度;中6位:保留;后6位:标志位
     short m_sWindowSize;            // 窗口大小16bit
     short m_sCheckSum;              // 检验和16bit
     short m_surgentPointer;           // 紧急数据偏移量16bit
    }__attribute__((packed))TCP_HEADER, *PTCP_HEADER;


    /*TCP头中的选项定义

    kind(8bit)+Length(8bit,整个选项的长度,包含前两部分)+内容(如果有的话)

    KIND = 1表示 无操作NOP,无后面的部分

      2表示 maximum segment   后面的LENGTH就是maximum segment选项的长度(以byte为单位,1+1+内容部分长度)

      3表示 windows scale     后面的LENGTH就是 windows scale选项的长度(以byte为单位,1+1+内容部分长度)

      4表示 SACK permitted    LENGTH为2,没有内容部分

      5表示这是一个SACK包     LENGTH为2,没有内容部分

      8表示时间戳,LENGTH为10,含8个字节的时间戳
    */

    typedef struct _TCP_OPTIONS
    {
     char m_ckind;
     char m_cLength;
     char m_cContext[32];
    }__attribute__((packed))TCP_OPTIONS, *PTCP_OPTIONS;

     

    四、UDP头结构的定义

     

    /*UDP头定义,共8个字节*/

    typedef struct _UDP_HEADER 
    {
     unsigned short m_usSourPort;       // 源端口号16bit
     unsigned short m_usDestPort;       // 目的端口号16bit
     unsigned short m_usLength;        // 数据包长度16bit
     unsigned short m_usCheckSum;      // 校验和16bit
    }__attribute__((packed))UDP_HEADER, *PUDP_HEADER;

     

    ====

    http://www.cnblogs.com/li-hao/archive/2011/12/07/2279912.html

    ------------------------------------------------------------------------------------------------------------------------------------- 

    tcp、ip、udp头部格式  

    2.2 TCP/IP报文格式

      

      1、IP报文格式

      

      IP协议是TCP/IP协议族中最为核心的协议。它提供不可靠、无连接的服务,也即依赖其他层的协议进行差错控制。在局域网环境,IP协议往往被封装在以太网帧(见本章1.3节)中传送。而所有的TCP、UDP、ICMP、IGMP数据都被封装在IP数据报中传送。如图2-3所示:

        

       图2-3  TCP/IP报文封装

      

      图2-4是IP头部(报头)格式:(RFC 791)。

        

       图2-4  IP头部格式

      

      其中:

      

      ●版本(Version)字段:占4比特。用来表明IP协议实现的版本号,当前一般为IPv4,即0100。

      

      ●报头长度(Internet Header Length,IHL)字段:占4比特。是头部占32比特的数字,包括可选项。普通IP数据报(没有任何选项),该字段的值是5,即160比特=20字节。此字段最大值为60字节。

      

      ●服务类型(Type of Service ,TOS)字段:占8比特。其中前3比特为优先权子字段(Precedence,现已被忽略)。第8比特保留未用。第4至第7比特分别代表延迟、吞吐量、可靠性和花费。当它们取值为1时分别代表要求最小时延、最大吞吐量、最高可靠性和最小费用。这4比特的服务类型中只能置其中1比特为1。可以全为0,若全为0则表示一般服务。服务类型字段声明了数据报被网络系统传输时可以被怎样处理。例如:TELNET协议可能要求有最小的延迟,FTP协议(数据)可能要求有最大吞吐量,SNMP协议可能要求有最高可靠性,NNTP(Network News Transfer Protocol,网络新闻传输协议)可能要求最小费用,而ICMP协议可能无特殊要求(4比特全为0)。实际上,大部分主机会忽略这个字段,但一些动态路由协议如OSPF(Open Shortest Path First Protocol)、IS-IS(Intermediate System to Intermediate System Protocol)可以根据这些字段的值进行路由决策。

      

      ●总长度字段:占16比特。指明整个数据报的长度(以字节为单位)。最大长度为65535字节。

      

      ●标志字段:占16比特。用来唯一地标识主机发送的每一份数据报。通常每发一份报文,它的值会加1。

      

      ●标志位字段:占3比特。标志一份数据报是否要求分段。

      

      ●段偏移字段:占13比特。如果一份数据报要求分段的话,此字段指明该段偏移距原始数据报开始的位置。

      

      ●生存期(TTL:Time to Live)字段:占8比特。用来设置数据报最多可以经过的路由器数。由发送数据的源主机设置,通常为32、64、128等。每经过一个路由器,其值减1,直到0时该数据报被丢弃。

      

      ●协议字段:占8比特。指明IP层所封装的上层协议类型,如ICMP(1)、IGMP(2) 、TCP(6)、UDP(17)等。

      

      ●头部校验和字段:占16比特。内容是根据IP头部计算得到的校验和码。计算方法是:对头部中每个16比特进行二进制反码求和。(和ICMP、IGMP、TCP、UDP不同,IP不对头部后的数据进行校验)。

      

      ●源IP地址、目标IP地址字段:各占32比特。用来标明发送IP数据报文的源主机地址和接收IP报文的目标主机地址。

      

      可选项字段:占32比特。用来定义一些任选项:如记录路径、时间戳等。这些选项很少被使用,同时并不是所有主机和路由器都支持这些选项。可选项字段的长度必须是32比特的整数倍,如果不足,必须填充0以达到此长度要求。

      

      2、TCP数据段格式

      

      TCP是一种可靠的、面向连接的字节流服务。源主机在传送数据前需要先和目标主机建立连接。然后,在此连接上,被编号的数据段按序收发。同时,要求对每个数据段进行确认,保证了可靠性。如果在指定的时间内没有收到目标主机对所发数据段的确认,源主机将再次发送该数据段。

      

      如图2-5所示,是TCP头部结构(RFC 793、1323)。

        

       图2-5  TCP头部结构

      

      ●源、目标端口号字段:占16比特。TCP协议通过使用"端口"来标识源端和目标端的应用进程。端口号可以使用0到65535之间的任何数字。在收到服务请求时,操作系统动态地为客户端的应用程序分配端口号。在服务器端,每种服务在"众所周知的端口"(Well-Know Port)为用户提供服务。

      

      ●顺序号字段:占32比特。用来标识从TCP源端向TCP目标端发送的数据字节流,它表示在这个报文段中的第一个数据字节。

      

      ●确认号字段:占32比特。只有ACK标志为1时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节。

      

      ●头部长度字段:占4比特。给出头部占32比特的数目。没有任何选项字段的TCP头部长度为20字节;最多可以有60字节的TCP头部。

      

      ●标志位字段(U、A、P、R、S、F):占6比特。各比特的含义如下:

      

      ◆URG:紧急指针(urgent pointer)有效。

      

      ◆ACK:确认序号有效。

      

      ◆PSH:接收方应该尽快将这个报文段交给应用层。

      

      ◆RST:重建连接。

      

      ◆SYN:发起一个连接。

      

      ◆FIN:释放一个连接。

      

      ●窗口大小字段:占16比特。此字段用来进行流量控制。单位为字节数,这个值是本机期望一次接收的字节数。

      

      ●TCP校验和字段:占16比特。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。

      

      ●紧急指针字段:占16比特。它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。

      

      ●选项字段:占32比特。可能包括"窗口扩大因子"、"时间戳"等选项。

      

      3、UDP数据段格式

      

      UDP是一种不可靠的、无连接的数据报服务。源主机在传送数据前不需要和目标主机建立连接。数据被冠以源、目标端口号等UDP报头字段后直接发往目的主机。这时,每个数据段的可靠性依靠上层协议来保证。在传送数据较少、较小的情况下,UDP比TCP更加高效。

      

      如图2-6所示,是UDP头部结构(RFC 793、1323):

        

       图2-6  UDP数据段格式

      

      ●源、目标端口号字段:占16比特。作用与TCP数据段中的端口号字段相同,用来标识源端和目标端的应用进程。

      

      ●长度字段:占16比特。标明UDP头部和UDP数据的总长度字节。

      

      ●校验和字段:占16比特。用来对UDP头部和UDP数据进行校验。和TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的。

      

      2.3 套接字

      

      在每个TCP、UDP数据段中都包含源端口和目标端口字段。有时,我们把一个IP地址和一个端口号合称为一个套接字(Socket),而一个套接字对(Socket pair)可以唯一地确定互连网络中每个TCP连接的双方(客户IP地址、客户端口号、服务器IP地址、服务器端口号)。

      

      如图2-7所示,是常见的一些协议和它们对应的服务端口号。

        

       图2-7  常见协议和对应的端口号

      

      需要注意的是,不同的应用层协议可能基于不同的传输层协议,如FTP、TELNET、SMTP协议基于可靠的TCP协议。TFTP、SNMP、RIP基于不可靠的UDP协议。

      

      同时,有些应用层协议占用了两个不同的端口号,如FTP的20、21端口,SNMP的161、162端口。这些应用层协议在不同的端口提供不同的功能。如FTP的21端口用来侦听用户的连接请求,而20端口用来传送用户的文件数据。再如,SNMP的161端口用于SNMP管理进程获取SNMP代理的数据,而162端口用于SNMP代理主动向SNMP管理进程发送数据。

      

      还有一些协议使用了传输层的不同协议提供的服务。如DNS协议同时使用了TCP 53端口和UDP 53端口。DNS协议在UDP的53端口提供域名解析服务,在TCP的53端口提供DNS区域文件传输服务。

      

      2.4 TCP连接建立、释放时的握手过程

      

      1、TCP建立连接的三次握手过程

      

      TCP会话通过三次握手来初始化。三次握手的目标是使数据段的发送和接收同步。同时也向其他主机表明其一次可接收的数据量(窗口大小),并建立逻辑连接。这三次握手的过程可以简述如下:

      

      ●源主机发送一个同步标志位(SYN)置1的TCP数据段。此段中同时标明初始序号(Initial Sequence Number,ISN)。ISN是一个随时间变化的随机值。

      

      ●目标主机发回确认数据段,此段中的同步标志位(SYN)同样被置1,且确认标志位(ACK)也置1,同时在确认序号字段表明目标主机期待收到源主机下一个数据段的序号(即表明前一个数据段已收到并且没有错误)。此外,此段中还包含目标主机的段初始序号。

      

      ●源主机再回送一个数据段,同样带有递增的发送序号和确认序号。

      

      至此为止,TCP会话的三次握手完成。接下来,源主机和目标主机可以互相收发数据。整个过程可用图2-8表示。

        

       图2-8  TCP建立连接的三次握手过程

      

      2、TCP释放连接的四次握手过程

      

      TCP连接的释放需要进行四次握手,步骤是:

      

      ●源主机发送一个释放连接标志位(FIN)为1的数据段发出结束会话请求

     

    http://zoufengfu168.blog.163.com/blog/static/5461055200991333616451/

     

    展开全文
  • TCP头部信息与UDP头部信息

    千次阅读 2019-05-20 14:52:30
    TCP头部信息 源端口号以及目的端口号...代表整个UDP的长度,包括UDP数据,最小的UDP长度就是8字节。 16位UDP校验和: 用于检验UDP数据包 IPv4中,校验和可以为0,意味着不使用校验和。IPv6要求必须进行校验

    TCP头部信息

    在这里插入图片描述

    源端口号以及目的端口号:

      各占2个字节,端口是传输层和应用层的服务接口,用于寻找发送端和接收端的进程,通过这两个端口号和IP头部的ip发送和接收号,可以唯一的确定一个连接。
       一般来讲,通过端口号和IP地址,可以唯一确定一个TCP连接,在网络编程中,通常被称为一个socket接口。

    序号:

      占4字节,用来标识从TCP发送端向TCP接收端发送的数据字节流。

    确认序号:

      占4字节,包含发送确认的一端所期望收到的下一个序号,因此,确认序号应该是上次已经成功收到另一端数据字节序号加1。

    数据偏移:

      占4位,最大为1111即15个数字,一个代表4个字节,用于指出TCP首部长度,若不存在选项,则这个值为20字节,数据偏移的最大值为60字节。

    保留字段:

      占6位,值是确定的,暂时可忽略,值全为0

    标志位:

    URG(紧急): 为1时表明紧急指针字段有效
    ACK(确认):为1时表明确认号字段有效
    PSH(推送):为1时接收方应尽快将这个报文段交给应用层
    RST(复位):为1时表明TCP连接出现故障必须重建连接
    SYN(同步):在连接建立时用来同步序号
    FIN (终止): 为1时表明发送端数据发送完毕要求释放连接

    接收窗口:

      占2个字节,用于流量控制和拥塞控制,表示当前接收缓冲区的大小。在计算机网络中,通常是用接收方的接收能力的大小来控制发送方的数据发送量,这样可以避免快主机致使较慢主机的缓冲区溢出。TCP连接的一端根据缓冲区大小确定自己的接收窗口值,告诉对方,使对方可以确定发送数据的字节数。

    校验和:

      占2个字节,范围包括首部和数据两部分。检查当前的TCP包是否有问题,有没有损坏丢失

    选项

      选项是可选的,默认情况是不选。

    UDP头部信息

    在这里插入图片描述
    UDP的头部大小只有8字节

    16位源端口号和16位目的端口号:

    代表出发端口和目的地端口,这个可以类比TCP的源端口和目的端口。

    16位UDP长度:

    代表整个UDP的长度,包括UDP数据,最小的UDP长度就是8字节。

    16位UDP校验和:

    用于检验UDP数据包
    IPv4中,校验和可以为0,意味着不使用校验和。IPv6要求必须进行校验

    展开全文
  • UDP协议的特点: (1)UDP无需建立连接。因此UDP不会引入建立连接的时延。试想如果DNS运行在TCP之上而不是UDP,则DNS的速度会满很多。HTTP使用TCP而不是UDP,是因为基于文本数据的Web网页来说,可靠性是至关重要的。...

    参考:王道《计算机网络复习指导》
    UDP协议的特点:
    (1)UDP无需建立连接。因此UDP不会引入建立连接的时延。试想如果DNS运行在TCP之上而不是UDP,则DNS的速度会满很多。HTTP使用TCP而不是UDP,是因为基于文本数据的Web网页来说,可靠性是至关重要的。
    什么是DNS? DNS(Domain Name System,域名系统),万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。

    (2)无连接状态。TCP需要在端系统中维护连接状态。此连接状态包括接受和发送缓存、拥塞控制参数和确认号和序号的参数。而UDP不维护连接状态,也不跟踪这些参数,因此某些专用应用服务器使用UDP时,一般都能支持更多的活动客户机。

    (3)分组首部开销更小。TCP有20字节的的首部开销,而UDP只有8个字节的首部开销。

    (4)应用层能够更地控制要发送的数据和发送时间。UDP没有拥塞控制,因此网络中的拥塞也不会影响主机的发送效率。某些实时应用(如直播)要求以稳定的速度发送,能容忍一些数据的丢失,但不允许有较大的时延,而UDP正好可以满足这些应用的需求。

    (5)UDP常用于一次性传输比较小数据的网络应用,如DNS、SNMP等,因为对于这些应用,若采用TCP,则将为创建连接、维护和拆除而带来不小的开销。UDP也常用于多媒体应用(如IP电话、实时视频会议、流媒体等),显然,可靠数据传输对于这些应用来说并不是最重要的,但TCP的拥塞控制会导致数据出现较大的延迟,这是它们不可容忍的。

    (6)UDP提供尽最大努力的交付,即不保证可靠交付,但并不意味着应用对数据的要求是不可靠的,因此需要维护传输可靠性的工作需要用户在应用层来完成。应用实体可以根据应用需求来灵活设计自己的可靠性机制。

    (7)UDP是面向报文的的。发送方UDP对应用层交下来的报文,在添加首部后就交付给IP层,既不合并,也不拆分,而是保留这些报文的边界;接受方UDP对IP层交上来的用户数据报,在去除首部后就原封不动的交付给上层的应用进程,一次交付一个完整的报文,因此报文不可分割,是UDP数据处理的最小单位。

    UDP头部结构


    头部结构中各部分的作用:
    (1)16位源端口号 记录源端口号,在需要对方回信时选用。不需要时可用全0。
    (2)16位目的端口号 记录目标端口号。这在终点交付报文时必须要使用到。
    (3)长度 UDP数据报的长度(包括数据和首部),其最小值为8B(即仅有首部没有数据的情况)。
    (4)校验和 检测UDP数据报在传输中是否有错,有错就丢弃。该字段时可选的,当源主机不想计算校验和,则直接令该字段为全0。当传输层从IP层收到UDP数据报时,就根据首部中的目的端口,把UDP数据报通过相应的端口,上交给进程。如果接收方UDP发现收到的报文中目的端口号不正确(即不存在对应端口号的应用进程),就丢弃该报文,并由ICMP发送“端口不可达”差错报文交给发送方。

    展开全文
  • IP、TCP、UDP头部长度汇总

    千次阅读 2020-04-06 21:16:56
    文章目录IP、TCP、UDP头部长度汇总IP头部UDP头部TCP头部 IP、TCP、UDP头部长度汇总 IP头部 IP头部范围为20B(不含options)~60B 60B是因为header length为4bit,故0b1111*4B(一行的...跟IP长度一样,20B~60B,取决...
  • 1 TCP TCP是一种可靠的、面向连接的字节流服务,头部定义如下。 /*TCP定义,共20个字节*/ typedef struct _TCP_HEADER { short m_sSourPort; // 源端口号16bit short m_sDestPort; // 目的端口号16bit ...
  • UDP 一、UDP是什么? UDP是User Datagram Protocol(用户数据报协议) 二、UDP的特点 1.UDP是无连接的,即就是UDP在发送数据之前不需要建立连接; 2.UDP是尽自己的最大努力来进行交付的,即就是UDP不保证...
  • UDP头部结构,UDP校验和计算

    千次阅读 多人点赞 2018-12-16 23:32:44
    Udp:用户数据报协议 特点: 1.无连接,传输数据时不需要建立链接 2.尽最大努力传输,不可靠 3.面向报文的,接收到应用程序的数据时,只往数据前面加一个UDP头部就传给网络层,收到网络层传来的UDP数据时,只把UDP头部去掉...
  • MAC/IP/TCP/UDP头结构分析

    千次阅读 2018-12-30 13:55:31
    四、UDP头结构的定义 一、MAC帧头定义 MAC帧是数据帧的一种。而所谓数据帧,就是数据链路层的协议数据单元,它包括三部分:帧头,数据部分,帧尾。其中,帧头和帧尾包含一些必要的控制信息...
  • udp包头解析

    千次阅读 2016-06-10 17:10:37
    udp数据报报头解析:  16bits: 源端口,即发送端的端口  16bits: 目标端口,即接收端的端口  16bits: udp数据包总的大小,包头+数据,单位,字节  16bits: 错误检查码,基于算法,计算此udp数据包是否...
  • UDP一次最多能传输的数据大小 : 2^16-1 - 8 = 65507字节(-8是因为udp头部本身占用8个字节)
  • TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇。里面...
  • 以太网,IP, TCP, UDP头部格式

    万次阅读 2017-04-26 11:29:28
    所有的TCP,UDP, ICMP和IGMP数据都以IP数据报格式传输。IP提供的是不可靠、无连接的协议。  普通的IP首部长为20个字节,除非含有选项字段。 4位版本:目前协议版本号是4,因此IP有时也称作IPV4. 4位首部长度:首部...
  • 一、MAC帧定义 /*数据帧定义,14个字节,尾4个字节*/ typedef struct _MAC_FRAME_HEADER {  char m_cDstMacAddress[6]; //目的mac地址  char m_cSrcMacAddress[6]; //源mac地址  short m_cType; //上一层...
  • 内核代码HOOK函数中,从skb获取udp头时: 一般通过udp_hdr
  • 有助于各种基本网络协议概念性理解,协议最重要的就是头部的字段含义
  • MAC、IP头、TCP头、UDP头帧格式、详解

    万次阅读 2017-03-10 10:33:19
    一、MAC帧定义 typedef struct _MAC_FRAME_HEADER {  char m_cDstMacAddress[6]; //目的mac地址  char m_cSrcMacAddress[6]; //源mac地址  short m_cType; //上一层协议类型,如0x0800代表上一层是...
  • UDP报文头部分析

    千次阅读 2020-04-18 22:33:55
    UDP是一种不可靠的、无连接的数据报服务。源主机在传送数据前不需要和目标主机建立连接。数据被冠以源、目标端口号等UDP报头字段后直接发往目的主机。这时,每个数据段的可靠性依靠上层协议来保证。在传送数据较少、...
  • 【TCP/IP】MAC帧头、IP头、TCP头和UDP头

    千次阅读 2019-07-14 19:54:37
    一、MAC帧定义 MAC帧是数据帧的一种。而所谓数据帧,就是数据链路层的协议数据单元,它包括三部分:帧,数据部分,帧尾。其中,帧和帧尾包含一些必要的控制信息,比如同步信息、地址信息、差错控制信息等;...
  • TCP,UDP,IP包头格式及说明

    万次阅读 多人点赞 2017-03-03 14:08:33
    TCP,IP,UDP包头格式
  • 1.UDP协议概述 1.用户数据报协议(User Datagram Protocol)简称UDP协议,它是在IP的数据报服务上增加了端口和简单的差错检测来实现进程到进程之间的数据传输。 2.UDP协议有如下几个特点: a.无连接。UDP是无连接的...
  • UDP报文详解

    千次阅读 2020-04-20 23:55:16
    UDP首部有8个字节,由4个字段构成,每...因为UDP头 部长度为8字节,所以该字段的最小值为8。 4.校验和:检测UDP数据报在传输中是否有错,有错则丢弃。 UDP校验 在计算校验和的时候,需要在UDP数据报之前增加12字...
  • 一、MAC帧定义 typedef struct _MAC_FRAME_HEADER { char m_cDstMacAddress[6]; //目的mac地址 char m_cSrcMacAddress[6]; //源mac地址 short m_cType; //上一层协议类型,如0x0800代表上一层是IP协议,0x...
  • mac、ip、udp头解析

    千次阅读 2018-12-15 22:48:53
    一、MAC帧定义 /*数据帧定义,14个字节,尾4个字节*/ typedef struct _MAC_FRAME_HEADER {  char m_cDstMacAddress[6]; //目的mac地址  char m_cSrcMacAddress[6]; //源mac地址  short m_cType; //上一层...
  • UDP 协议头部格式

    2020-09-29 14:49:04
    这个字段占据 UDP 报文的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 111,751
精华内容 44,700
关键字:

udp头