主机发送IP数据包过程
当一个拥有公网IP的主机给其它主机发送IP数据包时,首先在IP首部封装自身IP地址(源IP)和目的主机的IP地址(目的IP),实现网络层数据的封装。接下来进行数据链路层封装,数据链路层数据帧的源MAC地址是本机MAC地址,但是目的主机的MAC地址主机并不知道,所以在完成数据链路层封装前必须知道目的MAC地址。
在TCP/IP协议族中,主机是通过ARP协议获取目的主机MAC地址的。假设主机A给其他主机发送IP数据,开始时主机A不知道目的主机的MAC地址,只知道目的主机的IP,主机A就发一个ARP请求帧,ARP帧的源IP是主机A的IP,目的IP是目的主机的IP,源MAC是主机A的MAC地址,目的MAC地址是广播地址。
然后这个ARP请求帧在内网中被广播,当其他主机收到这个ARP请求帧时,会查验请求帧中的目的IP地址是否是自己的IP地址,不是的话就丢弃。是的话,该主机(如主机B)就响应这个ARP请求,把自己的MAC地址发送给主机A。这样源主机A就可以完成数据链路层的封装。
如果目的主机是其他子网的主机,如主机D。那么路由器1收到ARP请求后,会判断出主机B属于其他子网,然后路由器1把自己的MAC地址发送给主机A,主机A以后再给主机D发IP数据时,目的MAC封装的是路由器1的MAC地址。
主机给其他主机发送IP数据前,会用本机的子网掩码与目标地址进行与运算,