免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1721 | 回复: 0
打印 上一主题 下一主题

以太网协议以及TCP/IP协议的报头 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-02-03 09:21 |只看该作者 |倒序浏览

//以太网协议格式的定义
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 的源代码


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/108781/showart_2169503.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP