MAC头、IP头、TCP头、UDP头详解以及定义

转载 2016年08月31日 11:10:13

转自:http://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;


IP头、TCP头、UDP头详解以及定义

一、MAC帧头定义 /*数据帧定义,头14个字节,尾4个字节*/ typedef struct _MAC_FRAME_HEADER {  char m_cDstMacAddress[6];  ...

Linux网络编程——原始套接字实例:MAC 头部报文分析

通过《Linux网络编程——原始套接字编程》得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? MAC 头部...

Linux网络编程——原始套接字实例:MAC 头部报文分析

一、前导 通过《Linux网络编程——原始套接字编程》得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢? ...

IP、TCP、UDP数据包头部抓包及IP分片传输详解

英文头部说明: 32bit          8                    8                       8                  8 ...
  • BUG1314
  • BUG1314
  • 2015年01月09日 16:50
  • 2380

ESP8266--学习笔记(三)AP和UDP通信

ESP8266可以配置三种模式: station模式 : 0x01 soft-AP模式 : 0x02 soft-AP兼station模式 : 0x03 1、station模式  station模式...

MAC、IP头、TCP头、UDP头帧格式、详解copy

TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UCP协议与TCP/IP协议的联系,很多人犯糊涂了,一直都是说TCP/IP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通...
  • wyxsky
  • wyxsky
  • 2016年07月31日 11:51
  • 2343

TCP/IP协议已有IP逻辑地址,为何在实际通讯中必须使用MAC地址?

相邻结点之间必须用第二层的地址才能通信,MAC地址物理地址,是第二层地址的一种,IP地址是逻辑地址 以网络中的路由器为例子,当路由器收到IP数据包之后,先根据IP地址中的网络号判断这个数据包应该发...

学习整理——以太帧、ip帧、udp/tcp帧、http报文结构

从最简单的一个http请求开发,根据TCP/IP协议,分开来看每一层的数据帧结构,以及它们是怎样承担起网络服务得。 协议栈 因特网协议栈共有五层: 1.应用层,是网络应用程序及其应用层协议存留的地方。...

以太网帧格式

.

UART学习笔记一:如何判断一帧数据收完

好久就先写个东东总结下,但是一直没有时间(都是借口,就是因为懒)。今天下午在整理UART模块驱动,正好记录下,想到哪里,写到哪里,大家勿怪。。。     UART接收数据,一个字节一个字节接收,底层硬...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MAC头、IP头、TCP头、UDP头详解以及定义
举报原因:
原因补充:

(最多只允许输入30个字)