网络多层的协议详述

网络层

1)地址管理:制定一系列的规则,通过地址,在网络上描述出一个设备的位置

2)路由选择:网络环境比较复杂,从一个节点到另一个节点,存在很多条不同的路径,需要规划出更适合的路径进行网络传输

TCP/IP协议栈

4位版本  

4 => ipv4                  6 => ipv6                  目前大规模使用的两个版本

4位首部长度

IP协议的报头,也是变长的       0—0xf  => *4 => 0-60字节

选项(如果有)

8位服务类型

能够让IP协议,切换形态

3位为优先权字段(已弃用),4位TOS字段,1位保留字段(必须设置为0)

TOS字段的四个位,彼此之间是相互冲突的,只有一位为1

不同的位设为1,表示IP协议不同的形态

最小延时,最大吞吐量,最高可靠性,最小成本

16位总长度(字节)

描述了IP数据包最长的长度

IP协议也存在64kb的限制,但是IP协议自身支持“拆包组包”功能——

16位标识——将一个大的数据包拆成若干个小包,16位标识就是相同的值

3位标志——一位表示是否允许拆包,一位表示是否是最后一个包

13位片偏移——描述当前每个小的数据包(分片)的相对位置

8位生存时间

描述了一个IP数据包,在网络上还能存活多久

TTL的单位是次数

数据包被构造出来,TTL会被设置成一个初始值,数据包在转发过程中,每次经过一个路由器,TTL就会减1

如果数据包把TTL耗尽,还没顺利到达对方,就被丢弃了

8位协议

描述的是IP数据包的载荷部分,是一个UDP数据包,还是TCP数据包(传输层是那个协议)

16位首部校验和

这个校验和,只是校验IP首部,不管IP的载荷(UDP/TCP这样数据,自身都是有校验和的)

32位源IP地址 —— 32位目的IP地址

IP地址,本质上是一个32位的整数,一般写作 点分十进制 

地址管理

IP地址,是一个32位整数            2*32   =>    42亿9千万

地址理论上是不能重复的,互联网发展至今,能上网的设备早已超过IP地址的范围

此时如何解决IP地址不够用的问题:

1)动态分配IP

提高了IP地址的利用率,但是没有增加IP地址的数量(广泛使用的过渡方案)

2)NAT机制(网络地址转换)

本质上是让一个IP地址,代表一批设备

把IP地址分成两大类:

1. 内网IP(局域网IP)

在同一个局域网内部,内网IP之间不能重复

在不同局域网中,内网IP可以重复

2. 外网IP(广域网IP)

外网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 发送数据时就会生成表中的映射关系

如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,
目的 IP 都是相同的。那么 NAT 路由器如何判定将这个数据包转发给哪个局域网的主机?

此时IP地址是相同,但是每台主机的端口号是不同的

如果此时恰好两台主机分配端口号相同——>

请求到达路由器后,路由器会发现这两个数据包的目的IP地址和目的端口都一样(访问同一个服务器),源端口也一样

路由器会把源端口也一起替换掉(路由器内部会记录映射关系)

当前的网络环境就是以  NAT + 动态分配  的方式解决IP地址不够用的问题 

NAT机制是“纯软件”的方案,因此局域网内部的设备能够主动访问外网的设备,外网的设备不能主动访问局域网的设备

3)IPv6

IPv6 使用16个字节表示IP地址          0—2*128

地球上所有的设备都可以有一个自己的  IPv6地址

IPv6 和 IPv4 是不兼容的

网段划分

IP 地址分为两个部分              网络号和主机号
网络号 标识网段 ,保证相互连接的两个网段具有不同的标识
主机号 标识主机 ,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号

同一个局域网中的设备,网络号必须相同,主机号必须不同

不同的局域网,网络号不能相同

子网掩码

一个IP地址,哪部分是网络号,哪部分是主机号,是不一定的

子网掩码,就是用来确定网络号的

32位整数(左边全是1,右边全是0)

子网掩码格式和 IP 地址一样,也是一个 32 位的二进制数。其中左边是网络位,用二进制数字 “1” 表示,1 的数目等于网络位的长度;右边是主机位,用二进制数字 “0” 表示, 0 的数目等于主机位的长度
子网掩码也可以使用二进制所有高位1相加的数值来表示
网络通信时,子网掩码结合 IP 地址,可以计算获得网络号(划分子网后的网络号)及主机号(划分
子网后的主机号)。一般用于判断目的 IP 与本 IP 是否为同一个网段
计算方式:

将 IP 地址和子网掩码进行“按位与”操作(二进制相同位,与操作,两个都是1结果为1,否则为0),得到的结果就是网络号。将子网掩码二进制按位取反,再与 IP 地址位与计算,得到的就是主机号

十进制二进制
IP地址
180.210.242.131
10110100.11010010.11110010.10000011
子网掩码
255.255.248.0
11111111.11111111.11111000.00000000
网络号
180.210.240.0
10110100.11010010.11110000.00000000
主机号
0.0.2.131
00000000.00000000.00000010.10000011

早期的网络分段形式:A类    B类    C类  D类   E类

0网络号(7位)主机号(24位)
10网络号(14位)主机号(16位)
110网络号(21位)主机号(8位)
1110多播组号(28位)
11110留后待用(27位)
1)将 IP 地址中的主机地址全部设为 0 ,就成为了网络号,代表这个局域网
2)将 IP 地址中的主机地址全部设为 1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包
3)127.* IP 地址用于本机环回( loop back )测试,通常是 127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),
对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通
操作系统提供了一套“虚拟网卡”,关联到这个IP上
4).255  
UDP能天然支持 广播,和这个IP有关
使用UDP socket给这个IP发送UDP数据报,此时局域网中的所有设备,都能收到这个数据

TCP无法与这个IP建立连接

路由选择

描述了IP协议(IP数据报)转发的过程

IP数据进行转发的时候,无法知道网络的全貌,只知道一些局部信息(一个路由器知道哪些设备和它是相连的),这就意味着IP数据报,在转发的过程中是一个“探索式”/“启发式”的过程

一个网络层数据报,每次到达一个路由器,都会进行“问路”过程

每个路由器内部都有一个数据结构“路由表”,根据数据报中的 目的IP,查路由表

如果查到了,就直接按照路由表中给定的方向(从哪个网口进行转发),继续转发

如果没查到,路由表里有一个“默认的表项”“下一个地址”,按照默认的表项转发

路由表——>

1. 手动配置

2. 自动获取

以太网协议

" 以太网 " 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了
一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等

通过网线/光纤,来通信,使用的协议是以太网协议

以太网横跨数据链路层和物理层

以太网数据帧:帧头 + 载荷(IP数据报)+ 帧尾

1)源地址和目的地址是指网卡的硬件地址(也叫 MAC 地址),长度是 48 位,是在网卡出厂时固
化的
2)帧协议类型字段有三种值,分别对应 IP ARP RARP
3)帧末尾是 CRC 校验码

目的地址/源地址

6个字节

不是IP地址,是网络中的另一套地址体系,Mac地址(物理地址)

目前来说,每个设备都是有唯一的Mac地址

Mac地址通常是十六进制表示的,两个十六进制数字就是一个字节

字节和字节之间通常使用  -  或者  :  来分割

IP协议立足于全局,完成整个通信过程中的路径规划工作

以太网则是关注于局部,相邻两个局部之间的通信过程

网络层 与 数据链路层 的路径侧重:

网络层无论有多少条路线,源IP和目的IP始终是整个通信过程中的最初起点和最后终点(不考虑NAT)

数据链路层关注的是“相邻节点”之间的如何转发

源mac和目的mac会根据当前转发的过程,每次到达一个节点,往下一个节点转发的时候,源mac和目的mac都会随之改变

IP数据报的最大长度不超过1500字节

MTU:数据链路层数据报能携带的最大载荷长度

不同数据链路层的协议,MTU不同(和物理层的介质也有关系)

IP数据报的分包组包,大概路是因为MTU,而不是触发64kb上限

这两种协议不是传输“业务数据”,而是辅助转发的协议

像交换机这样的设备,收到以太网数据报时,就需要要进行转发

转发的过程中就需要能根据Mac地址,判定数据要走那个网口

此处的网口是“物理意义”上插网线的接口(IP协议,路由器,走哪个网络接口,都是抽象的概念,最后还是要在数据链路层才能决定走哪个网口)

具体的转发过程:

交换机内部有一个数据结构“转发表”,和前面的路由器表有点像

转发表示一个简单的像hash的映射(此处不一定由软件实现)

转发表中的内容主要由  arp  协议实现

DNS

DNS,即Domain Name System,域名系统。DNS是一整套从域名映射到IP的系统

使用IP地址,描述设备在网络上的位置(应用层协议)

最早的域名解析系统,是通过一个简单文件实现——>  hosts文件

现在搭建了一套DNS系统(一组服务器)

如果要访问服务器,先给这个DNS服务器发起请求,查询一下当前的域名对应的IP,再访问目标网站

一个服务器硬件资源是有限的(CPU,内存,硬盘,网络带宽...)

服务器处理每个请求,都会消耗一定的资源

如果单位时间内访问次数超过服务器的上限,机器就挂了——>

1)开源

搭建“镜像服务器”,同步与主根的数据,用户会先访问距离自己最近的镜像服务器

2)节流

让请求量变少,让每个上网的设备,设置网络缓存

对于短时间的多次访问,只让第一次请求DNS即可,把到的结果保存到本地,后面的请求都是用第一次的结果即可

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

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

相关文章

《算法ZUC》题目

判断题 ZUC算法LFSR部分产生的二元序列具有很低的线性复杂度。 A.正确 B.错误 正确答案A 单项选择题 ZUC算法驱动部分LFSR的抽头位置不包括( )。 A.s15 B.s10 C.s7 D.s0 正确答案C 单项选择题 ZUC算法比特重组BR层主要使用了软件实现友好的…

Flink SQL 从一个SOURCE 写入多个Sink端实例

一. 背景 FLINK 任务从一个数据源读取数据, 写入多个sink端. 二. 官方实例 写入多个Sink语句时,需要以BEGIN STATEMENT SET;开头,以END;结尾。--源表 CREATE TEMPORARY TABLE datagen_source (name VARCHAR,score BIGINT ) WITH (connector datagen …

.vscode配置文件备份

vscode插件 位于:C:\Users\用户名\AppData\Roaming\Code\User\settings.json settings.json {// "C_Cpp.intelliSenseEngine": "default",//智能查找默认值"C_Cpp.intelliSenseEngineFallback": "enabled", //需要添加的…

关于Buildroot如何配置qtwebengine [未能成功编译]

目录 前言 下载Buildroot 如何添加qtwebengine 开始make编译 编译过程中到了这些问题 前言 问题的开始就在于学习QT的过程中遇到了一个问题… Unknown module(s) in QT: webenginewidgets 我想要把qt的一个项目编译并发送到我的开发板上,但是qmake识别不到这…

SNP与Scheer合作助力Warsteiner Brauerei成功升级至SAP S/4HANA

德国软件和咨询公司SNP是SAP环境中数字化转型、自动化数据迁移和数据管理软件的知名提供商,再次与德国Scheer公司合作,Scheer公司是一家专门从事业务流程管理和SAP咨询的咨询公司。他们为家族企业Warsteiner Brauerei Haus Cramer KG向SAP S/4HANA升级转…

【Super Tilemap Editor使用详解】(五):图块调色板

1、图块调色板(Tile Palette)可以在以下位置找到: Tileset Inspector检视面板 STETilemap Inspector检视面板,并选择 "Paint" 选项卡 Tile Palette 窗口:"SuperTilemapEditor/Window/Tile Palette Win…

LNMP+discuz论坛

0.准备 文章目录 0.准备1.nginx2.mysql2.1 mysql82.2 mysql5.7 3.php4.测试php访问mysql5.部署 Discuz6.其他 yum源: # 没有wget,用这个 # curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo[rootlocalhost ~]#…

TRELLIS,一键生成3D模型,图像转3D,微软开源

大家好!今天给大家分享微软最近开源的一个3D模型生成项目——TRELLIS。简单来说就是输入一张图片,它就能自动帮你生成3D模型。这与之前分享的TripoSR项目类似,但是精度和贴图细节比TripoSR要高很多。 好久没关注AI生成3D模型这块,…

开源架构学习指南:文档与资源的智慧锦囊

开源架构学习指南:文档与资源的智慧锦囊 一、引言二、开源架构文档的核心价值剖析(一)知识传承与共享:智慧的薪火相传1. 经典案例:Linux 内核文档 —— 开源世界的智慧基石 (二)促进协作与沟通&…

景联文科技:精准语音标注,驱动语音技术新发展

在人工智能迅速发展的今天,语音技术的应用已经渗透到我们生活的方方面面。从智能音箱、语音助手到自动语音识别系统,高质量的语音数据是这些应用成功的关键。景联文科技作为领先的AI数据服务提供商,专注于为客户提供高精度、高效的语音标注服…

HTTP接口报错详解与解决 200,500,403,408,404

前言: 仅做学习记录,侵删 背景 当后端编写接口时,经常需要对接口使用ApiFox或者PostMan进行测试,此时就会出现各种各样的报错,一般都会包括报错编码:200,400,401等。这个状态码一般是服务器所返回的包含…

NVIDIA发布紧凑型生成式AI超级计算机:性能提升,价格更低

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

upload-labs(1-19关)通关攻略

Pass-01 本关思路&#xff1a;删除前端js校验 进入第一关环境 桌面新建一个php文件&#xff0c;命名为1.php <?php eval($_POST[a]);?> 我们上传此文件&#xff0c;发现不允许上传&#xff0c;且页面没有变化&#xff0c;说明前端进行了拦截 这时我们打开 F12 &…

【开源库 | minizip】Linux(Ubuntu18.04)下,minizip的编译、交叉编译

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 2024-12-20 …

uniapp地址类 方法

关于点击没反应 manifest.json 检查是否添加了对应的权限 /* 小程序特有相关 */"mp-weixin" : {"appid" : "wxc481f10754f1d9df","setting" : {"urlCheck" : false,"es6" : true,"postcss" : true,&qu…

WebContainerapi 基础(Web IDE 技术探索 一)

前言 随着web技术的发展&#xff0c;在网页端直接运行node.js、实现微型操作系统已经不再是难事。今天介绍的 WebContainers就是一个基于浏览器的运行时&#xff0c;用于执行 Node.js 应用程序和操作系统命令&#xff0c;它完全运行在您的浏览器页面中&#xff0c;提供了文件系…

【爬虫开发】爬虫开发从0到1全知识教程第11篇:Mongodb数据库,介绍【附代码文档】

本教程的知识点为&#xff1a;爬虫概要 爬虫基础 爬虫概述 知识点&#xff1a; 1. 爬虫的概念 requests模块 requests模块 知识点&#xff1a; 1. requests模块介绍 1.1 requests模块的作用&#xff1a; 数据提取概要 数据提取概述 知识点 1. 响应内容的分类 知识点&#xff1a…

FFmpeg 安装教程(Windows 系统)

1. 前言 FFmpeg 是一个用于处理视频、音频等多媒体文件的开源工具包。它支持几乎所有的多媒体格式转换、剪辑和编辑&#xff0c;是开发者和多媒体工作者必备的工具。本文详细讲解如何在 Windows 系统上安装 FFmpeg 并进行基本配置。 2. 下载 FFmpeg 安装包 打开 Dpwnload FFmp…

【AutoDL】通过【SSH远程连接】【vscode】

小帅碎碎念 0. 起因1. SSH信息获取2. 给你的vscode安装支持SSH远程连接的插件3. SSH远程连接入口4. 输入密码登陆5. 总结 0. 起因 之前使用AutoDL和Jupyter进行代码编辑和执行确实很方便&#xff0c;尤其是对于交互式数据分析项目。然而&#xff0c;也存在一些限制和不便之处&…

C# 识别二维码

文章目录 一. 二维码识别技术概述二 维码识别的步骤图像预处理二维码的定位和检测二维码解码 三 常用的二维码识别库1. OpenCV2. ZXing.Net 一. 二维码识别技术概述 二维码是一种通过黑白矩阵排列来编码数据的图形符号&#xff0c;它的编码方式具有较强的容错性&#xff0c;可以…