IP协议确定数据跨网络从主机A到主机B的路径,即IP协议解决了路径选择问题,但在这之前,必须先解决数据在一个子网内的传输的问题。跨网络的本质就是跨多个子网,只要一个子网内可以通信,那么便可以跨网络通信。
一.以太网
以太网并不是一种具体的网络,而是一种技术标准,既包含了数据链路层的内容,也包含了一些物理层的内容,例如:规定了网络的拓扑结构,访问控制方式,传输速率等。以太网是当前应用最为广泛局域网技术和以太网并列的有无线LAN,令牌环网等。
1.1 以太网帧格式
MAC地址:
一般每一张网卡都带有一个MAC地址,MAC地址用于一个子网内数据通信。局域网通信原理就是一个主机将发送的报文发送到当前局域网内的所有主机上,然后每台主机都能接收到该报文,但是当数据链路层解析到这个报文发送的目的地址(MAC)不是自己时,数据链路层就会将该报文丢弃。
6位目的地址,6位源地址:
这两个字段封装了接收方和发送方的MAC地址。
2位协议类型:决定向上交付给哪个协议
- 0800:表示这个有效载荷是IP报文
- 0806:表示这个有效载荷是ARP请求/应答报文
1.2 以太网通信原理
一台主机发送的报文在局域网内的每个主机都能接收,只是选择丢弃还是向上交付由数据链路层决定。一个局域网中任何时候都可能由多台主机同时发送消息,此时不可避免的就会有数据碰撞的发送,因此局域网也叫做碰撞域。如何避免这样的碰撞呢?以太网通过CSMA/CD来实现,最大程度保证任何时候,只有一个主机在发送数据。一个局域网中,主机越多,碰撞概率越高,因此可以引入一个交换机将一个局域网划分为多个碰撞域。
我们可以将局域网看作一个临界资源,为了保证同一时刻只有一个主机访问这个临界资源,不同的局域网有不同的策略。比如:以太网:CSMA/CD、令牌环网:拿到令牌才能发消息
在发送数据时,你只知道对方的IP地址和端口号,但是要封装以太网帧,必须要知道对方的MAC地址。在数据链路层中,可以通过ARP协议根据IP地址获取对方的MAC地址。
1.3 ARP协议:地址解析协议
ARP协议格式:
注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。硬件类型指链路层网络类型,1为以太网;协议类型指要转换的地址类型,0x0800为IP地址;硬件地址长度对于以太网地址为6字节;协议地址长度对于和IP地址为4字节;op字段为1表示ARP请求,op字段为2表示ARP应答 。由于ARP请求报文不知道对端的MAC地址,因此在封装时,目的MAC地址填全F
ARP协议工作流程:
假设每台主机的MAC地址为MACX,IP地址为IPX。当一台主机不知道对端MAC地址时,会封装ARP请求报文,发送给当前局域网内所有主机,接收到报文的主机会识别目的MAC地址,如果为全F,那么会向上交付到ARP协议中,然后识别ARP协议中的目的IP地址是否为自己,如果是的话,会将自己主机的MAC地址封装到ARP应答报文中交付给对方。这样一台主机就可以通过ARP请求与应答的方式根据对方IP地址获取到对方MAC地址。自此,在局域网中就可以通过MAC地址进行数据包的转发。
根据ARP请求与应答获取的IP地址与MAC地址的映射关系会暂时存储在一个主机中,通过arp
可以查看这个映射关系。通过ping
命令可以提前构建好当前局域网内所有主机的IP地址和MAC地址的映射关系。