网络通信基础

最近在设计开发一个智能视觉检测系统,涉及到一些通信知识,加上之前学习了解的内容,顺手整理一下。

1. 网络数据封包过程

网络通信离不开各种各样的协议,不然通信各端就得懵圈。网络协议简单理解就是计算机之间通信的数据格式。可以通过网络分层模型来理解网络的数据格式和分包过程。

应用层:应用层的数据是一个个大小有明确限制的数据包,可以理解为要寄送的信件。

传输层:应用层的数据包,加上一个TCP头,交给传输层传输,这个TCP头可以类比给信件套上信封,并写好收发单位的门牌号(端口号)。传输层是为了解决传输可靠性问题,它有两套协议,TCP和UDP。

网络层:在传输层数据的基础上,就像再加一层信封,写上收发单位的地址,这个信封就是IP头,地址就是接收双方的IP地址,即源IP地址和目标IP地址。有了IP地址,这包数据在WAN上传输,就知道自己的目的地了。IP实现寻址和分段,除了路由功能,IP还提供分包功能,如果有些网络内只能传送小数据包,IP可以将数据包重新组装,并在报头域内注明。IP不负责可靠性和流控制。

数据链路层:数据链路层的网络协议比较多样化。局域网(LAN)目前最流行的是以太网(Ethernet)协议,广域网(WAN)常见的是HDLC、PPP、Frame-Relay等网络协议。

物理层:0101比特流在通信介质上的传输,分为点对点传输和广播传输。

2. 常用的网络协议

说网络协议之前,先说一下大家都很熟悉的三种网络通信地址。

MAC地址:Ethernet协议用的是MAC地址,一台计算机有一个或多个网卡,每个网卡会有自己的唯一标识,即MAC地址。

IP地址:IP地址决定了网络路由怎么走,信息如何达到你的计算机网卡。IP地址发展了两代,分别是IPv4和IPv6,IPv4的地址空间太小,只有40多亿个地址,因此升级到了IPv6。

域名:由于IP地址并不容易记忆,因此有了域名,比如我们用www.baidu.com来表示百度的地址。

有了以上三种地址,再来说说相关的网络协议:


DNS(Domain Name System,域名系统):该协议就像是个地址簿,负责域名->IP地址的查询。

DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),主要负责计算机接入网络时的初始化。计算机最初只有网卡的MAC地址,通过DHCP可以给它分配IP地址,并得到默认网关地址和DNS服务器的地址,有了这些东西,计算机就可以和外界进行通讯了。

ICMP(Internet Control Message Protocol,互联网控制报文协议),它能够检测网路的连线状况,以保证连线的有效性。基于这个协议实现的常用程序有ping和traceroute。

IGMP(Internet Group Management Protocol,互联网组管理协议),负责IP组播成员管理。

ARP(Address Resolution Protocol,地址解析协议),服务于现在局域网中最流行的Ethernet协议。它负责解析远程主机IP地址对应的MAC地址。由于通常应用程序和目标计算机进行网络通讯时,提供的都是域名或IP地址,但对以太网来说,想要进行数据通信,需要知道对方的MAC地址。

RARP(Reverse Address Resolution Protocol,反向地址转换协议),它和ARP协议相反,负责MAC地址到IP地址的转换。目前该协议已被DHCP协议所取代,基本用不到了。

3. 数据传输过程

基本的数据传输过程图示如下:

上图可以简单地理解为,源主机和目的主机之间,通过若干路由器和交换机相连。那么对于LAN和WAN,数据传输过程有什么不同呢?分三种情况来介绍。

3.1 源主机和目的主机都在局域网内,通过交换机连接,采用常用的Ethernet协议

我们前面说过,Ethernet通过Mac地址直接通信。但是在通信最开始的时候,源主机只有目的主机的IP地址(私有IP地址,后面会解释),但没有Mac地址,因此源主机会首先发起一个ARP请求去获得目标IP对应的MAC地址。源主机会缓存这个对应关系,下次继续给相同IP发消息的时候,就不需要重新发起ARP请求了。
无论是ARP请求还是普通数据包,都会先到达交换机。ARP是一个广播请求,交换机会将该ARP请求转发给所有的其他主机,目标主机收到该请求后,返回自己的MAC地址。有了目的主机的MAC地址后,源主机就可以通过交换机向目标主机发送数据包了。

交换机的工作过程如下:

(1) 收到某端口A,MAC地址为X的计算机发给MAC地址为Y的计算机的数据包,交换机记录下MAC地址X在端口A,该过程称为学习(Learning)。

(2) 交换机还不知道MAC地址Y在哪个端口上,于是向除了A以外所有的端口转发该数据包,这个过程称为泛洪(Flooding)。

(3) MAC地址为Y的计算机收到该数据包,向MAC地址X发出确认包。交换机收到该确认包后,记录下MAC地址Y所在的端口。

(4) 交换机向MAC地址X转发确认包,这一步称为转发(Forwarding)。

(5) 交换机收到一个数据包,查表后发现该数据包的来源地址与目的地址属于同一个端口,交换机将不处理该数据包。这个过程称为内过滤(Filtering)。

(6) 交换机内部MAC地址->端口的映射表,每条记录都使用时间戳记录最后一次访问的时间,访问时间早于某个阈值的记录将被清除。这个过程称为老化(Aging)。

3.2 源主机和目的主机都有公网IP地址,经过若干交换机和路由器相连

从上面数据传输示意图可以看出,路由器和交换机不太一样,交换机只需要知道MAC地址和端口号,但路由器需要知道源主机和目的主机的IP地址。路由器工作在网络层。

路由器可以拥有一部分交换机的能力,比如,如果发现请求是局域网内的话,也可以引入类似交换机那样的基于MAC地址的映射表实现高速通讯。但路由器因为涉及“最佳路由路径”的问题,总体上考虑的问题比交换机要复杂的多。路由器除了解决路由问题,往往还需要解决异构网络的封包转换问题。作为局域网的接入方,它可能走的是固网或WiFi网络;作为Internet的接入方,它可能走的是光纤宽带。所以路由器需要把局域网的数据链路层的封包解开并重组,以适应广域网数据链路协议的需求。

两台拥有公网IP的主机通讯过程大体如下:

(1) 首先,源主机发送数据包,经由交换机(可选)到达本局域网的公网网关(路由器),该过程即局域网内部通信过程。

(2) 路由器收到数据包,发现目标主机是Internet上某个远端的目标主机,于是对数据包拆包重组,形成新的数据包。

(3) 根据自身的路由表,把这个新数据包层层转发,最后到达目标主机对应的公网网关(路由器)。

(4) (目标端)路由器发现是发给本局域网内的目标主机,于是再拆包重组,形成新的数据包。

(5) 新数据包转到局域网内,经由交换机(可选)最终到达目标主机。

3.3 源主机和目标主机至少有一方在局域网内且只有私有IP地址

首先说明一下私有IP地址。IPv4地址区间中有一些区段只用于局域网内的通讯,称为私有IP地址,这些区段包括:

10.0.0.0 - 10.255.255.255
172.16.0.0 - 172.31.255.255
192.168.0.0 - 192.168.255.255

只有私有IP而没有公网IP的主机,通常只能和局域网内的主机通讯,而无法和Internet上的其他主机相互通讯。但在我们的家庭中,往往是一个WiFi路由器连接公网,所有的家庭设备如手机、平板、网络电视,都以WiFi路由器为网关构成一个局域网,那这些设备是怎么上网的呢?

这就用到NAT(Network Address Translation,网络地址转换)技术。原理比较简单,假如源主机的IP和端口号是iAddr:port1,经过NAT网关后,NAT将源主机的IP地址换成自己的公网IP(eAddr),并随机配一个端口(port2),于是形成eAddr:port2,NAT网关再把该新的地址转发给iAddr:port1。即NAT网关临时建立了一个双向映射表:iAddr:port1 <=> eAddr:port2,这样,在该映射存续期间,eAddr:port2就变成了iAddr:port1的“替身”,这样,内网主机也就相当于拥有了公网IP,也就可以上网了。

除了作为公网网关的路由器,NAT网关也可以是局域网内任何一台有公网IP的主机。

发布了57 篇原创文章 · 获赞 58 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/DeliaPu/article/details/99974609