两台计算机之间是如何通信的
1. 五层协议参考模型
所谓通信协议就是通信双⽅都必须要遵守的通信规则。如果没有⽹络通信协议,计算机的数据将⽆法发送到⽹络上,更⽆法到达对⽅计算机,即使能够到达,对⽅也未必能读懂。有了通信协议,⽹络通信才能够发⽣。
⼀般我们⽤五层协议参考模型来进⾏计算机⽹络的学习:
应⽤层
运输层
⽹络层
数据链路层
物理层
上述各层的作⽤会在下⽂详细讲解,我们⾸先要明⽩为什么要分层:
协议的实现是很复杂的。因为协议要把⼈读得懂的数据,如⽹页、电⼦邮件等加⼯转化成可以在⽹络上传输的信号,需要进⾏的处理⼯作⾮常多。
两个系统中实体间的通信是⼀个⼗分复杂的过程。为了减少协议设计和调试过程的复杂性,⽹络协议通常都按结构化的层次⽅式来进⾏组织,每⼀层完成⼀定功能,每⼀层⼜都建⽴在它的下层之上。不同的⽹络协议,其层的数量、各层的名字、和功能不尽相同。
也就是说,每⼀层都是在下⼀层的基础上,通过层间接⼝向上⼀层提供⼀定的服务,⽽把 “这种服务是如何实现的” 细节对上层加以屏蔽。
那么,我们将⼀个⼤型⽹络体系分成了若⼲个层,各个层之间是如何进⾏通信的呢?
1)对等层之间通信(不同开放系统中的相同层次之间的通信,对等层实体之间的信息交换):OSI 标准为每⼀层的通信都严格定义了协议数据单元 PDU的格式。对等层之间的通信是⽬的,对等层实体的协作保证该层功能和服务的实现
2)相邻层之间通信(相邻的上下层之间的通信,属于局部问题):相邻层之间的通信是⼿段,保证对等层实体之间的通信得以实施
假设⽹络协议分为若⼲层,那么 A、B 两节点通信,实际是节点 A 的第 n 层与节点 B 的第 n 层进⾏通
信,故协议总是指某⼀层的协议,例如物理层协议、传输层协议、应⽤层协议。每⼀相邻层协议间有⼀接⼝,下层通过该接⼝向上⼀层提供服务。
2. 物理层
两台计算机之间要进⾏通信,必然需要传输介质/物理媒介来连接两台计算机,这样,我们才能把数据传输过去。传输介质分为:
导向型传输介质:
双绞线:适⽤于近距离
同轴电缆(抗⼲扰性强):适⽤于远距离
光纤:带宽远远⼤于其他传输媒体
⾮导向型传输介质:
⽆线电波
微波
红外线、激光
也就是说,物理层的作⽤就是实现计算机之间的数据传送,这个数据其实是⽐特流,物理层需要尽可能屏蔽掉具体传输介质和物理设备的差异,使其上⾯的数据链路层不必考虑⽹络的具体传输介质是什么,即实现⽐特流的透明传输。
3. 数据链路层
物理层只是简单的把计算机连接起来并在上⾯传输⽐特流,它还是存在着很多问题的:
1)物理连接是有差错和不可靠的
2)物理设备之间可能存在传输速度不匹配问题
也就是说仅仅靠物理层是⽆法保证数据传输的正确性的。
这样,数据链路层的主要作⽤就是加强物理层传输原始⽐特流的功能,将物理层提供的可能出错的物理连接改造成为逻辑上⽆差错的数据链路,使之对⽹络层表现为⼀条⽆差错的链路。在物理层提供服务的基础上,数据链路层还肩负着为⽹络层提供服务的责任,其最基本的服务是将来⾃⽹络层的 IP 数据报封装成帧,可靠的传输到相邻结点的⽬标⽹络层。
①封装成帧
⾸先了解⼀下为什么需要封装成帧:前⾯说了,物理层它只是简单的把计算机连接起来并在上⾯传输⽐特流(0、1 序列),如果这些 0,1组合的传送毫⽆规则的话,计算机是解读不了的。因此,我们需要制定⼀套规则来进⾏ 0、1 的传送,让计算能够读懂这些序列。
把⼀台计算的的数据通过物理层和链路层发送给另⼀台计算机,究竟是谁发给谁的,计算机与计算机之间如何区分,你总得给他们⼀个唯⼀的标识吧?
于是,MAC 地址出现了
② MAC 地址
MAC 地址就是链路层地址,长度为 6 字节(48 位),**⽤于唯⼀标识⽹络适配器(⽹卡)。**计算机之间的数据传送,就是通过 MAC 地址来唯⼀寻、传送的。
⼀台主机拥有多少个⽹络适配器就有多少个 MAC 地址。例如笔记本电脑普遍存在⽆线⽹络适配器和有线⽹络适配器,因此就有两个 MAC 地址。
4. ⽹络层
在计算机⽹络中进⾏通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信⼦⽹。
⽹络层的任务就是选择合适的⽹间路由和交换结点,确保数据及时传送。在发送数据时,⽹络层把运输层产⽣的报⽂段或⽤户数据报封装成分组和包进⾏传送。
在 TCP/IP 体系结构中,由于⽹络层使⽤ IP 协议,因此分组也叫 IP 数据报,简称数据报。
① IP 协议
IP 协议⽤于屏蔽下层物理⽹络的差异,为上层提供统⼀的 IP 数据报。
IP 协议定义的地址,我们称之为 IP 地址。IP 数据报中含有发/收⽅的 IP 地址。
IP 协议提供⽆连接的、不可靠的、尽⼒的数据报投递服务
1)⽆连接的投递服务
发送端可于任何时候⾃由发送数据,⽽接收端永远不知道⾃⼰会在何时从哪⾥接收到数据。每个数据报独⽴处理和传输,⼀台主机发出的数据报序列,可能取不同的路径,甚⾄其中的⼀部分数据报会在传输过程中丢失;
2)不可靠的投递服务
IP 协议本⾝不保证数据报投递的结果。在传输的过程中,数据报可能会丢失、重复、延迟和乱序等, IP协议不对内容作任何检测,也不将这些结果通知收发双⽅;I 数据报的丢失,通过路由器发ICMP报⽂告知;必要时,由⾼层实体(如TCP)负责差错恢复动作。
3)尽⼒投递服务
执⾏数据报的分段和封装,以适应具体的传输⽹络,由最终结点的IP模块进⾏合段处理
不同物理⽹络对传输的帧 /分组的体积有不同的规定;当数据报长度 > MTU(最⼤传输单元 MTU—Maximun Transfer Unit  )时,需对数据报分段。
② ARP 地址解析协议
OK,有了上⾯ IP 协议的知识,我们来讲解⼀台计算机它是如何知道另⼀台计算机的 MAC 地址的,这就是⽹络层的 ARP 地址解析协议做的事情。
⽹络层实现主机之间的通信,⽽链路层实现具体每段链路之间的通信。因此在通信过程中,IP数据报的源地址和⽬的地址始终不变,⽽MAC地址随着链路的改变⽽改变
ARP(Address Resolution Protocol )协议就可以实现由 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 地址
5. 传输层
通过物理层、数据链路层以及⽹络层的互相作⽤,我们已经把数据成功从计算机 A 传送到计算机 B 了,可是,计算机 B ⾥⾯有各种各样的应⽤程序,计算机 B 该如何知道这些数据是给哪个应⽤程序的呢?
所以,我们在从计算机 A 传数据给计算表 B 的时候,还得指定⼀个端⼝(Port),以供特定的应⽤程序来接受处理。即 IP 地址 + 端⼝号就可以唯⼀确定某个主机上的某个应⽤进程
也就是说,⽹络层的功能是建⽴主机到主机的通信,⽽传输层的功能就是建⽴端⼝到端⼝的通信(也可以说是进程到进程之间的通信)
传输层最常见的两⼤协议是 TCP 协议和 UDP 协议,其中 TCP 协议与 UDP 最⼤的不同就是 TCP 提供可靠的传输,⽽ UDP 提供的是不可靠传输。
1)⽤户数据报协议 UDP(User Datagram Protocol)
UDP 在传送数据之前不需要先建⽴连接,远程主机在收到 UDP 报⽂后,不需要给出任何确认。虽然
UDP 不提供可靠交付,但在某些情况下 UDP 确是⼀种最有效的⼯作⽅式(⼀般⽤于即时通信),⽐
如:QQ 语⾳、 QQ 视频、直播等等
2)传输控制协议 TCP(Transmission Control Protocol)
TCP 提供⾯向连接的服务。在传送数据之前必须先建⽴连接,数据传送结束后要释放连接。
TCP 不提供⼴播或多播服务。由于 TCP 要提供可靠的,⾯向连接的传输服务(TCP 的可靠体现在 TCP 在传递数据之前,会有三次握⼿来建⽴连接,⽽且在数据传递时,有确认、窗⼝、重传、流量控
制、拥塞控制机制,在数据传完后,还会断开连接⽤来节约系统资源。这不仅使协议数据单元的⾸部增⼤很多,还要占⽤许多处理机资源。TCP ⼀般⽤于⽂件传输、发送和接收邮件、远程登录等场景。
6. 应⽤层
应⽤层最接近于⽤于,它的任务就是通过应⽤进程间的交互来完成特定⽹络应⽤。
应⽤层协议定义的是应⽤进程间的通信和交互的规则。由于传输层传来的数据五花⼋门,有 html 格式的,有 mp4 格式等等,所以对于不同的⽹络应⽤需要不同的应⽤层协议。在互联⽹中应⽤层协议很多,如域名系统 DNS,⽀持万维⽹应⽤的 HTTP 协议,⽀持电⼦邮件的SMTP 协议等等。我们把应⽤层交互的数据单元称为报⽂。
由于本⽂的关键就是讲解计算机之间的通信,所以其他协议我们就不讲了,只讲解⼀下 DNS 协议是如何将域名转化为 IP 地址的。
DNS 域名解析协议
域名系统 Domain Name System 缩写 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 地址。