1. ICMP 生成一个echo request payload
2. ICMP把 payload 交给IP, IP之后生成一个packet, 这个packet至少包括源IP地址和目的地IP地址,以及协议区0×01的信息. 这些信息就是告诉接受方在现在这种情况下当它接收到payload时,应该交给ICMP去处理.
3. 当这个packet生成后, IP决定这个目的地的IP地址是不是在本地网络上, 或者是个远程网络
4. 如果IP发现目的地IP地址是个远程网络的话, 那么packet就要被先送到default gateway, 然后gateway才能将packet路由到远程网络
5. 在图中看到, hostA的DG是E0, 就是172.16.10.1. 所以对于这个packet来说, 如果要将它送到E0, 就必须首先知道E0的硬件地址. 为什么是硬件地址呢? 因为packet要向下传到Data Link Layer, 就必须要变成frame, 然后传到172.16.10.0这个网络, 而E0恰好就连接在这个网络上. 在此尤其注意一点, 主机在本地网络LAN上通信, 只能是通过硬件地址. 如图所示, hostA 和hostB要通信的话, 就必须把packet先送到本地网络的DG的MAC地址.
注意: MAC地址只是在LAN上存在, 从来不会突破路由器
6. hostA检查自己的ARP cache, 看DG的IP地址是否已经被解析为一个硬件地址. 如果是, packet就会被下传到Data Link Layer 去frame, 同时destination的硬件地址也在这个packet里面; 如果不, 那么hostA会在本地网络发送一个ARP包以寻找E0的硬件地址,( hostA知道E0的IP地址就是172.16.10.1), 这时路由器会把E0的硬件地址提供给hostA, hostA同时把它存在cache里面.
7. 到此, packet和destination的硬件地址都有了, 那么就一起传到Data Link Layer. 此时, LAN驱动器(driver)就提供媒体访问(Media Access), 在这个例子中就是Ethernet. 然后就生成了frame, 把packet和控制信息进行封装.
这个frame包含五部分:
destination 硬件地址MAC; 一定注意这个dest指的是E0的MAC地址
source 硬件地址MAC;
Ether-Type field, 用于指明什么network layer 协议会将packet传递到Data Link Layer, 此例中是IP;
Packet;
FCS, 用于存放CRC的结果
注意: 此处不含远程主机的MAC地址,即就是hostB的地址
8. 当frame产生以后, 就会传输到physical layer, 并且放在物理媒质上, one bit/time.
9. 于是冲突域内所有的设备就会受到这些bits, 并且重建成frame, 每个设备都会运行CRC, 与FCS内的答案核对. 如果不相符, 这个frame就会被丢弃; 如果相符, 那么首先检查destination 硬件地址, 这个destination 依旧指的是 E0; 如果还是相符, 那么Ether-Type的内容就会被检测, 得到在Network Layer上应用的协议
Popularity: -4% [?]

