过年回去,终于给老人讲清楚两台电脑是如何通信的

过年,回去,终于,老人,讲清楚,两台,电脑,如何,通信 · 浏览次数 : 316

小编点评

# 网络层通信 网络层是计算机网络中传输数据的重要环节,它负责将数据从主机到主机之间传输,并确保数据传输的可靠性。 **IP 协议** IP 协议是网络层中用于数据传输的协议,它负责将数据包封装成IP数据报,并在数据传输过程中进行数据包的封装和解封装。 **ARP 协议** ARP 协议是地址解析协议,它用于在数据传输过程中发现主机之间之间的IP地址。ARP协议在数据传输过程中,主机发送ARP 请求分组,收录其他主机的ARP应答分组,并从ARP应答分组中提取目标主机的IP地址。 **TCP 协议** TCP 协议是面向连接的传输协议,它用于在数据传输过程中建立连接并确保数据传输的可靠性。TCP协议在数据传输过程中,发送三次握手来建立连接,并在数据传输过程中,接收方发送确认包来确保数据传输的可靠性。 **UDP 协议** UDP 协议是不可面向连接的传输协议,它用于在数据传输过程中建立连接并传输数据。UDP协议在数据传输过程中,发送数据包并等待对方发送确认包,并在数据传输过程中,接收方发送数据包并等待对方发送确认包。 **应用层协议** 应用层协议定义的是应用进程间的通信和交互的规则,例如 HTTP 协议用于传输网页数据, SMTP 协议用于传输电子邮件数据等。 **DNS 协议** DNS 协议是域名解析协议,它用于在域名查找中找到主机之间之间的IP地址。DNS协议在域名查找过程中,发送查询请求到根域名服务器,根域名服务器返回 com 域的顶级域名服务器地址,从顶级域名服务器中获取目标主机的IP地址等。

正文

摘要:本文将从小白的角度,讲解两台计算机之间是如何精确的找到对方的位置并发送和接收消息的,以从宏观角度把握计算机网络的体系结构。

本文分享自华为云社区《两台计算机之间究竟是如何通信的?》,作者:龙哥手记。

计算机网络的知识点非常杂乱且琐碎,非常容易让人产生畏惧心理。其实计网通篇研究的核心就是不同计算机之间的通信过程。本文将从小白的角度,讲解两台计算机之间是如何精确的找到对方的位置并发送和接收消息的,以从宏观角度把握计算机网络的体系结构。

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—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 地址

❓ 那么,我们如何知道对方计算机的 IP 地址呢,这是 DNS 协议做的事情,在应用层我们会详细讲解。

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 地址。

 

点击关注,第一时间了解华为云新鲜技术~

与过年回去,终于给老人讲清楚两台电脑是如何通信的相似的内容:

过年回去,终于给老人讲清楚两台电脑是如何通信的

摘要:本文将从小白的角度,讲解两台计算机之间是如何精确的找到对方的位置并发送和接收消息的,以从宏观角度把握计算机网络的体系结构。 本文分享自华为云社区《两台计算机之间究竟是如何通信的?》,作者:龙哥手记。 计算机网络的知识点非常杂乱且琐碎,非常容易让人产生畏惧心理。其实计网通篇研究的核心就是不同计算

痞子衡嵌入式:说说职业生涯第一个十年

2013年7月1日,痞子衡应届毕业正式入职飞思卡尔半导体上海 Site,至今已经十年零七天。 上周六是整十年的日子,当时并没有特别的感觉,但是过去的一周总有种情愫在酝酿,终于今天还是决定花点时间回忆下过去的十年,梳理下那些值得纪念的时刻。 Offer抉择 时间拨回到 2012 年的秋天,痞子衡和万千

「废话少说,放码过来」:博客园2024夏季T恤上架预售

T恤是今年园子周边的重头戏,经过三版设计(1,2,3),差点没戏,还好我们没有放弃,回归最初的设计,终于上架等穿上它的你。 在第三版设计预览发布之后,我们开始打样看实物效果,收到样品后,我们被星星的可爱惊呆了,比设计图中还要可爱的多,穿上它仿佛一下回到了童年。 为了让星星成为T恤主题唱独角戏,我们正

前端里那些你不知道的事儿之 【window.onload】

相信很多前端开发者在做项目时同时也都做过页面性能优化,这不单是前端的必备职业技能,也是考验一个前端基础是否扎实的考点,而性能指标也通常是每一个开发者的绩效之一。尤其马上接近年关,页面白屏时间是否过长、首屏加载速度是否达标、动画是否能流畅运行,诸如此类关于性能更具体的指标和感受,很可能也是决定着年底你能拿多少年终奖回家过年的晴雨表。

过年必备!亲戚计算器「GitHub 热点速览 v.23.02」

过完这周大家就要开始为期 7 天的春节长假了,当然有些 HG 小伙伴拥有了 10+ 天的长假就低调点不要告诉他人,以免招人妒忌。春节必经的事情可能就是走亲戚了,所以本周特推选取了一个研究亲戚关系的资深项目,助你不用母上大人开口就能叫出这位不知名的亲戚是你的谁。 回到本周的 GitHub 趋势,新上线

为什么MySQL单表不能超过2000万行?

摘要:MySQL一张表最多能存多少数据? 本文分享自华为云社区《为什么MySQL单表不能超过2000万行?》,作者: GaussDB 数据库 。 最近看到一篇《我说MySQL每张表最好不要超过2000万数据,面试官让我回去等通知》的文章,非常有趣。 文中提到,他朋友在面试的过程中说,自己的工作就是把

算法金 | 一个强大的算法模型,GPR !!

大侠幸会,在下全网同名「算法金」 0 基础转 AI 上岸,多个算法赛 Top 「日更万日,让更多人享受智能乐趣」 抱个拳,送个礼 高斯过程回归(GPR)是一种非参数化的贝叶斯方法,用于解决回归问题。与传统的线性回归模型不同,GPR 能够通过指定的核函数捕捉复杂的非线性关系,并提供不确定性的估计。在本

逃不过转行的命运,与互联网无缘了

hi,我是chen 今天是9.20号我转行的第二个月。因为这个博客很久没有更新了,今天也不知道怎么突发奇想搜了搜,看到那之前的那几篇文章有些回忆过去,也想跟过去道个别。想和大家分享我的转行以来的感受。 以前是我干的测试,没错就是和开发干的测试。干了2年,薪资已经上升到1w4,每天都很轻松功能点点,也

一文读懂华为云云原生产品及开源实践

摘要:本文主要从华为云原生产品及开源产品两个层面进行展开,详述华为云在云原生领域的最佳实践。 本文分享自华为云社区《【云驻共创】华为云云原生产品及开源实践》,作者:kaliarch。 一 云原生发展阶段和趋势 回首过去,云计算的快速发展,为众多行业的数字化转型提供了推力,也提升了企业数字化转型的技术

码农的转型之路-全力以赴升级物联网浏览器(IoTBrowser)

在人生的重要时刻,我站在了毕业的门槛上,望着前方的道路,心中涌动着对未来的无限憧憬与些许忐忑。面前,两条道路蜿蜒伸展:一是继续在职场中寻求稳定,一是勇敢地走出一条属于自己的创新之路。尽管面临年龄和现实的挑战,我仍旧选择勇往直前,用技术这把钥匙,开启新的人生篇章。 回首过去,我深知时间宝贵,精力有限。