网络原理-TCP/IP(7)
目录
网络层
路由选择
数据链路层
认识以太网
以太网帧格式
认识MAC地址
对比理解MAC地址和IP地址
认识MTU
ARP协议
ARP协议的作用
ARP协议工作流程
重要应用层协议DNS(Domain Name System)
DNS背景
NAT技术
NAT IP转换过程
NAPT
NAT技术的优缺点
网络层
路由选择
这里就需要解决一个数据包,如何从网络中的一个地址,传输到另一个地址.
路由的过程,就是一跳一跳"问路的过程".(摸着石头过河).
所谓"一跳"就是数据链路层中的一个区间.具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间.
IP数据报传输的过程也和问路一样.
数据报中包含目的IP的字段(问路的目标),每个路由器对于网络环境(和它相邻的设备有所了解),此时就根据它的了解,告诉我们下一步应该往哪走.
当IP数据包,到达路由器时,路由器会先查看目的IP;
路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器;
依次反复,一直达到目标IP地址;
那么如何判定当前这个数据包该发送到哪里呢?这就依靠每个结点内部维护一个路由表;
路由表可以使用route命令查看
如果目的IP命中了路由表,直接转发即可;
路由表中的最后一行,主要由下一跳地址(通常是上层路由器)和发送接口(从路由器哪个口出)两部分组成,当目的地址与路由表中其他行都不匹配时,就按缺省路由条目规定的接口 发送到下一跳地址.
假设某主机上的网络接口和路由表如下:
这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络;
路由表的Destination是网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是是发送接口,Flags中U标志标识此条目有效(可以禁用某些条目),G标志标识此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经由路由器转发
数据链路层
认识以太网
"以太网"不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容.例如:规定网络拓扑结构,访问控制方式,传输速率等;
例如以太网的网线必须使用双绞线;传输速率有10M,100M,1000M等;
以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等;
以太网帧格式
如下所示:
源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的;(MAC地址表示的范围比IPv4大很多).
帧协议类型字段有三种值,分别丢应IP,ARP,RARP;
帧末尾有CRC校验码
认识MAC地址
MAC地址用来识别数据链路层中相连的结点;
一般开发中很少使用MAC地址,而IP地址用的很多;
长度为48位,及6个字节,一般用16进制数字加上冒号或"-"的形式来表示,eg.08-00-27-03-fb-19
在网卡出厂时就确定了,不能修改.mac地址通常是唯一的(虚拟机中mac地址不是真实的mac地址,可能会冲突; 也有些网卡支持用户配置的mac地址).
有些程序使用mac地址作为机器的身份标识,比如外挂.
对比理解MAC地址和IP地址
IP地址描述的是路径总体的起点和终点(终极目标),也就是全局转发(从起点到终点,转发过程:查询路由表,通过IP地址).
MAC地址描述的是路途上每一个区间的起点和终点(阶段目标),也就是局部转发(两个相邻设备转发,一个电脑连接一个路由器->相邻). 经过一次转发,路由器/交换机就会把上述数据包进行分用和重新封装. 帧头存放:源mac,目的mac,每次经过一个路由器/交换机就会发生改变.
认识MTU
MTU相当于发快递时对包裹尺寸的限制.这个限制是不同的数据链路层对应的物理层,所产生的限制.
以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;(因为ARP是46字节,而1500字节是硬件限制)
最大值1500称为以太网的最大传输单元(MTU),不同网络类型有不同的MTU;
如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片;
不同的数据链路层标准的MTU是不同的;
之前讲到的IP数据包分包问题正是因为数据链路层MTU的限制,而不是因为自身达到了64kb的限制.
ARP协议
ARP和RARP可以认为是两个横跨了网络层和数据链路层的协议.
ARP效果就是能够让路由器/交换机建立一个内部的结构.通过IP地址映射出MAC地址(利用转发表->描述了一个设备和哪些设备之间是连接着的).(常用)
RARP效果是让路由器和交换机也建立一个内部的结构,通过MAC地址映射出IP地址. (不常用)
ARP协议的作用
ARP协议建立了主机IP地址和MAC地址的映射关系.
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址;
数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃;
因此在通讯前必须获得目的主机的硬件地址.
ARP协议工作流程
重要应用层协议DNS(Domain Name System)
DNS是一整套从域名映射到IP的系统(域名解析系统),(eg.www.google.com这种的就是域名).
DNS背景
TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序.但是IP地址不方便记忆.
于是人们发明了一个叫做主机名(域名)的东西,是一个字符串,并且使用hosts文件描述主机名和IP地址的关系.
随着互联网的发展,域名和服务器都越来越多了, 此时要维护hosts文件就非常麻烦了.
就有大佬干脆搭建了一组服务器,来提供域名解析服务(hosts内容放到服务器里了),你某个主机想访问某个域名,就先查询一下域名解析服务器(DNS服务器),查到的结果,就是域名对应的IP,拿着IP进行访问即可.
DNS是应用层协议
DNS底层使用UDP进行解析
浏览器会缓存DNS结果
NAT技术
之前提到过,IPv4协议中,IP地址数量不充足的问题.
NAT技术是当前解决IP地址不够用的主要手段,也是路由器的一个重要功能;
NAT能够将私有IP对外通信时转为全局IP.也就是一种将私有IP和全局IP相互转化的技术方法;
很多学校,家庭,公司内部采用每个终端设置私有IP,而路由器或有必要的服务器上设置全局IP;
全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的.
NAT IP转换过程
NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
NAT路由器收到外部的数据时,又会把目标IP从202.244.174.37替换回10.0.0.10;
在NAT路由器内部,有一张自动生成的,用于地址转换的表;
当10.0.0.10第一次向163.221.120.9发送数据时就会生成表中的映射关系;
NAPT
那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的,那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?
这时候NAPT来解决这个问题了.使用IP+port来建立这个关联关系
这种关联关系也是由NAT路由器自动维护的.例如在TCP的情况下,建立连接时,就会生成这个表项;在断开连接时,就会删除这个表项;
NAT技术的优缺点
由于NAT依赖这个转换表,所以有诸多限制:
无法从NAT外部向内部服务器建立连接;
转换表的生成和销毁都需要额外开销;
但是NAT有个最大的优点:不需要更新硬件设备,只更新软件,就可以解决IP地址不够用的问题.
相关文章:

网络原理-TCP/IP(7)
目录 网络层 路由选择 数据链路层 认识以太网 以太网帧格式 认识MAC地址 对比理解MAC地址和IP地址 认识MTU ARP协议 ARP协议的作用 ARP协议工作流程 重要应用层协议DNS(Domain Name System) DNS背景 NAT技术 NAT IP转换过程 NAPT NAT技术的优缺点 网络层 路由…...

HarmonyOS4.0系列——08、整合UI常用组件
HarmonyOS4.0 系列——08、UI 组件 Blank Blank 组件在横竖屏占满空余空间效果 // xxx.ets Entry Component struct BlankExample {build() {Column() {Row() {Text(Button).fontSize(18)Blank()Toggle({type: ToggleType.Switch}).margin({top: 14,bottom: 14,left: 6,righ…...
【Spring Boot 3】【JPA】一对多单向关联
【Spring Boot 3】【JPA】一对多单向关联 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花…...

工信部等九部门:打造一批实现制造过程数字孪生的数字化转型标杆工厂
“人工智能技术与咨询” 发布 培育一批科技领军人才、青年骨干人才,以及一批既懂原材料工业又懂数字技术的复合型人才。依托职业教育提质培优行动计划,加速培育数字化转型急需紧缺的工程师和技术技能人才。支持引进数字化转型海外高端人才。 ÿ…...

并发编程(2)基础篇-管程
4 共享模型之管程 本章内容 共享问题synchronized线程安全分析Monitorwait/notify线程状态转换活跃性Lock 4.1 共享带来的问题 4.1.1 小故事 老王(操作系统)有一个功能强大的算盘(CPU),现在想把它租出去ÿ…...

OpenAI文生视频大模型Sora概述
Sora,美国人工智能研究公司OpenAI发布的人工智能文生视频大模型(但OpenAI并未单纯将其视为视频模型,而是作为“世界模拟器” ),于2024年2月15日(美国当地时间)正式对外发布。 Sora可以根据用户…...

[linux]进程间通信(IPC)———共享内存(shm)(什么是共享内存,共享内存的原理图,共享内存的接口,使用演示)
一、什么是共享内存 共享内存区是最快的(进程间通信)IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。注意:…...
Go 原子操作有哪些?
Go atomic包是最轻量级的锁(也称无锁结构),可以在不形成临界区和创建互斥量的情况下完成并发安全的值替换操作,不过这个包只支持int32/int64/uint32/uint64/uintptr这几种数据类型的一些基础操作(增减、交换、载入、存…...

爬虫知识--02
免费代理池搭建 # 代理有免费和收费代理 # 代理有http代理和https代理 # 匿名度: 高匿:隐藏访问者ip 透明:服务端能拿到访问者ip 作为后端,如何拿到使用代理人的ip 请求头中:x-forwor…...

SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测
SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测 目录 SCI一区 | Matlab实现GAF-PCNN-MSA格拉姆角场和双通道PCNN融合注意力机制的多特征分类预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实…...

Observability:使用 OpenTelemetry 和 Elastic 监控 OpenAI API 和 GPT 模型
作者: 来自 Elastic David Hope ChatGPT 现在非常火爆,甚至席卷了整个互联网。 作为 ChatGPT 的狂热用户和 ChatGPT 应用程序的开发人员,我对这项技术的可能性感到非常兴奋。 我看到的情况是,基于 ChatGPT 的解决方案将会呈指数级…...

靡语IT:Vue精讲(一)
Vue简介 发端于2013年的个人项目,已然成为全世界三大前端框架之一,在中国大陆更是前端首选。 它的设计思想、编码技巧也被众多的框架借鉴、模仿。 纪略 2013年,在Google工作的尤雨溪,受到Angular的启发,从中提取自…...

vue3 toRefs之后的变量修改方法
上效果 修改值需要带上解构之前的对象名obj, changeName:()>{ // toRefs 解决后变量修改值方法: 解构前变量.字段新值 obj.name FEIFEI; } } 案例源码 <!DOCTYPE html> <html> <head><me…...

【教程】详解相机模型与坐标转换
转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 由于复制过来,如果有格式问题,推荐大家直接去我原网站上查看: 相机模型与坐标转换 - 生活大爆炸 目录 经纬度坐标系 转 地球直角坐标系大地直角坐标系 转 经纬度坐标系地理坐标…...

171基于matlab的随机共振微弱信号检测
基于matlab的随机共振微弱信号检测,随机共振描述了过阻尼布朗粒子受周期性信号和随机噪声的共同作用下,在非线性双稳态系统中所发生的跃迁现象. 随机共振可用于弱信号的检测。程序已调通,可直接运行。...

petalinux_zynq7 驱动DAC以及ADC模块之三:实现C语言API并编译出库被python调用
前文: petalinux_zynq7 C语言驱动DAC以及ADC模块之一:建立IPhttps://blog.csdn.net/qq_27158179/article/details/136234296petalinux_zynq7 C语言驱动DAC以及ADC模块之二:petalinuxhttps://blog.csdn.net/qq_27158179/article/details/1362…...
NXP实战笔记(五):S32K3xx基于RTD-SDK在S32DS上配置ADC的硬件触发同步采样与软件采样过程
目录 1、概述 1.1、软件触发 1.2、硬件触发 - BCTU 1.3、硬件触发 - TRGMUX 1.4、ADC的校准 1.5、ADC时钟配置 2、BTCU硬件触发ADC的SDK配置 3、软件触发ADC 3.1、选择相应Port作为ADC的输入 3.2、ADC配置 3.3、代码示例 1、概述 恩智浦 S32K3xx 系列汽车微控制器…...

pikachu靶场-CSRF
CSRF: 介绍: Cross-site request forgery简称为"CSRF”。 在CSF的攻击场景中攻击者会伪造一个请求(这个请求一般是一个链接) 然后欺骗目标用户进行点击,用户一旦点击了这个请求,整个攻击也就完成了࿰…...

【结合OpenAI官方文档】解决Chatgpt的API接口请求速率限制
OpenAI API接口请求速率限制 速率限制以五种方式衡量:RPM(每分钟请求数)、RPD(每天请求数)、TPM(每分钟令牌数)、TPD(每天令牌数)和IPM(每分钟图像数&#x…...
C语言实现基础数据结构——栈
目录 栈 栈的实现 数组栈 数组栈的实现 栈的初始化 栈的销毁 数据入栈 判断栈是否为空 数据出栈 获取栈顶元素 获取栈内数据个数 项目实现 栈的基础练习 有效的括号 栈 栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...

day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...