MAC头数据格式:
包含了目的MAC地址,源MAC地址,协议类型一般为IP协议类型。
最主要的是源IP与目标IP。
同一个局域网中的两台设备进行数据传输时,直接先使用ARP协议找到目标MAC地址,组成数据包之后,在局域网中传输即可。
如果不是同一网段的,就需要先把数据发送到网关gateway,网关的地址与源IP地址是一个网段的,一般是第一个或者第二个。如192.168.1.0/24这个网段,网关往往会是192.168.1.1或者192.168.1.2.
如何将数据发给网关呢?
一般是将源地址与目标IP地址放入到IP头中,通过ARP获取到网关的MAC地址,将源MAC与网关MAC放入到MAC头中,发送出去。网段收到数据包之后,接下来做什么,就看网关的了。
——分割线——
以前,人们往往把网关就叫做路由器。其实还是有一点区别的。
路由器是一台设备,它有五个网口或者网卡,相当于五只手,分别连接着五个局域网。每只手的IP地址都和局域网的IP地址是相同的网段,每只手都是它握住的那个局域网的网关。
任何一个想发往其他局域网的包,都会到达其中一只手,被拿进来,拿下MAC头和IP头,再根据路由算法,选择另一只手,加上IP头和MAC头,然后扔出去。
——分割线——
静态路由:
在路由器上,配置了一条一条规则,每当要选择从哪个口出去的时候,就一条一条的匹配规则,找到符合的规则,就按规则中设置的那样,从某个口出去,找下一跳IPX。
数据包传输过程中,哪些IP是会变的,哪些IP又是不变的?
第一种情况:
服务器A往服务器B发送数据,数据包是这样进行封装的。
从服务器A到192.168.1.1网关:
源MAC:服务器A的MAC
目标MAC:192.168.1.1的MAC
源地址:192.168.1.101
目标地址:192.168.4.101
数据包到达网关之后,根据路由协议,需要将数据包发送到192.168.56.2网关,数据包重新进行封装:
源MAC:192.168.56.1的MAC
目标MAC:192.168.56.2的MAC
源地址:192.168.1.101
目的地址:192.168.4.101
数据包到达192.168.56.2网关之后,发现另一个口的网关是192.168.4.1,正好是192.168.4.101的网关,然后数据包就发送给192.168.4.101设备,数据包格式:
源MAC:192.168.4.1的MAC
目标MAC:192.168.4.101的MAC
源IP:192.168.1.101
目标MAC:192.168.4.101
此时,包到达服务器B,接收完成。
整个传输过程中,IP头里的源地址与目标地址是不变的,IP地址在三个局域网里都可见,在三个局域网之间的网段都不会冲突。在三个网段之间传输包,IP头不改变。
——分割线——
另一种情况:
此图中的服务器A与服务器B的IP地址是一样的,就无法使用第一种模式的数据包传输方式。
怎么解决这个问题呢?
服务器B的内网地址为192.168.1.101,它对应的外网地址为192.168.56.2,他们是一一对应的,凡是要访问192.168.56.2,都转成192.168.1.101.
数据包发送的内容是这样的:
源MAC:服务器A的MAC
目标MAC:192.168.1.1网口的MAC
源IP:192.168.1.101
目标IP:192.168.56.2
192.168.1.1网关收到包之后,拿进来,发现需要访问的目标地址为192.168.56.2,通过192.168.56.1网口传输出去,数据包格式:
源MAC:192.168.56.1MAC
目标MAC:192.168.56.2MAC
源IP:192.168.56.1
目标IP:192.168.56.2
数据包到达192.168.56.2这个网口之后,它是一个NAT路由,通过路由器发送到内网服务器B192.168.1.101,此时服务器B就收到服务器A的数据包了。
数据包格式:
源MAC:192.168.1.1MAC
目标MAC:192.168.1.101MAC
源IP:192.168.56.1
目标IP:192.168.1.101
总结一下:
1、如果离开本局域网,就需要经过网关,网关是路由器的一个网口。
2、路由器是一个三层设备,里面有如何寻找下一跳的规则。
3、经过路由器之后MAC头要变,不同情况下IP可能变,可能不变。
另外:
NAT分为静态NAT、动态NAT、端口地址转换(PAT)
1、静态NAT是一对一的,一个内网地址对应一个公网地址
2、动态NAT是一对多的,可重复使用
3、PAT是通过映射UDP、TCP端口号来记录不同的会话。
参考:
趣谈网络协议