怎么样链接电脑(过年回去,终于给老人讲清楚两台电脑是如何通信的)
本文分享自华为云社区《两台计算机之间究竟是如何通信的?-云社区-华为云》,作者:龙哥手记。
计算机网络的知识点非常杂乱且琐碎,非常容易让人产生畏惧心理。其实计网通篇研究的核心就是不同计算机之间的通信过程,本文将从小白的角度,讲解两台计算机之间是如何精确的找到对方的位置并发送和接收消息的,以从宏观角度把握计算机网络的体系结构。
1.五层协议参考模型
所谓通信协议就是通信双方都必须要遵守的通信规则。如果没有网络通信协议,计算机的数据将无法发送到网络上,更无法到达对方计算机,即使能够到达,对方也未必能读懂。有了通信协议,网络通信才能够发生。
一般我们用五层协议参考模型来进行计算机网络的学习:
应用层运输层网络层数据链路层物理层
上述各层的作用会在下文详细讲解,我们首先要明白为什么要分层:
协议的实现是很复杂的。因为协议要把人读得懂的数据,如网页、电子邮件等加工转化成可以在网络上传输的信号,需要进行的处理工作非常多。
两个系统中实体间的通信是一个十分复杂的过程。为了减少协议设计和调试过程的复杂性,网络协议通常都按结构化的层次方式来进行组织,每一层完成一定功能,每一层又都建立在它的下层之上。不同的网络协议,其层的数量、各层的名字、和功能不尽相同。
也就是说,每一层都是在下一层的基础上,通过层间接口向上一层提供一定的服务,而把“这种服务是如何实现的”细节对上层加以屏蔽。
那么,我们将一个大型网络体系分成了若干个层,各个层之间是如何进行通信的呢?
1)对等层之间通信(不同开放系统中的相同层次之间的通信,对等层实体之间的信息交换):OSI标准为每一层的通信都严格定义了协议数据单元PDU的格式。对等层之间的通信是目的,对等层实体的协作保证该层功能和服务的实现2)相邻层之间通信(相邻的上下层之间的通信,属于局部问题):相邻层之间的通信是手段,保证对等层实体之间的通信得以实施
假设网络协议分为若干层,那么A、B两节点通信,实际是节点A的第n层与节点B的第n层进行通信,故协议总是指某一层的协议,例如物理层协议、传输层协议、应用层协议。每一相邻层协议间有一接口,下层通过该接口向上一层提供服务。
2.物理层
两台计算机之间要进行通信,必然需要传输介质/物理媒介来连接两台计算机,这样,我们才能把数据传输过去。传输介质分为:
导向型传输介质:双绞线:适用于近距离同轴电缆(抗干扰性强):适用于远距离光纤:带宽远远大于其他传输媒体非导向型传输介质:无线电波微波红外线、激光
也就是说,物理层的作用就是实现计算机之间的数据传送,这个数据其实是比特流,物理层需要尽可能屏蔽掉具体传输介质和物理设备的差异,使其上面的数据链路层不必考虑网络的具体传输介质是什么,即实现比特流的透明传输。
3.数据链路层
物理层只是简单的把计算机连接起来并在上面传输比特流,它还是存在着很多问题的:
1)物理连接是有差错和不可靠的2)物理设备之间可能存在传输速度不匹配问题
也就是说仅仅靠物理层是无法保证数据传输的正确性的。
这样,数据链路层的主要作用就是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。在物理层提供服务的基础上,数据链路层还肩负着为网络层提供服务的责任,其最基本的服务是将来自网络层的IP数据报封装成帧,可靠的传输到相邻结点的目标网络层。
①封装成帧
首先了解一下为什么需要封装成帧:前面说了,物理层它只是简单的把计算机连接起来并在上面传输比特流(0、1序列),如果这些0,1组合的传送毫无规则的话,计算机是解读不了的。因此,我们需要制定一套规则来进行0、1的传送,让计算能够读懂这些序列。
封装成帧就是:发送端的数据链路层接收到上层网络层传过来的IP数据报后,在其前后部分添加首部、尾部,这样就构成了一个帧。接收端在收到物理层上交的比特流后,就能根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
把一台计算的的数据通过物理层和链路层发送给另一台计算机,究竟是谁发给谁的,计算机与计算机之间如何区分,你总得给他们一个唯一的标识吧?
于是,MAC地址出现了
②MAC地址
MAC地址就是链路层地址,长度为6字节(48位),**用于唯一标识网络适配器(网卡)。**计算机之间的数据传送,就是通过MAC地址来唯一寻找、传送的。
一台主机拥有多少个网络适配器就有多少个MAC地址。例如笔记本电脑普遍存在无线网络适配器和有线网络适配器,因此就有两个MAC地址。
那么,一台计算机它是如何知道另一台计算机的MAC地址的呢?这是网络层的ARP地址解析协议做的事情。
4.网络层
在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。
网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送。在发送数据时,网络层把运输层产生的报文段或用户数据报封装成分组和包进行传送。
在TCP/IP体系结构中,由于网络层使用IP协议,因此分组也叫IP数据报,简称数据报。
①IP协议
IP协议用于屏蔽下层物理网络的差异,为上层提供统一的IP数据报。
IP协议定义的地址,我们称之为IP地址。IP数据报中含有发/收方的IP地址。
IP协议提供无连接的、不可靠的、尽力的数据报投递服务
1)无连接的投递服务
发送端可于任何时候自由发送数据,而接收端永远不知道自己会在何时从哪里接收到数据。每个数据报独立处理和传输,一台主机发出的数据报序列,可能取不同的路径,甚至其中的一部分数据报会在传输过程中丢失;
2)不可靠的投递服务
IP协议本身不保证数据报投递的结果。在传输的过程中,数据报可能会丢失、重复、延迟和乱序等,IP协议不对内容作任何检测,也不将这些结果通知收发双方;I数据报的丢失,通过路由器发ICMP报文告知;必要时,由高层实体(如TCP)负责差错恢复动作。
3)尽力投递服务
执行数据报的分段和封装,以适应具体的传输网络,由最终结点的IP模块进行合段处理
不同物理网络对传输的帧/分组的体积有不同的规定;当数据报长度>MTU(最大传输单元MTU—MaximunTransferUnit)时,需对数据报分段。
②ARP地址解析协议
OK,有了上面IP协议的知识,我们来讲解一台计算机它是如何知道另一台计算机的MAC地址的,这就是网络层的ARP地址解析协议做的事情。
网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP数据报的源地址和目的地址始终不变,而MAC地址随着链路的改变而改变。
ARP(AddressResolutionProtocol)协议就可以实现由IP地址得到MAC地址。
每个主机都有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到MAC地址的映射表。
如果主机A知道主机B的IP地址,但是ARP高速缓存中没有该IP地址到MAC地址的映射,此时主机A通过广播的方式发送ARP请求分组(该分组携带自己的IP地址和MAC地址以及目标主机的IP地址),主机B收到该请求后会发送ARP响应分组给主机A告知其MAC地址,随后主机A向其高速缓存中写入主机B的IP地址到MAC地址的映射。
对应的,RARP协议可以实现由MAC地址转化为IP地址
那么,我们如何知道对方计算机的IP地址呢,这是DNS协议做的事情,在应用层我们会详细讲解。
5.传输层
通过物理层、数据链路层以及网络层的互相作用,我们已经把数据成功从计算机A传送到计算机B了,可是,计算机B里面有各种各样的应用程序,计算机B该如何知道这些数据是给哪个应用程序的呢?
所以,我们在从计算机A传数据给计算表B的时候,还得指定一个端口(Port),以供特定的应用程序来接受处理。即IP地址+端口号就可以唯一确定某个主机上的某个应用进程
也就是说,网络层的功能是建立主机到主机的通信,而传输层的功能就是建立端口到端口的通信(也可以说是进程到进程之间的通信)
传输层最常见的两大协议是TCP协议和UDP协议,其中TCP协议与UDP最大的不同就是TCP提供可靠的传输,而UDP提供的是不可靠传输。
1)用户数据报协议UDP(UserDatagramProtocol)
UDP在传送数据之前不需要先建立连接,远程主机在收到UDP报文后,不需要给出任何确认。虽然
UDP不提供可靠交付,但在某些情况下UDP确是一种最有效的工作方式(一般用于即时通信),比如:QQ语音、QQ视频、直播等等
2)传输控制协议TCP(TransmissionControlProtocol)
TCP提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。
TCP不提供广播或多播服务。由于TCP要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、流量控制、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP一般用于文件传输、发送和接收邮件、远程登录等场景。
6.应用层
应用层最接近于用于,它的任务就是通过应用进程间的交互来完成特定网络应用。
应用层协议定义的是应用进程间的通信和交互的规则。由于传输层传来的数据五花八门,有html格式的,有mp4格式等等,所以对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等等。我们把应用层交互的数据单元称为报文。
由于本文的关键就是讲解计算机之间的通信,所以其他协议我们就不讲了,只讲解一下DNS协议是如何将域名转化为IP地址的。
DNS域名解析协议
域名系统DomainNameSystem缩写DNS,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库(这里的分布式数据库是指,每个站点只保留它自己的那部分数据),能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP地址。
域名具有层次结构,从上到下依次为:根域名、顶级域名、二级域名。
DNS可以使用UDP或者TCP进行传输,使用的端口号都为53。
大多数情况下DNS使用UDP进行传输,这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。
域名解析方式:
递归查询迭代查询
基本原理:
1)浏览器搜索自己的DNS缓存,缓存中维护一张域名与IP地址的对应表;
2)若没有,则搜索操作系统的DNS缓存;
3)若没有,则操作系统将域名发送至本地域名服务器(递归查询方式),本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则,通过以下方式迭代查找:
本地域名服务器向根域名服务器发起请求,根域名服务器返回com域的顶级域名服务器的地址;本地域名服务器向com域的顶级域名服务器发起请求,返回权限域名服务器地址本地域名服务器向权限域名服务器发起请求,得到IP地址
4)本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来
5)操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来
至此,浏览器已经得到了域名对应的IP地址。
点击下方,第一时间了解华为云新鲜技术~
华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云
#华为云开发者联盟#