网络协议(五)互联网上的通信

上篇文章中介绍了局域网中的设备是怎么进行通信的,这篇文章再来探讨下互联网中的设备是怎么通信的。

一台设备如果要访问的IP和自身不在同一个局域网内,那么发出去的网络包就要经过网关,由网关递向互联网,并由网关接收反馈消息。

网关是什么

在家庭网络中,光猫充当网关的角色(具有路由功能);企业网络中路由器充当网关的角色。网关的基本作用就是连接不同的网络,可以是公司内部不同的局域网,也可以是互联网。一个局域网内的机器要访问互联网上的机器就得经过网关才行。

路由器是三层设备,工作在网络层。关于几层设备这个名词的意思,可以这样理解:这个设备完成工作一共需要将网络包拆到第几层,这个设备就是几层设备,例如交换机拆包拆到数据链路层(mac层),所以它是二层设备;路由器拆包拆到网络层,所以它是三层设备。

上图是mac本上的网络配置信息,其中“路由器”这一项的值就是网关的IP。

如果电脑要访问百度的话,就得将网络包发向网关,再由网关发送到互联网上,经过互联网中的N多个路由器间的相互传递,就递到了百度的服务器上。百度返回的内容也是经过N多个路由器的传递先到达网关,再由网关判断具体递给局域网中的哪台机器。

互联网通信的流程

举一个例子来串联一下电脑访问互联网内容的过程。

第一步,将网络包发给网关

现在我电脑的IP是192.168.1.5,很明显这是一个内网IP,由子网掩码255.255.255.0得出我所在局域网的网络号为192.168.1.0。现在我要访问百度,先看一下百度的IP是多少,ping一下

百度有很多IP地址,我这台电脑会打到220.181.38.149这个IP上,根据我所在局域网的子网掩码得出百度这个IP的网络号为220.181.38.0,和此局域网的网络号不同,所以我访问百度这个IP的话,属于跨子网访问,电脑需要先将网络包发给网关(192.168.1.1),我这台电脑发出去的网络包的IP和mac头长这个样子

第二步,网关将网络包发向互联网

网关收到发给自己的网络包后,发现这是一个要访问外网的请求,于是就要想办法在互联网中将包发给指定设备,这中间要经过互联网中n多个路由器间的n多次跳转,每个路由器都能够根据目标IP判断出这个包下一跳应该跳向哪个路由器。

如下图所示,每个路由器都有n多个网卡对应着n多个端口, 每个端口连接了不同网段的路由器,路由器知道要访问一个指定IP,需要将这个网络包发向哪个端口。

回到网关的话题上,网关按照转发网络包的方式来分类的话可以分为转发网关NAT网关。两者最大的区别就是在转发网络包时是否改变包里的源IP,不改变IP的是转发网关,改变IP的是NAT网关,其实我们日常工作生活接触到的大多是NAT网关。

首先明确一点,不管是什么类型的网关和路由器,网络包在互联网中来回传递时,mac头的内容总是在不断变化的,它的源mac总是发出来网络包的那台设备的mac(不管是首发还是传递),它的目标mac总是网络包将前往的下一跳,或者说将到要到达的下个设备的mac。

转发网关

通过traceroute命令可以看到,从本地电脑要出网关要前往的下一个路由器是100.91.0.1,这里给它起个别名叫路由器A。

如果我的网关是转发网关,那么发出去的包大概长这个样子

可以看到,网络包出网关后,源IP没有换,还是我本机的IP。

NAT网关

转发网关会有个问题,就是包里的源IP是我在我这个局域网内的IP,我如果将这个包发到百度的服务器之后,百度怎么给我回馈呢,可能世界各地有数不清个IP为192.168.1.5的设备正在运行着,这时候这个回馈的数据就没办法回来了。

现在我们接触到的大多数网关都是NAT网关,包括家庭网络和公司网络,整个区域内共享一个公网IP,所有局域网内出去的网络包都要被网关给包装一下,换成网关的IP,因为网关的IP是互联网上的公有IP,是独一无二的,所以用这个IP的身份就可以正确的收发互联网上的数据。

NAT的全称是Network Address Translation,译为网络地址转换,它的转换针对的是IP和端口,抛开mac层的内容不谈,IP端口是这么一个转换过程

我这台电脑有个应用程序要给百度发消息,百度的IP是220.181.38.150,我这个应用程序在本机的端口号为8080,那么从我电脑发出去的网络包的IP端口是这个样子

网络包到达网关后,给我把网络包里的源IP换成了它连接到公网的公网IP 1.203.85.83,并且把端口也换掉了,随机拿了一个未被占用的端口54123替换掉了我的8080,于是网络包的IP端口变成了这个样子

同时网关会记录下来它做的这个转换,也就是保存了转换前和转换后的映射关系

百度收到消息后,要给我的应用程序回复一个消息,它发到互联网上的网络包的IP端口是这样

可以看到,公网上的设备只认识公网上的设备,反映到这个例子里就是百度只认识你的网关,不知道你这个局域网的设备是谁,百度收到消息时发现这是我的网关IP发的消息,那么回消息时也会指明要回给我的网关IP。

网关收到消息后,去找一下自己存的映射关系,根据百度的IP端口+映射的随机端口就找到了真正发消息的设备,也就是我这台电脑的IP端口,然后网络包到我这台电脑时IP端口的信息就成了这样

至此,一个访问公网的请求就完成了,这就是NAT网关的网络地址转换过程。

第三步:互联网中路由器接力传递网络包

其实在介绍第二步时,刨除网络包在互联网中传递的过程,基本上收发过程已经清楚了。这里主要介绍一下网络包出网关后是怎么传输的。

互联网中有很多个路由器,路由器之间相互连接构成了一张网络传输的大网,所以网络包在互联网中传输的过程就是路由器不停的接力将包推进到目的地的过程。

路由器拿到一个网络包后怎么知道要把这个包推给谁呢?这就要说到路由协议了。

路由协议是计算机网络中用于决定数据包如何在网络中传输的一组规则和约定。这些规则告诉路由器如何选择最佳路径将数据包从源主机传输到目标主机。路由协议的作用是建立并维护路由表,其中包含了网络拓扑的信息,以便进行数据包的转发。

常见的路由协议包括:

  1. 静态路由: 静态路由是一种手动配置的方式,网络管理员手动配置路由器上的路由表,指定数据包应该通过哪个路径进行传输。虽然简单,但不适用于大型或动态变化的网络。

  2. 动态路由协议: 动态路由协议是一组协议,可以自动学习和适应网络拓扑的变化。常见的动态路由协议包括:

    • Routing Information Protocol (RIP): RIP是一种基于跳数的协议,适用于小型网络。
    • Open Shortest Path First (OSPF): OSPF是一种链路状态协议,适用于中型到大型网络。
    • Intermediate System to Intermediate System (IS-IS): IS-IS也是一种链路状态协议,通常用于大型ISP网络。
    • Border Gateway Protocol (BGP): BGP是一种路径矢量协议,主要用于连接不同自治系统的互联网路由。

这些协议使用不同的算法和策略来确定最佳路径,并能够处理网络拓扑的变化。选择特定的路由协议取决于网络的规模、要求和拓扑结构。

路由协议具体的内容就不讲了,感兴趣的同学自行查阅资料吧。

总结

本篇文章介绍了局域网内的一个设备要访问互联网中的设备时,网络包是怎么传输的。中间涉及到了NAT网关的IP端口映射,路由器间的接力传递。接下来的文章就该深入到传输层了,欲知后事如何,请听下回分解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值