计算机通信
场景大致如下所示:
1.同一个子网中两台计算机通信
2.不属于同一个子网,两台计算机进行通信
以下内容,将围绕这两种场景进行阐述,在阐述之前,先举个场景示例,帮助大家理解一些名词
场景一:
秦岭中学开学,高三一班来了一大批新同学,由于老师不认识,于是他按照班级名称找到教室,然后按照花名册进行点名。
现在老师想要认识一下【张三】同学,于是他先吼了一嗓子【张三】,整个高三一班都听到了,于是,不叫【张三】的不作回应,叫【张三】的回复了一声【到】
这下老师知道谁是张三了,下次有事情就可以直接到张三的位置找他了,不用再在整个班级里吼那一嗓子了。
同理,如果老师想找别人,也可以先吼一声,直到对方应答。这种方式就称为**广播。**广播后会记住对方的位置方便日后找人。
场景二:
高三一班的李四想找素未谋面的高三二班王麻子商议日后如何一统高三,该怎么办呢?
于是他通过对比,自己是高三一班,王麻子是高三二班的,发现不是一个班的。
所以他先出门,找到王麻子所在的高三二班。
但他也不认识王麻子是谁,所以他也大吼一声【王麻子】,【王麻子】听到后回复【到】,于是李四就知道了王麻子的位置,日后就可以直接到高三二班找王麻子了。
接下来,我们拿上述的例子,解释下述名词
-
主机:学生
在网络技术中是用于发送与接收信息的终端设备。
-
子网:班级就对应的是互联网中的子网,要与计算机通信,必须要先找到计算机所在的子网
一定范围内的局域网,不同局域网的IP可以重复
-
网络地址:【高三一班】【高三二班】这些班级编号,就是网络地址。相当于子网的编号,主要是用来判断互相通信的设备是否在同一个子网
在计算机领域中,网络就是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。网络地址则是互联网上的节点在网络中具有的逻辑地址,可对节点进行寻址。IP地址是在互联网上给主机编址的方式,为每个计算机分配一个逻辑地址,这样不但能够对计算机进行识别,还能进行信息共享。
-
主机地址:【张三】【李四】这些学生姓名就相当于主机地址,确认好班级后,就可以分配学生
IP地址是TCP/IP网络中用来唯一标识每台主机或设备的地址,IP地址由32位(共四个八位组)的二进制组成。IP地址分为两部分,左边网络编号部分用来标识主机所在的网络;右边部分用来标识主机本身,这部分称为主机地址。连接到同一网络的主机必须拥有相同的网络编号。
-
IP地址:IP地址等于网络地址+主机地址,即【高三一班张三】
IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽的差异。IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。
-
子网掩码:但只知道IP地址是无法反推出网络地址(班级名称)的,所以必须指定哪几位为网络地址。用【高三一班张三】这个ip来举例,前4个字表示网络地址,我们就可以写为高三一班张三/4,用于表示前4位为网络地址。在计算机中我们一般用前24位表示网络地址,例如:192.168.1.1/24。
子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分
-
mac地址:一个班级里有可能有多个重名的人,所以需要身份证(唯一标识)来确定具体的学生,身份证就相当于计算机的mac地址,即网卡地址
MAC地址(**英语:Media Access Control Address)**网络中每台设备都有一个唯一的网络标识,这个地址叫MAC地址或网卡地址,是一个用来确认网络设备位置的位址。在OSI模型中,工作在第二层数据链路层
-
网关:如果不在一个班级,就需要出门寻找,这个门就是网关
网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。
-
交换机
交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域
-
路由
路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程,路由工作在OSI参考模型第三层——网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。虽然路由器可以支持多种协议(如TCP/IP、IPX/SPX、AppleTalk等协议),但是在我国绝大多数路由器运行TCP/IP协议。路由器根据收到数据包中的网络层地址以及路由器内部维护的路由表决定输出端口以及下一跳地址,并且重写链路层数据包头实现转发数据包。路由器通过动态维护路由表来反映当前的网络拓扑,并通过网络上其他路由器交换路由和链路信息来维护路由表。
1.同一个子网中两台计算机通信
进入正题之前,我们先思考几个问题
怎么判断两台设备是否属于同一个子网?
只要网络地址相同,就可以认为是在同一个子网
怎么计算网络地址呢?
假如以 IP 为192.168.102.3 ,子网掩码为:255.255.255.0为例
第一步:先将ip和子网掩码都转换成二进制(除2取余,逆序排列),即如下所示
192.168.1.10 =
11000000.10101000.01100110.00000011
255.255.255.0 =
11111111.11111111.11111111.00000000
第二步:进行“与”运算
11000000.10101000.01100110.00000011 &
11111111.11111111.11111111.00000000 =
11000000.10101000.01100110.00000000
第三步:将结果转化成十进制,即得出网络地址为:192.168.102.0
回归正题,此时两台设备(A和D)想要通信。
首先,需要判断A和D的网络地址是否相同
A(192.168.1.10/24)和 D(192.168.1.13/24)的网络地址是一样的(都是192.168.1.0),代表它们是同一个子网
第二步,已知A和D处于同一个子网,A知道D的IP,但是不知道这个IP具体是哪一台设备,所以A在子网里发了一个广播包:IP地址为192.168.1.13的机器是谁的啊?
由于是一个广播消息,所以B,C,D都收到了这个广播包,拿到这个包之后,会将包中的IP与自身的IP做一个对比,B,C发现与自身不同,所以就不响应,但是在自己的机器中默默更新192.168.1.10对应的mac地址为macA(A的mac地址)。
但D发现与自己的IP相同,于是它使用单播的方式,把自己的IP和mac地址发给A,同时在自己的机器中更新192.168.1.10对应的mac地址为macA(A的mac地址)。
A收到后,就在自己的机器中更新192.168.1.13对应的mac地址为macd(D的mac地址)
这个过程也被称为ARP(Address Resolution Protocol),即根据 IP 获取 mac 地址的一个协议
另外在此过程中,如果交换机是中间设备,发现A的数据流经端口1,D的响应数据时从端口4流出,经过此次ARP,所以它就在“交换表”中记录下
端口 | mac地址 |
---|---|
1 | macA |
4 | macD |
由于此时A和D都已经知道了IP所对应的mac地址,所以A再次发给D数据时,此数据包会带上四项内容:源IP(A的IP)和源mac(A的mac),目标IP(D的IP)和目标mac(D的mac)。
交换机收到数据后,看到上面附带的“目标mac”,发现自己的“交换表”里有存储对应的端口信息,就直接把数据包从端口4丢给D。
以此可以看出,交换机是工作在“数据链路层”的,因为它记录了mac地址和端口的关系,不涉及到IP
2.不属于同一个子网,两台计算机进行通信
2.1不属于同一个子网,但是属于同一片私网
回顾一下,上面环节所说,判断两台设备是否属于同一片子网,是通过判断网络地址是否相同,若是相同,则是属于同一子网。反之,则属于不同子网。
涉及两个不同子网之间的设备想要通信,必须要先通过网关,然后再进行寻址。(示例:两个班级的同学想要通信,必须要先走出教室门,这个门在网络中被称为网关。一般是由路由器充当,网关地址是子网的第一个主机地址,假设网络地址为 192.168.1.0/24,则默认网关 IP 为 192.168.1.1,子网中的每台主机都会有一个默认网关)
继续拿A和D来举例:
1.首先计算A和D是否属于同一子网,A所在的子网是192.168.1.1/24,即它的网络地址为 192.168.1.0,子网掩码为 255.255.255.0,将 D的子网掩码与 D 的 IP 地址 192.168.2.13 相与得到 192.168.2.0,说明A 与 D 不在同一个子网
2.于是 A 要把包发到网关,即 192.168.1.1,一开始 A 也不知道网关的 mac 地址,于是 A 首先发了个 ARP 包获取网关的 mac 地址(即mac网关),然后将以下包发给网关
源mac:macA | 源ip:192.168.1.10 |
---|---|
目标mac:mac网关r1 | 目标IP:192.168.2.13 |
注意:此时发给网关的包,目标mac是网关的mac,但目标IP是D的IP,并不是网关的IP。例如,送一件快递,虽然快递会在各个网点来回流转,但是起始地点和目标地点不会变。
3.路由器收到上面这个包后,会取出它的目标IP,然后查一下路由表。
目的网络IP地址 | 子网掩码 | 下一跳IP地址 | 接口 |
---|---|---|---|
192.168.2.0 | 255.255.255.0 | direct | E1 |
192.168.1.0 | 255.255.255.0 | direct | L0 |
122.122.2.0 | 255.255.255.128 | 122.122.3.1 | L1 |
路由表大致有四项基本数据,【目的网络IP地址】【子网掩码】【下一跳IP地址】【接口】。
处理逻辑如下所示:
①因为目标IP(D的IP:192.168.2.13)的前三位是192,查一下路由表,所以我们将该IP与子网掩码255.255.255.0(路由表中的符合条件的子网掩码)进行“与”计算,得出目的网络IP地址为192.168.2.0
②通过路由表中数据对比,即可确认下一跳是通过E1接口直接前往
4.此时路由器不知道192.168.2.13的mac地址,于是它也用ARP先获取此IP对应的mac地址,得到macD
5.然后将数据包的目标mac地址改为D的mac地址进行发送,此时源mac地址也要修改为路由器接口对应的mac地址。
源mac:mac网关r2 | 源ip:192.168.1.10 |
---|---|
目标mac:macD | 目标IP:192.168.2.13 |
在转发过程中可以看到:源 IP,目标 IP 不会变,而源 mac和目标 mac 地址会不断变化
6.最终交换机再把上述的包转发给D即完成完成
所以,大家也就明白了路由器为啥属于
三层设备
,三层是网络层,负责根据 IP 寻址。
路由器的一个端口就是一个广播域,同一台路由器不同端口对应的网段(网络地址)是不同的
总结:整体来看,上述的传输过程就是,A先把包给到子网网关,子网网关再通过路由器找到D所在的子网网关,D的子网网关再把包给D。
2.2不属于同一个子网,涉及公网间的通信
说完上面的不属于同一个子网,却属于同一片私网,接下来我们唠唠不属于同一个子网,也不属于同一片私网,即涉及公网之间的通信。
在此之前,再给大家先解释几个概念:
私网
私网也称内网,也叫局域网,企业或者家庭用户搭建的网络为私网,比如公司里的很多台计算机就组成了一个子网,它们内部之间是可以互相通信的,而且它们组成的子网地址是私有地址,不同的子网私有地址是可以相同的,但如果你要访问“百度”那就要出这个子网,到公网上去找,公网才是我们所说的广义上的的互联网。
NAT协议
私网中的主机如果想要访问公网,必须将私网中的 IP 转为公网上的 IP,我们把这个过程称为 NAT(Network Address Translation,网络地址转换
此时肯定就有人问了,为什么要将私网IP转为公网IP?
我们来举个例子,在陕西秦岭中学一班,有张三、李四、隔壁老王几位同学。
但此时隔壁老王要给日本的尾田荣一郎发信息催更,尾田收到信息后,看到发送人是隔壁老王,一脸懵逼,世界上隔壁老王太多了,他不晓得该回给哪个隔壁老王。
所以,为了杜绝这种情况,隔壁老王发信息后,学校就自动把隔壁老王转换成”陕西秦岭中学“,同时把这个信息转换先记录下来。
然后把信息再转给尾田,尾田一看,陕西秦岭中学世界上就一个,他就可以回信息给学校了。
收到回复的信息后,学校再把这个信息转给隔壁老王。
这个例子中,隔壁老王就是私网IP,学校就是NAT网关,陕西秦岭中学就是公网IP(具备唯一性),尾田荣一郎就是外网IP。由此可见NAT的重要性。
特别注意:学校只负责地址转换,并不负责寻址等操作。
NAT网络地址转换主要分两种:SNAT和DNAT
snat是源地址转换(把隔壁老王变成秦岭中学),dnat是目标地址转换(把秦岭中学变为隔壁老王)。都是地址转换的功能,将私有地址转换为公网地址。
基础流程了解后,我们再稍微深入一些。
刚才我们说,隔壁老王发信息在学校是由记录的,后续尾田回信后,学校也是根据这个记录,给到了隔壁老王。
学校这块的记录,到底记了啥?
上面也说了,学校只负责地址转换,但是单纯的把名字和学校名称做一个映射关系,这样肯定是不够的。
例如张三也给尾田发消息了、隔壁老王给女朋友也发信息了、隔壁老王预约洗脚城……
上述的事项,如果在学校的记录为:
隔壁老王-----陕西秦岭中学
张三-----陕西秦岭中学
隔壁老王-----陕西秦岭中学
隔壁老王-----陕西秦岭中学
此时,尾田回消息到学校,学校一查表,直接懵逼。所以我们就会发现只有名称映射是无法满足要求的。
在网络世界,进程是通过IP地址+端口号来表示的,
于是,学校将记录调整为:
隔壁老王:10000-----陕西秦岭中学:20001
张三:10000-----陕西秦岭中学:20002
隔壁老王:10001-----陕西秦岭中学:20003
隔壁老王:10002-----陕西秦岭中学:20004
这样的话,尾田回消息的对象是“陕西秦岭中学:20001”,通过这个进程,就知道回信要给隔壁老王。
回归整体,我们拿上面的例子来看下实际场景的数据访问(隔壁老王是A、秦岭中学是nat、尾田就是D)
我们分别在1、2和3、4环节,看看IP变化。
SNAT:源地址转换
节点1:192.168.2.10:1234——>6.6.6.6:80
节点2:4.4.4.4:345——>6.6.6.6:80
DNAT:目标地址转换
节点3:6.6.6.6:80——>4.4.4.4:345
节点4:6.6.6.6:80——>192.168.2.10:1234
通俗的说,snat是作为客户端向外访问外网服务器,dnat是作为服务器端为外网提供访问服务;也可以理解为snat是修改网络包源ip地址的。而dnat是修改网络包目的ip地址的。
3.总结:
同一子网,使用ARP协议(IP获取mac)寻址,在数据链路层进行通信
同一公网,不同子网,通过网关进入网络层,找到另一个子网的网关,然后再下沉至数据链路层进行通信
不同公网,私网地址先通过nat转换成公网地址,然后再通过公网地址,访问另一公网