TCP/IP学习笔记二:地址解析协议ARP 数据格式
来源:互联网 发布:小金口网络问政 编辑:程序博客网 时间:2024/05/17 21:44
要了解ARP,看名字与功能就可以了,但是,作为研究的技术人员,还要了解它具体的工作原理,即如何在产品中应用,尤其是嵌入式产品,往往对硬件成本要求较高,但又要有联网的功能。因此,了解底的联网的知识很有必要。这里,我主要学习一下以太网,TCP/IP是必要学习的基础,当然只是学习其中比较关心的与底层的,软件在硬件之上运行,其实软件也是硬件的种。软件与硬件的结合点,其实只是换了一种观念。在键盘上打字或是声控或是其他方式的所谓软件与硬件的互动,其实,都是在操作硬件,硬件抽象一点,就是软件。
硬件有了保存电压的东西,就有了存储器。有了存储器,就可以存指令了。有了指令,就是软件了。以上是自己对软件硬件的一种粗浅的认识。因为要学习以太网,往往跟自己画的什么网络变压器,RJ45什么的想到一起,也就是,有了硬件,还需要进一步用软件的方式去实现通讯。为了可靠与快速的多机通讯,就有了约束,有了章法,于是有了互联的协议。大家都按这个规定或是规范去办事,就可以有效率的办事。
ARP的数据格式,详细的请查看《TCP/IP详解卷一》,那里有专门的章节介绍ARP等,网络上搜索了一下,找到了如下的图片,不错,非常的直观。
光文字不行,有图片,那就好理解了。
以太网的头部:Header。怪不得开始看Uip的代码时,对缩小的字母hdr不理解,原来是头的意思,源码如下:
struct arp_hdr {
struct uip_eth_hdr ethhdr;
u16_t hwtype; //硬件类型
u16_t protocol; //协议类型
u8_t hwlen; //硬件地址长度
u8_t protolen; // 协议地址长度
u16_t opcode; //操作字段
struct uip_eth_addr shwaddr; //发送方的硬件地址:MAC
u16_t sipaddr[2]; //发送方的IP地址
struct uip_eth_addr dhwaddr; //接收方的硬件地址:MAC
u16_t dipaddr[2]; //接收方的IP地址
};
其实以上的定义,在uip中,应该算是整个arp的数据结构。
硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值为1;
协议类型字段:指明了发送方提供的高层协议类型,IP为0800(16进制);
硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;
操作字段:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;
发送方的硬件地址:(0-2字节):源主机硬件地址的前3个字节;
(3-5字节):源主机硬件地址的后3个字节;
发送方IP协议地址:(0-1字节):源主机硬件地址的前2个字节;
(2-3字节):源主机硬件地址的后2个字节;
目的方的硬件地址 (0-1字节):目的主机硬件地址的前2个字节;
(2-5字节):目的主机硬件地址的后4个字节;
目的方IP协议地址:(0-1字节):目的主机的IP地址前2个字节 。
(2-3字节):目的主机的IP地址后2个字节 。
hd就是头Header 的意思了。看来自己真的知识太浅,理解力太差了。
上面arp的头,我看得头大,还得慢慢一步步来理解。看看以太网的头是什么?
/**
* The Ethernet header.
*/
struct uip_eth_hdr {
struct uip_eth_addr dest; //目标地址
struct uip_eth_addr src; //源地址,找别人,也得报上自己的名字。
u16_t type; //帧类型 ARP 为:0x0806
};
uip_eth_addr是什么格式的?IP格式的吗?继续查看如下:
/**
* Representation of a 48-bit Ethernet address.
*/
struct uip_eth_addr {
u8_t addr[6];
};
6个字节,48位。搞了半天,是一个48位硬件地址,我一般称为MAC地址。
以下就是网络类型的定义。
#define UIP_ETHTYPE_ARP 0x0806 //现在开始了解ARP
#define UIP_ETHTYPE_IP 0x0800 //IPV4 常用的。
#define UIP_ETHTYPE_IP6 0x86dd //这个不常见,基本不用,可能以后物联网了,所有东西都要联网,手机PDA等等之类的,就要用它了。
以太网的头,明白了很多。ARP呢?好好学习。继续。
硬件有了保存电压的东西,就有了存储器。有了存储器,就可以存指令了。有了指令,就是软件了。以上是自己对软件硬件的一种粗浅的认识。因为要学习以太网,往往跟自己画的什么网络变压器,RJ45什么的想到一起,也就是,有了硬件,还需要进一步用软件的方式去实现通讯。为了可靠与快速的多机通讯,就有了约束,有了章法,于是有了互联的协议。大家都按这个规定或是规范去办事,就可以有效率的办事。
ARP的数据格式,详细的请查看《TCP/IP详解卷一》,那里有专门的章节介绍ARP等,网络上搜索了一下,找到了如下的图片,不错,非常的直观。
光文字不行,有图片,那就好理解了。
以太网的头部:Header。怪不得开始看Uip的代码时,对缩小的字母hdr不理解,原来是头的意思,源码如下:
struct arp_hdr {
struct uip_eth_hdr ethhdr;
u16_t hwtype; //硬件类型
u16_t protocol; //协议类型
u8_t hwlen; //硬件地址长度
u8_t protolen; // 协议地址长度
u16_t opcode; //操作字段
struct uip_eth_addr shwaddr; //发送方的硬件地址:MAC
u16_t sipaddr[2]; //发送方的IP地址
struct uip_eth_addr dhwaddr; //接收方的硬件地址:MAC
u16_t dipaddr[2]; //接收方的IP地址
};
其实以上的定义,在uip中,应该算是整个arp的数据结构。
硬件类型字段:指明了发送方想知道的硬件接口类型,以太网的值为1;
协议类型字段:指明了发送方提供的高层协议类型,IP为0800(16进制);
硬件地址长度和协议长度:指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;
操作字段:用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;
发送方的硬件地址:(0-2字节):源主机硬件地址的前3个字节;
(3-5字节):源主机硬件地址的后3个字节;
发送方IP协议地址:(0-1字节):源主机硬件地址的前2个字节;
(2-3字节):源主机硬件地址的后2个字节;
目的方的硬件地址 (0-1字节):目的主机硬件地址的前2个字节;
(2-5字节):目的主机硬件地址的后4个字节;
目的方IP协议地址:(0-1字节):目的主机的IP地址前2个字节 。
(2-3字节):目的主机的IP地址后2个字节 。
hd就是头Header 的意思了。看来自己真的知识太浅,理解力太差了。
上面arp的头,我看得头大,还得慢慢一步步来理解。看看以太网的头是什么?
/**
* The Ethernet header.
*/
struct uip_eth_hdr {
struct uip_eth_addr dest; //目标地址
struct uip_eth_addr src; //源地址,找别人,也得报上自己的名字。
u16_t type; //帧类型 ARP 为:0x0806
};
uip_eth_addr是什么格式的?IP格式的吗?继续查看如下:
/**
* Representation of a 48-bit Ethernet address.
*/
struct uip_eth_addr {
u8_t addr[6];
};
6个字节,48位。搞了半天,是一个48位硬件地址,我一般称为MAC地址。
以下就是网络类型的定义。
#define UIP_ETHTYPE_ARP 0x0806 //现在开始了解ARP
#define UIP_ETHTYPE_IP 0x0800 //IPV4 常用的。
#define UIP_ETHTYPE_IP6 0x86dd //这个不常见,基本不用,可能以后物联网了,所有东西都要联网,手机PDA等等之类的,就要用它了。
以太网的头,明白了很多。ARP呢?好好学习。继续。
0 0
- TCP/IP学习笔记二:地址解析协议ARP 数据格式
- TCP/IP学习笔记之四 --- ARP:地址解析协议
- TCP/IP学习笔记一:地址解析协议ARP初识
- TCP/IP详解学习笔记——地址解析协议ARP
- TCP-IP学习笔记(七)——ARP:地址解析协议
- TCP/IP-04-ARP地址解析协议
- TCP/IP协议族-----8、地址解析协议(ARP)
- 《TCP/IP详解卷2:实现》笔记--ARP:地址解析协议
- TCP/IP的排头兵――地址解析协议(ARP)
- TCP/IP 第4章 ARP:地址解析协议
- 【TCP/IP详解】第4章 ARP:地址解析协议
- TCP/IP详解 卷一 ---------ARP地址解析协议
- (TCP/IP卷一)ARP,RARP地址解析协议
- TCP/IP详解卷1:协议(四)【ARP:地址解析协议,RARP:逆地址解析协议】
- tcp/ip协议学习笔记(4)ARP&RARP
- TCP/IP学习笔记(3)--ARP和RARP协议
- tcp/ip学习笔记--第4章 arp协议
- 《TCP/IP详解,卷1:协议》学习笔记——4-5. 地址解析协议和逆地址解析协议
- Effective C++(2)读书笔记
- VS开发中的静态编译
- left join / right join /inner join 区别
- c++ 输入流中文件打开方式
- 使用LDAP(ApacheDS)构建统一认证服务(SSO单点登录)
- TCP/IP学习笔记二:地址解析协议ARP 数据格式
- 修身养性
- 今日精选段子
- xcode下配置opencv的desktop开发环境
- 手机屏幕尺寸暴露年收入吗?
- Python的包管理工具
- 静态内部类和非静态内部类的区别
- 微信公众号之表情推送与接收教程
- BZOJ 1798: [Ahoi2009]Seq 维护序列seq