计算机网络从 IP 到 IP 的通信是怎么完成的?
开发离不开计算机网络,计算机网络很重要,但不是所有的网络知识对软件开发都是有用的。
我们知道,网络是分层的,OSI 体系中分了 7 层,但实际上使用的 TCP/IP 体系中分了 4 层,学习的时候为了方便,我们还是把物理层、数据链路层分开学的,所以是 5 层。
开发时我们会用 IP、TCP、HTTP 等协议来完成计算机之间的通信,网页运行时还会涉及到 DNS 等协议,这些协议都是在网络层之上的,也就是基于 IP 到 IP 的传输来完成各种协议的数据通信。
那之下的部分呢?IP 到 IP 的通信是如何实现的?
这就涉及到物理层、数据链路层还有网络层的知识了,这些知识对实际的开发没啥用,因为代码里已经默认了 IP 和 IP 之间是可以通信的,但是了解这些可以让我们对网络有一个全面的理解。这部分涉及到网络硬件、涉及到通信原理,还是挺有意思的。
这篇文章就浅谈下 IP 和 IP 之间的通信的知识。
不同类型的网络
把不同的计算机连接起来,可以做数据通信,可以共享软件、硬件,这就叫做计算机网络。
这种连接方式有很多种,自然也就有不同的网络。比如拨号上网,是利用电话通信的网络来传输数据的,就像打电话一样,所以叫拨号,只不过传输的数据不是通话数据。比如卫星上网,是利用卫星信号来传输数据,这也是一种网络。
这两种都是用的现有的网络来实现计算机通信。而我们自己组建的网络都是用网线连接的,这种是最常见的网络。
比如这样:
这种通过一根线把所有的计算机连接起来的网络连接方式叫做以太网。
在讲以太网之前,不知道大家是否已经感受到了网络分层的好处:
不管是利用电信网络的拨号上网,还是利用卫星通信的卫星上网,或者是用网线连接起来的以太网,这些不同结构的网络都能很自然的融合在一起,就是因为做了很好的分层,只要实现了 IP 协议,那么不管网络是怎么实现的,都能实现更上层协议的通信。
这就像软件开发领域的面向接口编程的思想,只要你能实现 IP 到 IP 的通信,不管你是怎么传输的数据,都可以。
电信和卫星的网络不咋用关注,我们还是继续讲以太网:
多台计算机已经用网线连接起来了,那怎么通信呢?
直接通过这条网线传递数据就行,只不过现在是一个发其余的都能接收到,要让目标计算机能接收,那就得标识下目的地址是啥,所以以太网的数据帧格式是这样的:
除了数据外,额外加上了目的地址、原地址等信息。
这样每台计算机接收到网络传过来的数据之后,判断下是否目的地址是自己,是就接收,否则丢弃。这样就实现了网络通信。
这就是一个网络了?就这么简单?
这确实是一个小型网络,但还不完善。如果多台计算机同时发消息怎么办,数据不就混在一块了?
所以要做是否冲突的检测,现在以太网用的方式是这样:想要通过网络发消息时,先检测下网络中有没有电信号,没有的话就发,有的话就等待 1.x 秒,x 是随机的,如果到了时间还有冲突,那就等待 2.x 秒、4.x 秒、8.x 秒,通过这样的方式来避免冲突,实现准确的通信,这叫做“指数退避”。
这样确实不会冲突了,但是还有问题,如果计算机连了很多,虽然能准确的通信,但时不时就冲突的话效率也太低了。
能不能减少冲突呢?
连在一起的以太网的计算机因为是广播通信的,所以可能可能冲突,这叫做一个“冲突域”。如果能把大的冲突域给拆小,那不就能减少冲突的概率了?
这就是交换机做的事情了:
几台电脑之间加一个交换机来隔开,这样传输消息的时候,如果是同一个小网段内的通信,会直接传给目标计算机,不会传到其他网段里去,本网段没有该 mac 地址的时候才传到其他网段,这样就把大的网络分成了一个个小的网段,减少了冲突的概率,提高了网络传输效率,这就是交换机的意义。
这样,我们就组建了一个以太网。
互联网
现在一个个的网络都是分散的,不管是以太网,还是用电信网络连接的网络,或者是卫星连接的网络,那自然有需求把这些分散的网络给连接起来,这就是互联网,也就是把网络连接起来的网络。
互联网也有很多,比如军队的各种网络会建立一个互联网,教育的各种网络会建立互联网,互联网和互联网之间还可以连接,最大的互联网就是因特网 internet,大到全世界的很多网络都会连入的那种。但也有的互联网是不接入 internet 的,比如军用的互联网。
那这些网络之间是怎么标识和连接的呢?
标识网络自然就需要编号,并且网络内的主机也需要编号,也就是需要指定网络号 + 主机号,这就是 IP 地址。
IP 地址最开始是 32 位的,叫做 IPv4(后来扩充成了 128 位的,叫做 IPv6)。
比如这样就是一个 IPv4 的地址:
11010010010010011000110000000100
为了好记,我们把它分为了四段,每段 8 位,就成了这样:
210.73.140.2
这分为 4 段的 32 位地址里有网络号也有主机号。如果把第一段当作网络号,那剩下的三段就是主机号,可以标识 1600 多万台计算机,如果把前两段当作网络号,那可以标识 6 万多台计算机,如果把前三段当作网络号,那只有最后一段用于标识主机,可以标识 254 台计算机。这样就分为了 ABC 三类网络。
讲完了 IP 地址,再回来讲最大的互联网 internet。
internet 是连接全球很多网络的互联网,那自然有个主干网,然后下面接入各个国家的网络。每个国家都有专门的接入 internet 的网络提供商(ISP internet service provider),比如中国有联通、移动、铁通等 ISP,由他们接入 internet,我们再接入他们的网络。
那网络之间是怎么连接的呢?
就是通过路由器,路由器连接多个网络,负责根据 IP 地址选择把数据传到某个网络 。
很多同学分不清路由器和交换机的区别,其实很好区分:交换机是网络内部隔离冲突域、提高网络效率用的,根据 mac 地址转发消息。路由器是负责在不同的网络之间转发数据,根据 IP 地址确定网络和主机然后转发。
IP 地址里记录了网络号和主机号,所以根据网络号就能确定是哪个网络,那怎么根据主机号确定哪台主机呢?
在这个网络里广播一次不就行了?把 IP 地址传递给网络的每一台主机,如果是自己的,那就返回自己的 mac 地址,这样路由器就知道该把消息传给谁了。这种从 IP 到 mac 地址的查询过程叫做 ARP(Address Resolution Protocol 地址解析)协议。
至此,我们就完成了从 IP 到 IP 的通信,再上面的协议我们就比较熟了,也就是 TCP、HTTP 这些,这些是我们软件开发整天用的协议。
总结
计算机网络是分层的,OSI 体系结构分了 7 层,实际用的 TCP/IP 体系结构分了 4 层,为了学习方便我们还是作为 5 层来看。
分层的好处就是每一层都可以灵活的替换实现方案,比如只要你实现了 IP 到 IP 的通信,不管你是卫星连接的网络、电信连接的网络还是以太网,都可以,对上层的各种协议没影响。
卫星、电话网络等都是已有的网络,我们自己组建的网络一般都是按照以太网的方式,也就是一根网线连接所有计算机的方式,叫做总线式。
以太网内是广播通信的,为了避免冲突,会通过指数退避的方式来发消息,但这会降低传输效率,所以引入了交换机来隔离冲突域,也就把网络分成了不同的网段,交换机遇到同一网段的通信是不会传递到其他网段的,这样就减少了冲突的概率。
网络和网络之间连接起来就叫做互联网,互联网有很多种,全球最大的互联网是 internet,但也不是所有的互联网都在 internet 里,比如军用互联网就不会连入 internet。
internet 有主干网来连接各个国家和地区的网络,每个国家都有负责接入 internet 的互联网服务提供商 ISP,比如中国的联通、移动、铁通等运营商。
网络的标识是通过 IP,也就是网络号 + 主机号构成,然后由路由器负责通过 IP 来做网络之间的数据转发。
路由器实现转发要先根据 IP 种的主机号来查出 mac 地址,对应的查询协议叫做 ARP 协议,也是通过广播的方式实现的。
这样就实现了 internet 上任意两台主机的 IP 到 IP 的通信。
我们平时软件开发时用的 IP、TCP、HTTP、DNS 等协议,都是在这些基础之上实现的。网络层之下的知识,确实对我们开发没啥帮助,但了解下还是挺有意思的。
作者:zxg_神说要有光链接:https://juejin.cn/post/7074546627825893383
15图利用TCPIP参考模型详解PC访问WEB服务器的数据通信过程
当今IP网络数据通信的基本就是TCP/IP参考模型,今天就借助PC访问WEB服务器的数据通信来深度理解下TCP/IP参考模型。
TCP/IP参考模型
计算机网络 :简单的说,计算机网络就是由分布在世界各地的计算机通过交换机、路由器等网络设备使用传输介质(光纤等)连接而成的一个大的网络,用于提供数据通信、资源共享等服务。
TCP/IP模型 是当今IP网络的基础,它将数据通信的任务划分成不同的功能层次(Layer),每一个层次有其所定义的功能,以及对应的协议。
举个例子,一家公司要想完成某项业务,需要各个部门相互协同工作才能完成,部门与部门之间既相互独立,但是又需要相互配合,可以借用这种思路来理解TCP/IP参考模型。
分层参考模型的设计是非常经典的理念 :
1) 层次化的模型设计将网络的通信过程划分为更小、更简单的部件,因此有助于各个部件的独立开发、设计和故障排除;
2) 层与层之间相互独立,又互相依赖,每一层都有该层的功能、以及定义的协议标准。层与层之间相互配合,共同完成数据通信的过程;
3) 通过组件的标准化,允许多个供应商进行开发;
4) 通过定义在模型的每一层实现什么功能,鼓励产业的标准化;
5) 允许各种类型的网络硬件和软件相互通信。
PC访问WEB服务器的数据通信过程
如上图的网络拓扑,我们来详细讲解下PC访问web server的数据通信过程,PC和server通信经过两台路由器R1和R2,那么PC的数据是如果经过路由器R1,R2到达server的呢?(在这里我们利用PC访问WEB服务器的通信过程重点讲解TCP/IP参考模型)整个的宏观通信过程如下图所示。
下面我们来详细分析下(微观层面):
1. 终端PC用户在谷歌浏览器中输入URL,访问Server的WEB服务,PC用户的这次操作将触发HTTP应用为用户构造一个应用数据(如下图所示)。
这个数据最终要传递到Server并“递交”到Server的HTTP应用来处理,但是HTTP不关心数据怎么传、怎么寻址、怎么做差错校验等等,这些事情交由专门的层次来完成。
2. 大家都知道HTTP应用是基于TCP协议的,因此这个HTTP应用数据交由TCP/IP参考模型中传输层(第4层)进一步处理。
在该层,上层HTTP应用的数据被封装一个TCP的头部(可以简单的理解为套了一个TCP的信封),在TCP头部中我们重点关注两个字段(信封上写的东西),一个是源端口号,另一个是目的端口号,源端口号为随机产生的端口号(是PC本地设置的、专门用于本次会话的端口),目的端口号为80(HTTP服务对应的默认端口号是80),如下图所示。然后这个数据段(Segment)被交给下一个层处理。
3. 下一层是网络层(第3层),处于这个层的IP协议为这个上层下来的数据封装一个IP头部(在之前的基础上又套了一个信封,如下图所示),以便该数据能够在IP网络中被网络设备从源转发(路由)到目的地。
在IP头当中我们重点关注源IP地址、目的IP地址、协议号这三个字段。
其中源地址填写的是PC自己的IP地址192.168.1.1,目的地址存放的是Server的IP地址192.168.2.1,而协议号字段则存放的是值6,这个值是一个众所周知(Well-Known),也就是行业约定的值,该值对应上层协议类型TCP,表示这个IP头后面封装的上层协议为TCP(形象点的描述是,协议字段用于表示这个IP信封里装的是一个TCP的内容)。搞定之后,这个数据被交给下一层处理。
4. 为了让这个IP数据包能够在链路上传输(从链路的一个节点传到另一节点),还要给数据包封装上一个数据链路层(第2层)的头部,以便该数据能够在链路上被顺利传输到对端。
由于PC与R1之间为以太网链路,因此上层来的IP数据包被封装一个以太网的数据帧头(再增加一个信封)。
这个帧头中写入的源MAC地址为PC的网卡MAC,那么目的MAC呢?
PC知道,数据的目的地是192.168.2.1这个IP,而本机IP是192.168.1.1/24,显然,目的地与自己并不在同一个IP网段,因此需要求助于自己的默认网关,让网关来帮助自己将数据包转发出去。
那首先得把数据转发到网关吧?因此目的MAC地址填写的就是网关192.168.1.254对应的MAC地址。但是初始情况下,PC可能并不知晓192.168.1.254对应的MAC地址,所以,它会发送一个ARP广播去请求192.168.1.254的MAC,R1的GE0/0/0口会收到这个ARP请求并且回送ARP响应报文。如此一来PC就知道了网关的MAC,它将网关MAC 0018-0011-0001填写在以太网数据帧头部的目的MAC地址字段中。
另外,以太网数据帧头的类型字段写上0x0800这个值,表示这个数据帧头后面封装的是一个IP包。费了好大劲儿,这个数据帧(Frame)终于搞定了,如下图所示:
5. 事实上在物理链路中传输的是比特(bit)流,最终这个以太网数据帧变成了一堆的10101001 从传输介质中传到了路由器R1上,如下图所示:
6. R1在收到一串的比特流01010后,先将他们还原成数据帧(如下图所示)。
之后会检查一下数据帧在传输过程中是否有损坏,如果没有损坏,那么就解析数据帧头部中的目的MAC地址,确认目的MAC地址是不是自己接口GE0/0/0的MAC,如果是就接收并且继续处理,如果不是就丢弃。
在这里可以看到目的MAC就是接口GE0/0/0的MAC,于是继续查看数据帧头部的类型字段,发现是0x0800,从而知道里头装的是一个IP包,接着它将以太网帧头剥去,或者说解封装,然后将里面的数据移交给上层的IP协议继续处理。
7. 接着由R1的IP协议栈接着处理这个报文。它会先校验一下数据在传输过程中IP报文有没有受损,如果没有,它就查看IP头中的目的IP地址(如下图所示)。
结果发现目的IP地址为192.168.2.1,并不是自己的IP地址——原来这个数据包是发给别人的,于是它开始拿着目的地址192.168.2.1到自己的路由表里去查询,看看有没有到192.168.2.1这个目的地的路由,结果发现有,并且这个路由条目指示它把数据包从从GE0/0/1口送出去,并交给192.168.12.2这个下一跳IP地址。
于是它不再继续拆开IP头看里头的东东了,而是将IP数据包往下交还给数据链路层去处理。
8. 接着由R1的数据链路层继续处理上层下来的IP包,它为这个IP包封装上一个新的以太网帧头,帧头中源MAC地址为R1的GE0/0/1口的MAC:0000-0000-0002,目的MAC是这个数据包即将交给的下一跳路由器192.168.12.2对应的MAC。
当然初始情况下R1是不知道这个MAC的,因此又是一轮ARP请求广播及回应过程并最终拿到这个MAC:0000-0000-0003,于是它将这个值填写在目的MAC字段中。完成了新的数据帧封装后(如下图所示),R1把这个数据帧变成1010101…通过电气信号传递给R2。
9. R2收到这些比特流10101…后,先将其还原成帧,然后查看帧头,发现目的MAC填写的就是自己接口的MAC,并且帧头中类型字段写的是0x0800(指示上层协议是IP,也就是数据帧头内封装的是一个IP包),于是将数据帧头剥去,将里头的IP数据包交给IP协议去处理。
10. IP协议在处理过程中发现,目的IP地址并非本路由器的IP(如下图所示),于是它知道这个数据包不是发送给自己的,它拿着目的IP地址192.168.2.1在自己路由表中查询,结果发现,R2的GE0/0/1口就连接着192.168.2.0/24网络,于是它将这个IP包交还给下层协议去处理。
11. R2继续处理为这个IP包封装一个新的数据帧头部,帧头中,源MAC为R2的GE0/0/1口的MAC,目的MAC为192.168.2.1这个IP地址对应的MAC,如果ARP表里有192.168.2.1对应的MAC,则直接将MAC地址写入目的MAC中,如果没有,则发ARP请求报文去请求该地址。另外类型字段依然填写0x0800。最终,R2将这个数据帧传给了Server,如下图所示:
12.终于数据帧到达了Server(如下图所示)。Server首先将这些比特流还原成帧,然后做校验看看帧是否损坏,如果没有,则查看数据帧的目的MAC,结果发现就是自己的网卡MAC,于是查看类型字段,发现是0x0800,知道这里头装的是一个IP包,于是将帧头剥去,将内层的IP数据包交给IP协议去处理。
IP协议层收到这个数据包之后,首先查看IP包是否损坏,如果没有,则查看目的IP地址,发现目的IP地址是192.168.2.1——正是自己的网卡IP,于是它知道,这个IP包是发给自己的,因此继续查看IP包头中的协议字段,发现协议字段填写的是6这个值,原来这个IP包头后面封装的是一个TCP的数据,于是将IP包头剥去,将里头的TCP数据交给上层的TCP协议处理。
而TCP在处理这个数据的时候,查看TCP头部的目的端口号,发现目的端口号是80,而Server本地的TCP 80端口是开放的,开放给HTTP应用了,因此它将TCP头部剥去,将里头的载荷交给HTTP应用。终于,从PC发送出来的HTTP应用数据到达了目的地——Server的HTTP应用的手中。
---END---
相关问答
网络 技术和 数据通信 的区别?数据通信工程师是从事电信网(ATM)的维护;参与和指导远端节点设备的安装调试与技术指导;负责编制相关技术方案和制订维护规范。网络工程师是通过学习和训练...
电脑是通过怎样的 网络 来实现 数据通信 业务 - 183****3985 的...数据通信是依照一定的通信协议,利用数据传输技术在两个终端之间传递数据信息的一种通信方式和通信业务,它可实现计算机和计算机、计算机和终端以及...
两个三菱plc怎么连接 通信 设置?两个三菱plc怎么连接通信设置拿到通信手册我们发现两个三菱plc之间的通信方式有许多中如CC-LINK、N:N网络、并联连接、计算机链接、MODBUS通信以及以太网通信。...
plc如何通过 网络 进行 数据 交换?协议网关建立和PLC通讯后,会在自己的处理器内部将变量数据进行处理,形成网络通讯协议,再发4G网络发送给云服务器,或者接收云服务器的命令,在自己处理器内部...
数据通信 难学吗如果是兴趣浓厚,理工科能力强,当然可以学。如果是被调剂或者纯粹因为好找工作工资高,但是学习能力不太行,兴趣也不浓厚的朋友,别学了吧还是。数据通信真的...
1.在20世纪50年代,()和()技术的互相结合,为计算机 网络 的产生...[最佳回答]计算机技术与通信技术
网络与数据通信 工程师..._通信工程师_帮考网网络与数据通信工程师是负责设计、建设、维护和管理计算机网络和数据通信系统的专业人员。他们需要具备深入的网络技术知识、熟练的网络设备操作技...
电信手机卡中上网费和 数据 业务通讯费分别指的是什么?电信手机卡中的上网费和数据业务通讯费指的是使用电信手机卡进行网络连接的费用。上网费指的是用户在通过手机卡进行上网时,使用电信网络进行数据传输所产生...
上网及 数据通信 费必须缴吗?根据当地的法律和规定,上网及数据通信费可能是必须缴纳的。这些费用通常用于维护和改善通信基础设施,确保网络的正常运行。无论是移动网络还是宽带网络,运营商...
什么是手机上网 通信费 ? - 懂得就是你用手机访问internet产生的费用当手机进入网站联网后产生的数据流量费用,