以太网各种协议详解

来源:互联网 发布:淘宝steam喜加一 编辑:程序博客网 时间:2024/05/16 10:57

板子处于复位状态时,先做好一系列的准备工作。

 1、从EEROM中读取板子的MAC 地址(事先已经写在地址0xFA to 0xFF 中了)。

2、配置PHY 寄存器,并读取该寄存器的值,检查一下,此时的寄存器配置时候是合理的(全双工,自协商等)。

3、等待片刻,使以太网稳定。随后,启动DHCP 协议,获取该电路板的IP地址。其中,PC 机是服务机,板子是客户机。

4、获得板子的IP地址之后,就可以正常通信了。在发送数据之前,首先确认是否ARP(IP地址和MAC地址绑定)和ping(ICMP协议,确定网络是否链接成功)是否请求成功。如果成功,就可以传输我们真正关心的数据了。

 

以太网协议  MAC 层

 

前导帧 : 55

帧开始: 5D

长度或类型:0x0800 表示以IP帧 ; 0x0806 表示以ARP帧 ;

 

 

 

 

 

以太网IP协议

版本:4 ; 头部长:5;服务类型:00;总长: UDP data + 8 UDP header + 20 IP header; time to live :80; 协议:11--UDP/IP,10--ICMP/PINGN ;

以太网校验和:在运算的时候,先设置该处的值为0,等运算结果出来之后,再把结果添加进去。

 

以太网UDP格式

 

 UDP端口有几个特殊的:68 --BOOT客户端,同时用于DHCP ,67--BOOT 服务,同时用于DHCP; 校验和:UDP 的校验和可以设置为0,如果要计算的话,比较麻烦。

 

动态主机设置协议 DHCP

 

http://zh.wikipedia.org/wiki/%E5%8A%A8%E6%80%81%E4%B8%BB%E6%9C%BA%E8%AE%BE%E7%BD%AE%E5%8D%8F%E8%AE%AE   

 

1. DHCP的报文格式

我们来介绍一下DHCP的报文格式,如图1,

OP(1)

Htype(1)

Hlen(1)

Hops(1)

Transaction  ID(4)

Seconds(2)

Flags(2)

Ciaddr(4)

Yiaddr(4)

Siaddr(4)

Giaddr(4)

Chaddr(16)

Sname(64)

File(128)

Options(variable)

(图1   DHCP的 报文格式)

l  OP:若是client送给server的封包,设为1,反向为2;

l  Htype:硬件类别,ethernet为1;

l  Hlen:硬件长度,ethernet为6;

l  Hops:若数据包需经过router传送,每站加1,若在同一网内,为0;

l  Transaction ID:事务ID,是个随机数,用于客户和服务器之间匹配请求和相应消息;

l  Seconds:由用户指定的时间,指开始地址获取和更新进行后的时间;

l  Flags:从0-15bits,最左一bit为1时表示server将以广播方式传送封包给 client,其余尚未使用;

l  Ciaddr:用户IP地址;

l  Yiaddr:客户IP地址;

l  Siaddr:用于bootstrap过程中的IP地址

l  Giaddr:转发代理(网关)IP地址;

l  Chaddr:client的硬件地址;

l  Sname:可选server的名称,以0x00结尾;

l  File:启动文件名;

l  Options:,厂商标识,可选的参数字段

 

动态主机设置协议Dynamic Host Configuration Protocol, DHCP)是一个局域网网络协议,使用UDP协议工作,主要有两个用途:

· 给内部网络或网络服务供应商自动分配IP地址给用户

· 给内部网络管理员作为对所有计算机作中央管理的手段

DHCP运行分为四个基本过程,分别为请求IP租约、提供IP租约、选择IP租约和确认IP租约。

DHCPDISCOVER

UDPSrc=0.0.0.0
sPort=68 Dest=255.255.255.255 dPort=67

OP

HTYPE

HLEN

HOPS

0x01

0x01

0x06

0x00

XID

0x3903F326

SECS

FLAGS

0x0000

0x0000

CIADDR

0x00000000

YIADDR

0x00000000

SIADDR

0x00000000

GIADDR

0x00000000

CHADDR

0x00053C04

0x8D590000

0x00000000

0x00000000

192 octets of 0's. BOOTP legacy

Magic Cookie

0x63825363

DHCP Options

DHCP option 53: DHCP Discover

DHCP option 50: 192.168.1.100 requested

DHCP 发现 (DISCOVER)[编辑]

客户在物理子网上发送广播来寻找可用的服务器。网络管理员可以配置一个本地路由来转发DHCP包给另一个子网上的DHCP服务器。该客户实现生成一个目的地址为255.255.255.255或者一个子网广播地址的UDP包。

客户也可以申请它使用的最后一个IP地址(在下面的例子里为192.168.1.100)。如果该客户所在的网络中此IP仍然可用,服务器就可以准许该申请。否则,就要看该服务器是授权的还是非授权的。 授权服务器会拒绝请求,使得客户立刻申请一个新的IP。非授权服务器仅仅忽略掉请求,导致一个客户端请求的超时,于是客户端就会放弃此请求而去申请一个新的IP地址。

DHCPOFFER

UDP Src=192.168.1.1
sPort=67 Dest=255.255.255.255 dPort=68

OP

HTYPE

HLEN

HOPS

0x02

0x01

0x06

0x00

XID

0x3903F326

SECS

FLAGS

0x0000

0x0000

CIADDR

0x00000000

YIADDR

0xC0A80164

SIADDR

0x00000000

GIADDR

0x00000000

CHADDR

0x00053C04

0x8D590000

0x00000000

0x00000000

192 octets of 0's. BOOTP legacy

Magic Cookie

0x63825363

DHCP Options

DHCP option 53: DHCP Offer

DHCP option 1: 255.255.255.0 subnet mask

DHCP option 3: 192.168.1.1 router

DHCP option 51: 1 day IP lease time

DHCP option 54: 192.168.1.1 DHCP server

DHCP提供 (OFFER)[编辑]

当DHCP服务器收到一个来自客户的IP租约请求时,它会提供一个IP租约。DHCP为客户保留一个IP地址,然后通过网络广播一个DHCPOFFER消息给客户。该消息包含客户的MAC地址、服务器提供的IP地址、子网掩码、租期以及提供IP的DHCP服务器的IP。

服务器基于在CHADDR字段指定的客户硬件地址来检查配置。这里的服务器,192.168.1.1,将IP地址指定于YIADDR字段。

DHCPREQUEST

UDP Src=0.0.0.0
sPort=68 Dest=255.255.255.255 dPort=67

OP

HTYPE

HLEN

HOPS

0x01

0x01

0x06

0x00

XID

0x3903F326

SECS

FLAGS

0x0000

0x0000

CIADDR

0x00000000

YIADDR

0x00000000

SIADDR

0x00000000

GIADDR

0x00000000

CHADDR

0x00053C04

0x8D590000

0x00000000

0x00000000

192 octets of 0's. BOOTP legacy

Magic Cookie

0x63825363

DHCP Options

DHCP option 53: DHCP Request

DHCP option 50: 192.168.1.100 requested

DHCP option 54: 192.168.1.1 DHCP server.

DHCP请求 (REQUEST)[编辑]

当客户PC收到一个IP租约提供时,它必须告诉所有其他的DHCP服务器它已经接受了一个租约提供。因此,该客户会发送一个DHCPREQUEST消息,其中包含提供租约的服务器的IP。当其他DHCP服务器收到了该消息后,它们会收回所有可能已提供给客户的租约。然后它们把曾经给客户保留的那个地址重新放回到可用地址池中,这样,它们就可以为其他计算机分配这个地址。任意数量的DHCP服务器都可以响应同一个IP租约请求,但是每一个客户网卡只能接受一个租约提供。

DHCPACK

UDP Src=192.168.1.1
sPort=67 Dest=255.255.255.255 dPort=68

OP

HTYPE

HLEN

HOPS

0x02

0x01

0x06

0x00

XID

0x3903F326

SECS

FLAGS

0x0000

0x0000

CIADDR (Client IP Address)

0x00000000

YIADDR (Your IP Address)

0xC0A80164

SIADDR (Server IP Address)

0x00000000

GIADDR (Gateway IP Address switched by relay)

0x00000000

CHADDR (Client Hardware Address)

0x00053C04

0x8D590000

0x00000000

0x00000000

192 octets of 0's. BOOTP legacy

Magic Cookie

0x63825363

DHCP Options

DHCP option 53: DHCP ACK

DHCP option 1: 255.255.255.0 subnet mask

DHCP option 3: 192.168.1.1 router

DHCP option 51: 1 day IP lease time

DHCP option 54: 192.168.1.1 DHCP server

DHCP确认 (Acknowledge,ACK)[编辑]

当DHCP服务器收到来自客户的REQUEST消息后,它就开始了配置过程的最后阶段。这个响应阶段包括发送一个DHCPACK包给客户。这个包包含租期和客户可能请求的其他所有配置信息。这时候,TCP/IP配置过程就完成了。

该服务器响应请求并发送响应给客户。整个系统期望客户来根据选项来配置其网卡。

 

 

ARP协议解码详解

ARP,全称Address Resolution Protocol,中文名为地址解析协议,它工作在数据链路层,在本层和硬件接口联系,同时对上层提供服务

IP数据包常通过以太网发送以太网设备并不识别32位IP地址它们是以48位以太网地址传输以太网数据包。因此,必须把IP目的地址转换成以太网目的地址。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的MAC地址。但这个目标MAC地址是如何获得的呢?它就是通过地址解析协议获得的。ARP协议用于将网络中的IP地址解析为的硬件地址(MAC地址),以保证通信的顺利进行

硬件类型

协议类型

硬件地址长度

协议长度

操作类型

发送方的硬件地址(0-3字节)

源物理地址(4-5字节)

源IP地址(0-1字节)

源IP地址(2-3字节)

目标硬件地址(0-1字节)

目标硬件地址(2-5字节)

目标IP地址(0-3字节)

(图1 ARP/RARP报头结构)

l 硬件类型字段指明了发送方想知道的硬件接口类型,以太网的值为1;

l 协议类型字段指明了发送方提供的高层协议类型,IP为0800(16进制);

l 硬件地址长度和协议长度指明了硬件地址和高层协议地址的长度,这样ARP报文就可以在任意硬件和任意协议的网络中使用;

l 操作字段用来表示这个报文的类型,ARP请求为1,ARP响应为2,RARP请求为3,RARP响应为4;

l 发送方的硬件地址(0-3字节):源主机硬件地址的前3个字节;

l 发送方的硬件地址(4-5字节):源主机硬件地址的后3个字节;

l 发送方IP(0-1字节):源主机硬件地址的前2个字节;

l 发送方IP(2-3字节):源主机硬件地址的后2个字节;

l 目的硬件地址(0-1字节):目的主机硬件地址的前2个字节;

l 目的硬件地址(2-5字节):目的主机硬件地址的后4个字节;

l 目的IP(0-3字节):目的主机的IP地址。

ICMP (PING)协议

ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP报文包括IP头部、ICMP头部和ICMP报文(见图表,ICMP报文的结构和几种常见的ICMP报文格式),IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型(Type)域用于说明ICMP报文的作用及格式,此外还有一个代码(Code)域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面。RFC定义了13种ICMP报文格式,具体如下:

0 响应应答(ECHO-REPLY)

8 响应请求(ECHO-REQUEST)

0 0