以太网协议以及TCP/IP协议的报头

//以太网协议格式的定义
struct ether_header
{
 u_int8_t  ether_dhost[6];   //目的以太网地址
 u_int8_t  ether_shost[6];   //源以太网地址
 u_int16_t ether_type;       //以太网类型
};

 

//ARP协议格式的定义
struct arp_header
{
 u_int16_t arp_hardware_type;                    //硬件类型
 u_int16_t arp_protocol_type;                    //协议类型
 u_int8_t  arp_hardware_length;                  //硬件地址长度
 u_int8_t  arp_protocol_length;                  //协议地址长度
 u_int16_t arp_operation_code;                   //ARP操作码
 u_int8_t  arp_source_ethernet_address[6];       //源以太网地址
 u_int8_t  arp_source_ip_address[4];             //源IP地址
 u_int8_t  arp_destination_ethernet_address[6];  //目的以太网地址
 u_int8_t  arp_destination_ip_address[4];        //目的IP地址
};

 

//IP地址格式的定义
typedef u_int32_t in_addr_;
struct in_addr_t
{
 in_addr_ s_addr;
};

//IP协议格式的定义
struct ip_header
{
  u_int8_t  ip_header_lengtg:4;             //版本
 u_int8_t  ip_version:4;                   //首部长度
 u_int8_t  ip_tos;                         //服务质量
  u_int16_t ip_length;                      //总长度
 u_int16_t ip_id;                          //标识
 u_int16_t ip_off;                         //偏移
 u_int8_t  ip_ttl;                         //生存时间
  u_int8_t  ip_protocol;                    //协议类型
 u_int16_t ip_checksum;                    //校验和
 struct in_addr_t ip_source_address;       //源IP地址
 struct in_addr_t ip_detination_address;   //目的IP地址
};

 

 

//UDP协议格式的定义
struct udp_header
{
 u_int16_t udp_source_port;         //源端口号
 u_int16_t udp_destination_port;    //目的端口号
 u_int16_t udp_length;              //长度
 u_int16_t udp_checksum;            //校验和
};

 

//TCP协议格式的定义
struct tcp_header
{
 u_int16_t tcp_source_port;         //源端口号
 u_int16_t tcp_destination_port;    //目的端口号
 u_int32_t tcp_acknowledgement;     //序列号
 u_int32_t tcp_ack;                 //确认码
 u_int8_t  tcp_reserved:4;          //保留
 u_int8_t  tcp_offset:4;            //偏移
 u_int8_t  tcp_flags;               //标记
 u_int16_t tcp_windows;             //窗口大小
 u_int16_t tcp_checksum;            //校验和
 u_int16_t tcp_urgent_pointer;      //紧急指针
};

 

 

//ICMP协议格式的定义
struct icmp_header
{
 u_int8_t  icmp_type;         //ICMP类型
 u_int8_t  icmp_code;         //ICMP代码
 u_int16_t icmp_checksum;     //校验和
 u_int16_t icmp_id;           //标识
 u_int16_t icmp_sequence;     //序列号
};

 

 

对于网络部分的学习:

先看 嵌入式Linux应用程序开发详解 中的网络部分说明并练习编译其中的代码

然后 Linux网络编程 和 Unix网络编程实用技术与实例分析;张炯;清华大学出版社  这两部分内容有点相似

如果要掌握各个协议的报文类型 可以参考 TCP-IP详解卷1:协议

然后看一下 tcpdump 的源代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值