《网络是怎样连接的》(二.2)

news2024/9/9 5:32:10

(6条消息) 《网络是怎样连接的》(二.1)_qq_38480311的博客-CSDN博客

本文主要取材于  《网络是怎样连接的》 第二章 2.5 2.6章节。

目录

简述: 本文的主要内容是 以太网的收发操作 和 UDP协议的收发操作。

IP与以太网的包收发操作

包是什么构成的?

 包是如何转发 的?

路由器和集线器的分工?区别?

IP包的传输过程

IP和MAC 头部如何生成?

如何查询MAC 地址?使用ARP协议

包如何转化为光电信号?网卡机制

UDP协议 

UDP协议和TCP协议最大的不同是什么?

UDP适合的场景?

简述: 本文的主要内容是 以太网的收发操作 和 UDP协议的收发操作。

TCP模块给包加入TCP头部,并委托IP模块给包加上IP 和MAC 头部,IP包就生成了。IP包生成之后由网卡 MAC模块会将包从缓冲区中取出,并在开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列,然后转化为通用光电信号,再。由PHY(MAU)模块转换成可在网线中传输的格式,并通过网线发送出去。

包在转发过程中会经过集线器和路由器,路由器使用IP协议,集线器使用以太网即MAC协议。在转发的途中,包头的IP不会改变,但是包头的MAC地址会发生改变。简单理解IP为端到端,目的IP是不会变的,但是中间的中转节点设备即MAC地址会改变。(集线器和路由第三章会详解)

到达目的地之后,MAC模块再从头开始将信号转换为数字信息,检查FCS(即校验包的对错), 再检查MAC地址是否相符,不符丢弃,相符网卡通知计算机收到包了,然后IP模块再检查IP地址是否相符以及是否分片(若分片等包到齐组装),将数据缓存下来等应用调取。

UDP是用于发短包,没有TCP的接收确认、窗口等机制,因此在收发数据之前也不需要交换控制信息,也就是说不需要建立和断开连接的步骤,只是负责发送包而已,遇到错误或者丢包也一概不管。

IP与以太网的包收发操作

IP包的结构

包是什么构成的?

包是由头部数据两部分构成的(图2.14(a))。头部包含目的地址等控制信息,大家可以把它理解为快递包裹的面单;头部后面就是委托方要发送给对方的数据,也就相当于快递包裹里的货物。

 包是如何转发 的?

转发设备会根据头部中的信息判断接下来应该发往哪里。这个过程需要用到一张表,查表的结果是“目标地址为××××的包应该发到××××号线路”,那么转发设备就会把这个包发到××××号线路去。接下来,包在向目的地移动的过程中,又会到达下一个转发设备,然后又会按照同样的方式被发往下一个转发设备

路由器和集线器的分工?区别?

 网络中有路由器集线器两种不同的转发设备,它们在传输网络包时有着各自的分工。

(1)路由器需要使用IP头部, 按照IP 协议传输包,根据目标地址判断下一个路由器的位置,在包的传输过程中,目标IP地址是不会改变的。

(2)集线器需要使用MAC头部,按照 以太网协议传输包,负责在子网中将网络包传输到下一个路由,在包传输中目标MAC 地址会改变。

IP包的传输过程

1. 发送方将包的目的P地址写入IP头部中,IP协议就可以根据这一地址查找包的传输方向,从而找到下一个路由器的位置,也就是图2.16中的路由器R1。接下来,IP协议会委托以太网协议将包传输过去。这时,IP协议会查找下一个路由器的以太网地址(MAC地址),并将这个地址写入MAC头部中。这样一来,以太网协议就知道要将这个包发到哪一个路由器上了。

网络包在传输过程中(图2.16①)会经过集线器,集线器是根据以太网协议工作的设备。为了判断包接下来应该向什么地方传输,集线器里有一张表(用于以太网协议的表),可根据以太网头部中记录的目的地信息查出相应的传输方向。这张图中只有一个集线器,当存在多个集线器时,网络包会按顺序逐一通过这些集线器进行传输。

接下来,包会到达下一个路由器(图2.16②)。路由器中有一张IP协议的表,可根据这张表以及IP头部中记录的目的地信息查出接下来应该发往哪个路由器。为了将包发到下一个路由器,我们还需要查出下一个路由器的MAC地址,并记录到MAC头部中,大家可以理解为改写了MAC头部[插图]。这样,网络包就又被发往下一个节点了。

自我理解:可以把IP看作 一个端到端的快递,即 快递的起点和终点。把每一个路由器看作快递的中转点。在运输过程中,寄件人和收件人即IP包的发送地址和收件地址是固定的,不会改变的,但是经过的中转点是会发生改变的。而中转点地址是以MAC地址识别的,每中转一次,下一个目的中转点 都会改变,因此 MAC地址是会改变的。

IP和MAC 头部如何生成?

包的发送一开始是TCP 模块委托IP模块,TCP 模块会在包的开头加入TCP头部,TCP模块还需要指定通信对象的IP地址,也就是需要写清楚“将什么内容发给谁”,然后传递给IP模块。IP模块会添加IP头部和MAC头部这两种头部。接下来,封装好的包会被交给网络硬件(网络硬件可以理解为网卡,有各种类型)(图2.17中的“②发送”),例如以太网、无线局域网等。包送达对方之后,对方会作出响应。返回的包也会通过转发设备发送回来,然后我们需要接收这个包。TCP会有不同的包, 但是无论要收发的包是控制包还是数据包,IP对各种类型的包的收发操作都是相同的。

 

IP地址实际上并不是分配给计算机的,而是分配给网卡的,因此当计算机上存在多块网卡时,每一块网卡都会有自己的IP地址。很多服务器上都会安装多块网卡,这时一台计算机就有多个IP地址,在填写发送方IP地址时就需要判断到底应该填写哪个地址。

MAC头部的开头是接收方和发送方的MAC地址,它们和IP头部中的接收方和发送方IP地址的功能差不多,只不过IP地址的长度为32比特,而MAC地址为48比特。

如何查询MAC 地址?使用ARP协议

ARP就是利用广播对所有设备提问:“××这个IP地址是谁的?请把你的MAC地址告诉我。”然后就会有人回答:“这个IP地址是我的,我的MAC地址是××××。”

将查询结果放到一块叫作ARP缓存的内存空间中留着以后用。在发送包时,先查询一下ARP缓存,如果其中已经保存了对方的MAC地址,就不需要发送ARP查询,直接使用ARP缓存中的地址,而当ARP缓存中不存在对方MAC地址时,则发送ARP查询。

包如何转化为光电信号?网卡机制

IP生成的网络包只是存放在内存中的一串数字信息,需要将数字信息转换为电或光信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。

负责执行这一操作的是网卡,但网卡也无法单独工作,要控制网卡还需要网卡驱动程序。网卡的ROM中保存着全世界唯一的MAC地址,这是在生产网卡时写入的,将这个值读出之后就可以对MAC模块进行设置。

 网卡结构

网卡驱动从IP模块获取包之后,会将其复制到网卡内的缓冲区中,然后向MAC模块发送发送包的命令。MAC模块会将包从缓冲区中取出,并在开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列(图2.24)。

 报头是一串像10101010…这样1和0交替出现的比特序列,长度为56比特,它的作用是确定包的读取时机。当这些1010的比特序列被转换成电信号后,会形成如图2.25这样的波形。

 用电信号来表达数字信息时,我们需要让0和1两种比特分别对应特定的电压和电流;接收通过测量信号中的电压和电流变化,还原出0和1两种比特的值。当信号连续为1或连续为0时,比特之间的界限就会消失,可将时钟信号叠加进去帮助判断出比特之间的界限。

 发送信号的操作分为两种,一种是使用集线器的半双工模式,另一种是使用交换机的全双工[插图]模式。在半双工模式中,为了避免信号碰撞,首先要判断网线中是否存在其他设备发送的信号。如果有,则需要等待该信号传输完毕,因为如果在有信号时再发送一组信号,两组信号就会发生碰撞。首先,MAC模块从报头开始将数字信息按每个比特转换成电信号,然后由PHY,或者叫MAU的信号收发模块发送出去[插图]。在这里,将数字信息转换为电信号的速率就是网络的传输速率,例如每秒将10Mbit的数字信息转换为电信号发送出去,则速率就是10 Mbit/s。

网卡的MAC模块生成通用信号,然后由PHY(MAU)模块转换成可在网线中传输的格式,并通过网线发送出去。以太网不会确认发送的信号对方有没有收到。根据以太网的规格,两台设备之间的网线不能超过100米。

在发送信号的过程中,有很小的可能性出现多台设备同时进行发送操作的情况。如果有其他设备同时发送信号,这些信号就会通过接收线路传进来。在使用集线器的半双工模式中,一旦发生这种情况,两组信号就会相互叠加,无法区分,这就是所谓的信号碰撞。这种情况下,继续发送信号是没有意义的,因此发送操作会终止。为了通知其他设备当前线路已发生碰撞,还会发送一段时间的阻塞信号,然后所有的发送操作会全部停止。

接收返回包

在使用集线器的半双工模式以太网中,一台设备发送的信号会到达连接在集线器上的所有设备。PHY (MAU)模块会将信号转换成通用格式并发送给MAC模块,MAC模块再从头开始将信号转换为数字信息,并存放到缓冲区中。当到达信号的末尾时,还需要检查FCS。如果FCS校验没有问题,接下来就要看一下MAC头部中接收方MAC地址与网卡在初始化时分配给自己的MAC地址是否一致,一致则放在缓存区,否则丢弃。MAC模块工作完成,网卡会通知计算机收到了一个包。

  • 当网卡发起中断时,就会自动调用网卡驱动了。网卡驱动被中断处理程序调用后,会从网卡的缓冲区中取出收到的包,并通过MAC头部中的以太类型字段判断协议的类型。
  • 接下来就轮到IP模块先开始工作了,第一步是检查IP头部,确认格式是否正确。如果格式没有问题,下一步就是查看接收方IP地址,若错误,客户端计算机不负责对包进行转发,IP模块会通过ICMP消息将错误告知发送方。如果接收方IP地址正确,则这个包会被接收下来,这时还需要完成另一项工作。
  • IP协议有一个叫作分片的功能(分片简单理解大包被切分为了小包)当收到分片的包时,IP模块会将其暂存在内部的内存空间中,然后等待IP头部中具有相同ID的包全部到达,这是因为同一个包的所有分片都具有相同的ID。IP头部还有一个分片偏移量(fragment offset)字段,它表示当前分片在整个包中所处的位置。根据这些信息,在所有分片全部收到之后,就可以将它们还原成原始的包,这个操作叫作分片重组
  • IP模块工作结束 ,TCP模块会根据IP头部中的接收方和发送方IP地址,以及TCP头部中的接收方和发送方端口号来查找对应的套接字。找到套接字,确认返回包,缓存数据等待应用过来取数据,结束。

UDP协议 

UDP协议和TCP协议最大的不同是什么?

TCP需要将数据高效且可靠地发送给对方,需要建立和断开连接,需要确认对方是否收到了我们发送的数据,若没有收到需要重发一遍。

UDP 不需要建立和断开连接,UDP的数据比较小,一般一个包就能装下,即使发送失败再重发这一个包就好了 。发送了数据,对方一般都会给出回复,只要将回复的数据当作接收确认就行了,也不需要专门的接收确认包。

UDP适合的场景?

像DNS查询等交换控制信息的操作基本上都可以在一个包的大小范围内解决,这种场景中就可以用UDP来代替TCP。

发送音频和视频数据的时候。音频和视频数据必须在规定的时间内送达,一旦送达晚了,就会错过播放时机,导致声音和图像卡顿。在这些无需重发数据,或者是重发了也没什么意义的情况下,使用UDP发送数据的效率会更高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/822310.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

百分点科技参编信通院《数据中台实践指南(1.0版)》

日前,在大数据产业发展大会上,百分点科技参与编写的《数据中台实践指南(1.0版)》正式发布,该指南由中国信息通信研究院大数据技术标准推进委员会指导和组织,百分点科技、阿里云、中国移动、中国联通、交通银…

如何为新一代可持续应用设计电机编码器

从定速电机转向提供位置和电流反馈的变速电机,不仅可以实现工艺改进,还能节省大量能源。本文介绍了电机编码器(位置和速度)、器件类型和技术以及应用案例。此外还解答了一些关键问题,例如对特定系统最重要的编码器性能…

Denso Create Programming Contest 2023 (AtCoder Beginner Contest 309) F题解

文章目录 [Box in Box](https://atcoder.jp/contests/abc309/tasks/abc309_f)问题建模问题分析1.分析操作2.如何比较长方体判断是否有满足条件的长方体存在3.方法1使用树状数组来维护1~对应二维属性值区间内的最小三维属性值代码 4.方法2使用线段树来维护1~对应二维属性值区间内…

2021年全国硕士研究生入学统一考试管理类专业学位联考写作试题——解析版

四、写作:第56~57小题,共65分。其中论证有效性分析30分,论说文35分。请答在答题纸相应的位置上。 56.论证有效性分析:分析下述论证中存在的缺陷与漏洞,选择若干要点,写一篇600字左右的文章,对该…

基于Java+SpringBoot+Vue前后端分离电商项目

晚间lucky为友友们送福利啦~🎁 Tips:有需要毕业设计指导的童鞋一定要认真看哦,文末有彩蛋。 一.项目介绍 该电商项目是一个简单、入门级的电商项目,是基于JavaSpringBootVue前后端分离项目。前端采用两套独立的系统分别完成项目…

驱动开发(中断)

头文件: #ifndef __LED_H__ #define __LED_H__#define PHY_LED1_MODER 0X50006000 #define PHY_LED1_ODR 0X50006014 #define PHY_LED1_RCC 0X50000A28#define PHY_LED2_MODER 0X50007000 #define PHY_LED2_ODR 0X50007014 #define PHY_LED2_RCC 0X50000A28#def…

java学习路程之篇六、进阶知识、常用API、Arrays工具类、冒泡排序、选择排序、二分查找、正则表达式

文章目录 1、Arrays工具类2、冒泡排序3、选择排序4、二分查找5、正则表达式 1、Arrays工具类 2、冒泡排序 3、选择排序 4、二分查找 5、正则表达式

抖音引流推广的几个方法,抖音全自动引流脚本软件详细使用教学

大家好我是你们的小编一辞脚本,今天给大家分享新的知识,很开心可以在CSDN平台分享知识给大家,很多伙伴看不到代码我先录制一下视频 在给大家做代码,给大家分享一下抖音引流脚本的知识和视频演示 不懂的小伙伴可以认真看一下,我们…

快速搭建Vue项目

1.安装node环境 下载地址为:https://nodejs.org/en/ 注意node版本问题,有很多情况下是node版本问题导致的错误。 2.安装淘宝镜像cnpm 为了提高我们的效率,可以使用淘宝的镜像:http://npm.taobao.org/ npm install cnpm -g --r…

【Redis】内存数据库Redis进阶(搭建各种集群)

目录 单机安装Redis搭建Redis主从集群搭建Redis哨兵集群 基于 CentOS 7 的 Redis 集群 单机安装Redis 安装 Redis 所需要的依赖: yum install -y gcc tcl将 Redis 安装包(redis-6.2.4.tar.gz)上传到任意目录 解压缩: tar -xzf …

如何过一个高质量的周末?

如何过一个高质量的周末? 😇博主简介:我是一名正在攻读研究生学位的人工智能专业学生,我可以为计算机、人工智能相关本科生和研究生提供排忧解惑的服务。如果您有任何问题或困惑,欢迎随时来交流哦!&#x1…

分布式系统常见理论讲解

分布式系统是指由多个节点通过网络进行通信和协作的系统,它具有高可用性、高扩展性、高性能等优点,但也面临着一些挑战,如数据一致性、容错性、负载均衡等。为了解决这些问题,分布式系统设计出现了一些经典的理论和方法&#xff0…

阻塞队列BlockingQueue详解

一、阻塞队列介绍 1、队列 队列入队从队首开始添加,直至队尾;出队从队首出队,直至队尾,所以入队和出队的顺序是一样的 Queue接口 add(E) :在指定队列容量条件下添加元素,若成功返回true,若当前…

【C++奇遇记】初探名称空间

🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 数据库专栏 初阶数据结构 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如…

Ubuntu篇——Ubuntu20.04备份成ISO镜像文件并安装到其他电脑上(完整步骤)

注意,此方法制作的镜像,仅限于相同硬件配置的电脑安装,否则可能会发生某些驱动不兼容导致无法安装的情况。(例如英伟达显卡的笔记本电脑,很大概率无法安装你在其他显卡电脑上制作的镜像。) 一、安装systemb…

设计模式行为型——命令模式

目录 什么是命令模式 命令模式的实现 命令模式角色 命令模式类图 命令模式举例 命令模式代码实现 命令模式的特点 优点 缺点 使用场景 注意事项 什么是命令模式 命令模式(Command Pattern)是一种数据驱动的设计模式,它属…

一篇关于CPU的硬核知识

不管你玩硬件还是做软件,你的世界都少不了计算机最核心的 —— CPU。 01CPU是什么? CPU与计算机的关系就相当于大脑和人的关系,它是一种小型的计算机芯片,通常嵌入在电脑的主板上。CPU的构建是通过在单个计算机芯片上放置数十亿…

iOS开发-UIScrollView嵌套tableView实现顶部tab横向切换

iOS开发-UIScrollView嵌套tableView实现顶部tab横向切换 通过ScollView嵌套两个TableView左右切换功能 一、UIScollView UIScrollView可滚动控件,这里初始化需要设置_backScollView.pagingEnabled YES; 代码如下 _backScollView [[UIScrollView alloc] initWi…

ARP协议请求

文章目录 作用请求与应答流程数据包ARP协议以太网帧协议具体应用 作用 通过 IP地址 查找 MAC地址。 请求与应答流程 A:数据发送主机 B:目标主机 目前只知道目标主机IP地址,想把数据发送过去,需要查询到目标主机的MAC地址&#x…

构建基于大模型的Autonomous Agents案例(一)

构建基于大模型的Autonomous Agents案例 1.1 Autonomous Agents原理机制 在本节中,我们将聚焦于LangChain上的自治代理(Autonomous Agents on LangChain)。自治代理是当前业界最热门的话题之一,特别是在企业级应用中。当然&#x…