当前位置: 首页 > news >正文

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

(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发送数据的效率会更高。

相关文章:

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

(6条消息) 《网络是怎样连接的》(二.1)_qq_38480311的博客-CSDN博客 本文主要取材于 《网络是怎样连接的》 第二章 2.5 2.6章节。 目录 简述: 本文的主要内容是 以太网的收发操作 和 UDP协议的收发操作。 IP与以太网的包收发操作 包是什…...

MySQL加密插件安装

加密插件 查看已经安装的插件:show plugs; 增加加密插件: 登陆MySQL后,通过show variables like ‘validate%’;查看相关验证规则。 ① 在配置文件中新增,[mysqld]标签下 plugin-load-addvalidate_password.so ② 在运行时新增…...

新手入门Jenkins自动化部署入门详细教程

1. 背景 在实际开发中,我们经常要一边开发一边测试,当然这里说的测试并不是程序员对自己代码的单元测试,而是同组程序员将代码提交后,由测试人员测试; 或者前后端分离后,经常会修改接口,然后重新…...

Neural Network学习笔记4

完整的模型训练套路 train.py import torch import torchvision from torch.utils.data import DataLoader # 引入自定义的网络模型 from torch.utils.tensorboard import SummaryWriterfrom model import *# 准备数据集 train_data torchvision.datasets.CIFAR10(root"…...

[转]关于cmake --build .的理解

https://blog.csdn.net/qq_38563206/article/details/126486183 https://blog.csdn.net/HandsomeHong/article/details/120170219 cmake --build . 该命令的含义是:执行当前目录下的构建系统,生成构建目标。 cmake项目构建过程简述: 1. 首先&#xf…...

【Linux下6818开发板(ARM)】硬件空间挂载

(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…...

剑指offer 动态规划篇

题目由入门往上递增 入门 斐波那契数列_牛客题霸_牛客网 (nowcoder.com) 动态规划甚至于算法的入门题目 方法一&#xff1a;按照斐波那契的公式fnfn-1fn-2&#xff0c;从1-n求出结果。 class Solution { public:int Fibonacci(int n) {vector<int>f{0,1,1};for(int …...

关于Linux中前端负载均衡之VIP(LVS+Keepalived)自动化部署的一些笔记

写在前面 整理一些 LVS 相关的笔记理解不足小伙伴帮忙指正 傍晚时分&#xff0c;你坐在屋檐下&#xff0c;看着天慢慢地黑下去&#xff0c;心里寂寞而凄凉&#xff0c;感到自己的生命被剥夺了。当时我是个年轻人&#xff0c;但我害怕这样生活下去&#xff0c;衰老下去。在我看来…...

C++ 拷贝交换技术示例

拷贝交换技术&#xff08;copy and swap&#xff09;是什么&#xff0c;网上估计能查到很多。但网上有点难找到完整的演示代码&#xff0c;所以这里记录一下。难点在于&#xff1a; 如果要满足 5 的原则&#xff0c;我到底要写那些函数&#xff1f; 默认构造函数、复制构造函数…...

使用 Go 语言实现二叉搜索树

原文链接&#xff1a; 使用 Go 语言实现二叉搜索树 二叉树是一种常见并且非常重要的数据结构&#xff0c;在很多项目中都能看到二叉树的身影。 它有很多变种&#xff0c;比如红黑树&#xff0c;常被用作 std::map 和 std::set 的底层实现&#xff1b;B 树和 B 树&#xff0c;…...

系统接口自动化测试方案

XXX接口自动化测试方案 1、引言 1.1 文档版本 版本 作者 审批 备注 V1.0 XXXX 创建测试方案文档 1.2 项目情况 项目名称 XXX 项目版本 V1.0 项目经理 XX 测试人员 XXXXX&#xff0c;XXX 所属部门 XX 备注 1.3 文档目的 本文档主要用于指导XXX-Y…...

小研究 - JVM 垃圾回收方式性能研究(一)

本文从几种JVM垃圾回收方式及原理出发&#xff0c;研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响&#xff0c;并通过最终测试数据对比&#xff0c;给出了不同应用场景下如何选择垃圾回收策略的方法。 目录 1 引言 2 垃圾回收算法 2.1 标记清除法 2.2…...

[LeetCode]链表相关题目(c语言实现)

文章目录 LeetCode203. 移除链表元素LeetCode237. 删除链表中的节点LeetCode206. 反转链表ⅠLeetCode92. 反转链表 II思路 1思路 2 LeetCode876. 链表的中间结点剑指 Offer 22. 链表中倒数第k个节点LeetCode21. 合并两个有序链表LeetCode86. 分隔链表LeetCode234. 回文链表Leet…...

[深入理解NAND Flash (操作篇)] NAND 初始化常用命令:复位 (Reset) 和 Read ID 和 Read UID 操作和代码实现

依JEDEC eMMC及经验辛苦整理,原创保护,禁止转载。 专栏 《深入理解Flash:闪存特性与实践》 内容摘要 全文 4400 字,主要内容 复位的目的和作用?   NAND Reset 种类:FFh, FCh, FAh, FDh 区别 Reset 操作步骤 和 代码实现 Read ID 操作步骤 和 代码实现 Read Uni…...

RxJava 复刻简版之二,调用流程分析之案例实现

接上篇&#xff1a;https://blog.csdn.net/da_ma_dai/article/details/131878516 代码节点&#xff1a;https://gitee.com/bobidali/lite-rx-java/commit/05199792ce75a80147c822336b46837f09229e46 java 类型转换 kt 类型&#xff1a; Any Object泛型&#xff1a; 协变: …...

SpringMVC中Model和ModelAndView的区别

SpringMVC中Model和ModelAndView的区别 两者的区别&#xff1a; 在SpringMVC中&#xff0c;Model和ModelAndView都是用于将数据传递到视图层的对象 Model是”模型“的意思&#xff0c;是MVC架构中的”M“部分&#xff0c;是用来传输数据的。 理解成MVC架构中的”M“和”V“…...

Tomcat安装与管理

文章目录 Tomcat安装及管理Tomcat gz包安装&#xff1a;JDK安装&#xff1a;Tomcat安装&#xff1a;修改配置文件&#xff08;如下&#xff09;&#xff1a;服务启动配置&#xff1a; Tomcat-管理(部署jpress)&#xff1a;修改允许访问的主机修改允许管理APP的主机进入管理&…...

React之路由

React之路由 背景&#xff1a; react: 18.2.0 路由&#xff1a;react-router-dom: 6.14.2 1、路由表配置 src下新建router/index.ts import React, { lazy } from react import { Navigate } from react-router-dom import Layout from /layout/Index import { JSX } from rea…...

机器学习深度学习——非NVIDIA显卡怎么做深度学习(坑点排查)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位即将上大四&#xff0c;正专攻机器学习的保研er &#x1f30c;上期文章&#xff1a;机器学习&&深度学习——数值稳定性和模型化参数&#xff08;详细数学推导&#xff09; &#x1f4da;订阅专栏&#xff1a;机器…...

2021 Robocom 决赛 第四题

原题链接&#xff1a; PTA | 程序设计类实验辅助教学平台 题面&#xff1a; 在一个名叫刀塔的国家里&#xff0c;有一只猛犸正在到处跑着&#xff0c;希望能够用它的长角抛物技能来撞飞别人。已知刀塔国有 N 座城市&#xff0c;城市之间由 M 条道路互相连接&#xff0c;为了拦…...

线程池-手写线程池Linux C简单版本(生产者-消费者模型)

目录 简介手写线程池线程池结构体分析task_ttask_queue_tthread_pool_t 线程池函数分析thread_pool_createthread_pool_postthread_workerthread_pool_destroywait_all_donethread_pool_free 主函数调用 运行结果 简介 本线程池采用C语言实现 线程池的场景&#xff1a; 当某些…...

05-向量的意义_n维欧式空间

线性代数 什么是向量&#xff1f;究竟为什么引入向量&#xff1f; 为什么线性代数这么重要&#xff1f;从研究一个数拓展到研究一组数 一组数的基本表示方法——向量&#xff08;Vector&#xff09; 向量是线性代数研究的基本元素 e.g. 一个数&#xff1a; 666&#xff0c;…...

交通运输安全大数据分析解决方案

当前运输市场竞争激烈&#xff0c;道路运输企业受传统经营观念影响&#xff0c;企业管理者安全意识淡薄&#xff0c;从业人员规范化、流程化的管理水平较低&#xff0c;导致制度规范在落实过程中未能有效监督与管理&#xff0c;执行过程中出现较严重的偏差&#xff0c;其营运车…...

vimrc 配置 (持续跟新中)

vimrc 配置 #显示行号 set nu #自动换行 set autoindent #设置tab键 宽度为四个空格 set tabstop4 set shiftwidth4 set expandtab更多文章&#xff0c;详见我的博客网站...

【集成学习介绍】

1. 引言 在机器学习领域&#xff0c;集成学习&#xff08;Ensemble Learning&#xff09;是一种强大的技术&#xff0c;通过将多个弱学习器组合成一个更强大的集成模型&#xff0c;来提升模型的鲁棒性和性能。 2. 集成学习的原理 集成学习的核心思想是“三个臭皮匠&#xff…...

动画制作选择Blender还是Maya

Blender和Maya是两种最广泛使用的 3D 建模和动画应用程序。许多经验丰富的用户表示&#xff0c;Blender 在雕刻工具方面远远领先于 Maya&#xff0c;并且在 3D 建模方面达到了相同的质量水平。对于刚接触动画行业的人来说&#xff0c;您可能会问“我应该使用 Blender 还是 Maya…...

215. 数组中的第K个最大元素

题目链接&#xff1a;力扣 解题思路&#xff1a; 方法一&#xff1a;基于快速排序 因为题目中只需要找到第k大的元素&#xff0c;而快速排序中&#xff0c;每一趟排序都可以确定一个最终元素的位置。 当使用快速排序对数组进行降序排序时&#xff0c;那么如果有一趟排序过程…...

NLP From Scratch: 生成名称与字符级RNN

NLP From Scratch: 生成名称与字符级RNN 这是我们关于“NLP From Scratch”的三个教程中的第二个。 在<cite>第一个教程< / intermediate / char_rnn_classification_tutorial ></cite> 中&#xff0c;我们使用了 RNN 将名称分类为来源语言。 这次&#xff…...

Spring MVC程序开发

目录 1.什么是Spring MVC? 1.1MVC定义 1.2MVC和Spring MVC的关系 2.为什么要学习Spring MVC? 3.怎么学Spring MVC? 3.1Spring MVC的创建和连接 3.1.1创建Spring MVC项目 3.1.2RequestMapping 注解介绍 3.1.3 RequestMapping 是 post 还是 get 请求&#xff1f; ​…...

医疗知识图谱问答——文本分类解析

前言 Neo4j的数据库构建完成后&#xff0c;现在就是要实现医疗知识的解答功能了。因为是初版&#xff0c;这里的问题解答不会涉及深度学习&#xff0c;目前只是一个条件查询的过程。而这个过程包括对问题的关键词拆解分类&#xff0c;然后提取词语和类型去图数据库查询&#xf…...