ip数据包的流向与改变

简单记录下数据包的流向。

lan

首先假定有两台处于同一局域网,ip地址分别为192.168.0.1/24,192.168.0.2/24的主机A与B,属于同一子网。路由器为192.168.0.255/24,该路由器在这儿其实相当于一个交换机。

A向B发起一个请求,上层封装这里不说了,到了三层ip层后,会封装为ip数据包,同时查询arp缓存(IP->MAC映射)。

假设缓存不存在,则会发起arp请求,广播来查询目标B的ip地址对应的MAC地址,该包是直接发往了交换机(A机器网卡直连)。

交换机在发现它为一个arp请求后,拆包,获得了发起方A的MAC地址和IP,同时获得了想要获得的B的IP和广播MAC(全0xFF),于是将该包进行广播。

连接在交换机上的所有机器(除了A)均会收到广播包,假设收方得知要查询的IP不是本机IP的话,不会回应该包,假设为本机IP,则会回应告知本机的MAC地址,该回应也是直接发到了其余机器网卡直连的交换机上。

交换机获得了arp的回应包后,可以得知目标机器B的IP与MAC对应关系,会更新自身的表。同时将回应包转发给A,于是A就得知了B的MAC地址。

在MAC地址得知之后,封包完成,直接发往交换机,交换机通过目标MAC地址所连的端口,直接进行转发,一次转发完成。

wan

在局域网与广域网中,假设要进行通讯,必须通过具有路由功能的设备来进行连接,该设备既属于局域网,也能够与外界进行通讯。

假设有两个局域网w1,w2,路由分别为r1,r2,w1中的机器A为内网地址为192.168.0.1/24,外网地址为58.211.111.1,w2中的机器B为192.168.0.2/24,外网地址为58.211.111.2。

当A想要给B发送数据的时候,首先A机器通过本身的ip地址与子网掩码得知,B机器不属于本子网,于是需要通过网关进行转发。我们只知道网关的ip地址,所以在此需要通过arp协议来获取到网关的MAC地址。在获取完毕后,组包完成(FROM MAC A, FROM IP 192.168.0.1, TO MAC GATEWAY, TO IP B),该包将会发往网关(路由器)。

路由器在收到该包后,进行解包,查询自身的路由表来路由到下一个路由器中,同时路由器会改写数据包,比如会改写TTL,还有会把FROM MAC改为路由器本身的MAC,FROM IP改为路由器的IP(公网IP),TO MAC(?)改为下一个路由节点的MAC地址,TO IP不会进行改变。

当然实际还有一点工作要做。家用路由器基本都带NAT功能,用于将局域网IP转为公网IP。在上述的转发过程中,路由器会建立A的IP:PORT与目标方IP:PORT的对应表,用于在目标方回复数据包的时候,可以找到该包该转发给内网的哪台机器。

共 0 条回复
暂时没有人回复哦,赶紧抢沙发
发表新回复

作者

sryan
today is a good day