《网络是怎样连接的》(二.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. 首先…...

【Linux下6818开发板(ARM)】硬件空间挂载
(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…...
剑指offer 动态规划篇
题目由入门往上递增 入门 斐波那契数列_牛客题霸_牛客网 (nowcoder.com) 动态规划甚至于算法的入门题目 方法一:按照斐波那契的公式fnfn-1fn-2,从1-n求出结果。 class Solution { public:int Fibonacci(int n) {vector<int>f{0,1,1};for(int …...
关于Linux中前端负载均衡之VIP(LVS+Keepalived)自动化部署的一些笔记
写在前面 整理一些 LVS 相关的笔记理解不足小伙伴帮忙指正 傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来…...
C++ 拷贝交换技术示例
拷贝交换技术(copy and swap)是什么,网上估计能查到很多。但网上有点难找到完整的演示代码,所以这里记录一下。难点在于: 如果要满足 5 的原则,我到底要写那些函数? 默认构造函数、复制构造函数…...

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

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

小研究 - JVM 垃圾回收方式性能研究(一)
本文从几种JVM垃圾回收方式及原理出发,研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响,并通过最终测试数据对比,给出了不同应用场景下如何选择垃圾回收策略的方法。 目录 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 复刻简版之二,调用流程分析之案例实现
接上篇:https://blog.csdn.net/da_ma_dai/article/details/131878516 代码节点:https://gitee.com/bobidali/lite-rx-java/commit/05199792ce75a80147c822336b46837f09229e46 java 类型转换 kt 类型: Any Object泛型: 协变: …...
SpringMVC中Model和ModelAndView的区别
SpringMVC中Model和ModelAndView的区别 两者的区别: 在SpringMVC中,Model和ModelAndView都是用于将数据传递到视图层的对象 Model是”模型“的意思,是MVC架构中的”M“部分,是用来传输数据的。 理解成MVC架构中的”M“和”V“…...

Tomcat安装与管理
文章目录 Tomcat安装及管理Tomcat gz包安装:JDK安装:Tomcat安装:修改配置文件(如下):服务启动配置: Tomcat-管理(部署jpress):修改允许访问的主机修改允许管理APP的主机进入管理&…...
React之路由
React之路由 背景: react: 18.2.0 路由: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显卡怎么做深度学习(坑点排查)
👨🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习&&深度学习——数值稳定性和模型化参数(详细数学推导) 📚订阅专栏:机器…...
2021 Robocom 决赛 第四题
原题链接: PTA | 程序设计类实验辅助教学平台 题面: 在一个名叫刀塔的国家里,有一只猛犸正在到处跑着,希望能够用它的长角抛物技能来撞飞别人。已知刀塔国有 N 座城市,城市之间由 M 条道路互相连接,为了拦…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...