上一节是站在服务器和客户端的角度讲收发包的.这次我们站在包的角度上再看一下 一个包的一生
一个包被创建的过程
有这个表就可以看出 一个完整的包其实就是在数据包前加了三个包头.
概述一个包的一生
当一个包在 IP 协议处进行最后的包装后,它就开始了自己的旅程.遗憾的是 包 也不知道他的旅程会是怎样的.
为什么这么说呢 ?
因为一个包只知道目的地 (IP地址告诉它)和下一站该去哪(MAC地址告诉它).每到一个驿站(网络转发设备),它就会询问 我要去 目的地,我下一站应该去哪,然后他用答案 替换了 当前的下一站, 然后它又开始了自己的旅程,依次循环,直到到达目的地
IP地址(IP协议)和MAC地址(以太网协议)的关系
网络转发设备 --路由器.
路由器中有一张路由表,通过对比目的IP地址来查找下一个 IP 转发设备的IP地址.
网络转发设备 – 集线器
集线器有一张表(以太网协议的表).通过这张表可以查出相应的传输方向.集线器在子网中将网络包传输至下一个路由器
关系: IP协议在路由器中可以根据IP头部找到一下个路由器的MAC地址,IP协议将下一个路由器的MAC地址替换掉当前的MAC地址,然后会委托以太网协议将包发到下一个路由器,依次循环.
MAC头部
这里对开始的图片说明一下: MAC头部是在IP协议层打包的,只不过是在以太网中使用 MAC 头部.
字段名称 | 长度(比特) | 含义 |
---|---|---|
接收方MAC地址 | 48 | 网络包接收放的MAC地址,在局域网中使用这一地址来传输网络包 |
发送方MAC地址 | 48 | 网络包发送方的MAC地址,接收方通过它来判断是谁发送了这个包 |
以太类型 | 16 | 使用协议的类型. |
0800 :IP协议 | ||
0806 :ARP协议 | ||
86DD :IPv6 |
这里有一个问题需要解决. 上面讲了,IP协议将下一个路由器的MAC地址替换掉当前的MAC,那么IP协议是怎样知道下一个路由器的MAC地址呢??? 因为路由表只知道 下一个路由器的 IP地址.
这里又使用了ARP协议和广播.
ARP:Address Resolution Protocol,地址解析协议 ---- 是根据IP地址获取MAC地址的一个TCP/IP协议.
广播:广播可以把包发给链接在同一以太网中的所有设备.
ARP协议就向子网中的所有设备发出询问.如果某一个设备的IP地址于ARP协议中的IP地址相同,这个IP地址的路由器就会把自己的MAC地址返回给该主机或路由器.
为了提高查询效率.计算机中有一个 ARP缓存的内存空间中会保留最近几分钟所查询到的MAC地址.
每次查询前现在ARP缓存区中查找一遍,如果没有则再发起询问.
那么为什么ARP缓存区只保存最近几分钟的数据呢? 如果保存时间过长,对方的IP地址发生变化,ARP缓存的内容就会与现实发生差异.