第8讲 | 世界那么大,我想出网关:欧洲十国游与玄奘西行

之前几节我们讲的都是内网里的协议,现在我们去外网看看。

怎么在宿舍上网?

之前我们在宿舍组了一个局域网用来打游戏,现在我们看怎么连到外网。学校给每个宿舍的网口分配一个IP地址,这个IP是校园网的IP,假设是10.10.x.x。宿舍网的IP地址为192.168.1.x。

要在宿舍上网有两个办法:

第一个办法,让宿舍长再买一张网卡,这个时候,宿舍长的电脑有两张网卡,一张网卡的线插到宿舍的交换机上,另一张网卡的线插到校园网的网口。这张新网卡的IP地址要按照学校网管部门分配的配置,不然上不了网。宿舍长的电脑得一直开着,大家才能上网。

第二个办法,买个路由器。路由器会有外网网口和内网网口。把外网网口的线插到校园网的网口上,这个外网网口配置成网管部要求的一样。内网网口连上宿舍的所有电脑。

这两种方法其实是一样的。路由器跟电脑一样,里面也跑着程序,只不过是一个嵌入式的系统。

其他人想要上网就需要配置自己主机的网卡。当然可以用DHCP默认配置。在配置网卡的时候除了配置IP地址,还要配置Gateway,即网关。

你了解MAC头和IP头的细节吗?

在MAC头里,先是目标MAC地址,然后是源MAC地址,然后有一个协议类型,用来说明里面是IP协议。

IP头里面的版本号,目前主流的是IPv4,服务类型TOS在前面讲过。TTL是生存时间,还有8位的协议标识,是TCP还是UDP。

在任何一台机器上,要访问另一个IP地址的时候,都会判断目标IP是否和当前机器位于一个网段。怎么判断呢,需要子网掩码和CIDR。

如果是同一个网段。这种情况没网关什么事,直接将源IP和目标IP放入IP头中,然后通过ARP获得MAC地址,将源MAC和目标MAC放入MAC头中,发出去就可以了。

如果不是同一个网段。就要发往默认网关。网关的IP地址一定要和源IP地址处于同一个网段。网关的地址一般不是网段的第一个就是第二个,例如192.168.1.0/24这个网段,Gateway往往是192.168.1.1/24或192.168.1.2/24。

如何发往默认网关呢?这个过程和发往同一个网段的其他机器是一样的:将源IP和目标IP放入IP头中,通过ARP获得网关的MAC地址,将源MAC和网关的MAC放入MAC头中,发出去。网关所在的端口,例如192.168.1.1/24将网络包收进来,接下来由网关处理。

网关是一个路由器,是一个三层转发的设备。

一个路由器往往由多个网口,如果一台服务器做同样的事情,则就有多个网卡,其中一个网卡是和源IP同网段的。

路由器是一台设备,有五个网卡或网口,相当于有五只手,分别连着五个局域网。每只手的IP地址都和局域网的IP地址是相同的网段,每只手都是它握住的那个局域网的网关。

任何一个想发往其他局域网的包,都会到达其中一只手,拿进来,拿下MAC头和IP头,根据路由算法,选择另一只手,加上IP头和MAC头,发出去。

静态路由是什么?

选择那一只手发出去呢?IP头和MAC头加什么内容,哪些变哪些不变?这个问题分两类:一个是静态路由,一个是动态路由。这一节我们先讲静态路由。

静态路由,就是在路由器上配置一条一条规则。这些规则是这样:我想访A服务器,从2号口出去,下一跳是IP2;我像访问B服务器,从3号口出去,下一跳是IP3,这些规则保存至路由器里。

每当要选择从哪只手送出去的时候,就一条条匹配规则,找到符合的规则,按规则设置的那样,从某个口丢出去,找到下一条。

IP头和MAC头哪些变、哪些不变?

对于IP头和MAC头哪些变、哪些不变的问题,分两种。分别称为“欧洲十国游”型和“玄奘西行”型。

我们知道MAC地址只在一个局域网有效,MAC地址只要过网关,就一定会变。这两者的区别在于IP是否变。不改变IP地址的网关,我们称为转发网关;改变IP地址的网关,我们称为NAT网关。

“欧洲十国游”型

我们先看看什么是“欧洲十国游”型。

服务器A要访问服务器B。首先服务器A会判断192.168.4.101是不是和我同一个网段,明显不是,所以需要发送到网关。网关是192.168.1.1,已经静态配置好了。网关的MAC是多少呢?需要通过ARP协议发送广播获得网关的MAC,然后发送包。包的内容像这样:

  • 源MAC:服务器A的MAC
  • 目标MAC:192.168.1.1这个网口的MAC
  • 源IP:192.168.1.101
  • 目标IP:192.168.4.101

包到达192.168.1.1这个网口,发现MAC一致,将包收进来,然后此路由器判断往哪个口转发。

路由器A配置了静态路由后,会根据路由表去匹配,其中有一条规则是要想访问192.168.4.0/24,要送到192.168.56.1这个口出去,下一跳是192.168.56.2。路由器A匹配到这条规则后,会将包从192.168.56.1这个口发出去,发给192.168.56.2。那么192.168.56.2的MAC是多少呢?路由A发送ARP获取192.168.56.2的MAC地址,然后发送包。包的内容是这样:

  • 源MAC地址:192.168.56.1的MAC地址
  • 目标MAC地址:192.168.56.2的MAC地址
  • 源IP:192.168.1.101
  • 目标IP:192.168.4.101

包到达这个网口,发现MAC一致,将包拿进来,然后思考往哪里转发。

路由器B也配置了静态路由,其中有一条规则是要想访问192.168.4.0/24,从192.168.4.1这个口出去,没有下一跳。

路由器B会匹配到这条规则,然后从192.168.4.1这个口发出去,发给192.168.4.101。192.168.4.101的MAC地址现在还不知道,所以需要路由器B通过ARP协议获取,然后发送包。包的内容是这样:

  • 源MAC:192.168.4.1的MAC
  • 目标MAC:192.168.4.101的MAC
  • 源IP:192.168.1.101
  • 目标IP:192.168.4.101

包到达服务器B,MAC地址匹配,将包收进来。

可以看到,每个一个新的局域网MAC地址会变,但IP地址不变。IP头不保存任何网关的IP地址。

之所以管这种模式叫欧洲十国游,是因为整个过程中,IP头的地址是不变的。就像在欧洲各国旅游,一个签证就能搞定。

“玄奘西行”型

我们再看什么是“玄奘西行”型。

现在路由A到路由器B中间的部分属于公网,局域网的包要在公网上传输必须要有用公网的地址。就好像出国一样,不能像国内一样用身份证了,要改用护照。玄奘西行也要拿着通关用的通关文牒。

首先,目标服务器B需要有个公网的IP,我们给它一个10.10.1.2。在网关B上,我们记下来,国际身份10.10.1.2对应国内的192.168.4.101。凡是要访问10.10.1.2都会转成192.168.1.101。

于是,源服务器A要访问服务器B,会指定目标IP为10.10.1.2。服务器A知道这个IP不是同一个网段的,所以要发给网关,网关已经静态配置好了是192.168.1.1,网关的MAC地址通过ARP获得,然后发送包。包的内容是这样:

  • 源MAC:服务器A的MAC
  • 目标MAC:192.168.1.1这个网口的MAC
  • 源IP:192.168.1.101
  • 目标IP:10.10.1.2

包到达192.168.1.1这个网口,发现MAC一致,将包收进来,考虑接下来往哪发。

在路由器A中配置了静态路由:要想访问10.10.1.2,从10.10.1.1这个口出去,没有下一跳了,它的网段和我直连着。

路由器A匹配到这条规则会从10.10.1.1这个口发出去,发给10.10.1.2,10.10.1.2的MAC地址会通过ARP协议获得。

当网络包发送到中间的公网的时候,服务器A也要有个国际身份,因此不能用原来的192.168.1.101,需要改成10.10.1.1。包的内容是这样:

  • 源MAC:10.10.1.1的MAC地址
  • 目的MAC:10.10.1.2的MAC地址
  • 源IP:10.10.1.1
  • 目的IP:10.10.1.2

包到达10.10.1.2这个网口,发现MAC一致,将包收进来,考虑往哪里发。

路由器B是一个NAT网关,上面配置了,10.10.1.2的国际身份对应国内的192.168.4.101,于是改为访问192.168.4.101。

路由器配置了静态路由:要想访问192.168.4.0/24,从192.168.4.1这个网口出去,没有下一跳,是直连的。

路由器B匹配到这条规则,会从192.168.4.1这个口发出去,发给192.168.4.101,192.168.4.101的MAC通过ARP获取。然后发送包,包的内容是这样:

  • 源MAC:192.168.4.1的MAC地址
  • 目的MAC:192.168.4.101的MAC地址
  • 源IP:10.10.1.1
  • 目标IP:192.168.4.101

包到达服务器B,MAC地址匹配,将包收进来。

从服务器B接收的包可以看出,源IP为服务器A的国际身份,发送返回包的时候,也使用这个国际身份,然后路由器A做NAT转换,转为国内身份。可以看到IP地址会变,这个过程就是Network Address Translation,简称NAT。

第二种方式我们经常会看到,我们家里都有路由器,家里的网段一般都是192.168.1.x,这是私网的网段,当包从家里发往公网的时候,路由器会做NAT转换。

很多办公室访问外网的时候,也是被NAT过的,因为办公室的IP一般是公网不可见的。可以通过https://www.whatismyip.com/查看自己的出口IP,即公网IP。

小结

  • 如果离开本局域网,要经过网关,网关是路由器的一个网口;
  • 路由器是一个三层设备,里面有如何寻找下一跳的规则;
  • 经过路由器之后MAC头要变,此时如果IP不变,相当于不换护照的欧洲游;如果IP变,相当于换护照的玄奘西行。

两个思考题:

1. 当你在家里访问163网站的时候,你的包要NAT成公网IP,返回的包又要NAT成你的私有IP,路由器怎么知道这是你的请求包,而不是同网段的别人的请求包呢?

2. 对于路由规则,我们讲了静态路由,需要手动配置,如果要自动配置,应该怎么办?

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值