网络原理续

news2024/12/27 2:03:22

传输层的协议也并非就只有UDP和TCP

就拿王者荣耀这个游戏来说

  1. 是否需要可靠性
  2. 是否需要高效率

那是使用TCP还是UDP呢?
当然是都不用, 除了这两个协议外, 有的传输层协议就是为游戏场景量身打造的. 比如说以KCP为代表的一系列协议.

网络层

  1. 地址管理
  2. 路由选择

网络层的代表:IP协议

协议头格式如下:
在这里插入图片描述

  • 4位版本:此处的取值只有两个(4/6), 也就是 IPv4 和IPv6
  • 4位首部长度: 描述了IP报头有多长(报头是变长的), 报头里有一个选项部分, 是变长的(可有可无), 此处单位也是4字节
  • 8位服务类型(TOS): 说是8位, 但是只有4位有效, 这四位中只有一位可以是1, 其他的都是0, 4位就表示 IP 协议的四种形态/四种工作模式.(最小延时,最大吞吐量,最高可靠性,最小成本), 这四者相互冲突,只能选择一个.
  • 16位总长度(字节数): 描述了一个IP数据包的长度(头部+载荷), 这个长度减去前面的报头长度, 剩下的就是载荷(一个完整的TCP/UDP数据报长度), 一个IP数据包携带的数据载荷太长了, 超过64kb, 就会在网络层针对数据进行拆分, 把一个数据包分成多个IP数据包, 再分别发送, 接收方再重新拼装.
  • 16位标识: 同一个数据拆成的多个包, 标识都是一样的.
  • 3位标志: 结束标志
  • 13位片偏移: 标识了多个包的先后顺序
  • 8位生存时间: 一个数据报在网络上能够传输的最大时间, 这个单位不是"秒", 而是"次数", 一个数据包构造出来. 会有一个初始的TTL数值, (比如32或者64或者128…), 这个包每次经过一个路由器转发, TTL就会减1. 如果减到了0, 还是没有到达目标, 此时就认为这个包永远也到不了了.就可以丢弃了.
  • 8位协议: 描述了当前载荷部分内容是属于哪个协议的(TCP/UDP)
  • 16位头部校验和: 此处只需要针对头部进行校验, 载荷部分(TCP/UDP 数据报) 自身已经有校验和了.
  • 32位源IP: 此处看到的IP地址是32位的整数. 32位数字只能表示42亿九千万个数字. 表示发送端
  • 32位目的IP: 接收端

上面说到32位IP地址, 只能表示42亿九千万, 在社会发展的今天, 这些地址是远远不够用的, 那有怎么解决呢?

  1. 动态分配IP地址, 所有的设备不可能同时在线, 有些没用的设备的IP就可以给别人用, 这个方案只是增加了IP利用率, 治标不治本.
  2. NAT 地址转换, 本质上是使用一个IP代表一批设备, 也能够提高IP利用率, 再使用端口号来区分具体的设备.
    在NAT背景下, 就把IP地址分成了两大类:
    1 ). 内网IP(私有IP): 10.* , 172.16* ~ 172.31* , 192.168.*
    2 ). 外网IP(公有IP): 除了内网IP剩下的就是外网IP.

NAT要求, 公网IP必须是唯一的
私网IP可以在在不同的局域网下出现.
如果某个私网里的设备想要访问公网的设备, 就需要NAT设备(路由器)把IP地址进行映射, 从而完成网络访问.
反之, 公网的设备, 无法直接访问私网的设备, 不同局域网的私网设备没法直接相互访问.
NAT机制能够有效解决IP地址不够用的问题, 但是带来的副作用就是网路环境更加复杂了.

  1. IPV6 (根本上解决了IP不够用的问题)
    IPV6 使用16个字节表示IP地址.
    16个字节能表示多少个地址号呢?
    这个是天文数字, 能够把地球上的每一粒沙子都分配一个IPv6地址.

IPV6 虽然确实很美好, 但是当前世界上, 任然是以 NAT + IPv4 + 动态分布 来进行网络组建的. 真正使用IPV6的地方非常少.
只是为什么呢?
这是因为IPv4 和 IPv6 不兼容
如果你要想 IPv6 据需要更换支持IPv6 的路由器等网络设备.
但是咱们国家IPv6 普及率非常之高(接近80%), 这是为什么呢?, 因为IPv4 地址分配权在美国人手里, 我们得提防一手美国的"制裁" , 国家出手普及IPv6.
电子监听、全国断网,棱镜门背后,中国如何从末路狂奔到世界之巅(推荐视频)


IP协议, 地址管理
把一个IP地址, 分成了两个部分, 一个叫网络号, 一个叫主机号

  • 网络号: 标识网段, 保证相互连接的两个网段具有不同的标识(局域网)
  • 主机号: 标识主机, 同一网段内, 主机之间有相同的网络号, 但是必须有不同的主机号

使用子网掩码表示哪个部分是网络号

路由选择
数据报寻路的过程
一边走一边问.
这里只是简单说一下, 背后知识非常复杂.

数据链路层

考虑的是相邻两个结点之间的传输(通过网线/光纤/无线直接相连的两个设备)

这里典型协议也有很多, 其中最知名的就是以太网, 这个协议规定了数据链路层也规定了物理层的内容.

在这里插入图片描述
以太网数据帧 = 帧头 + 载荷 + 帧尾
这里的载荷就是一个完整的IP数据包
帧头就包含了目的地址, 源地址, 类型,

这里的地址不是IP地址了, 而是mac地址(6个字节)
这个地址和IP地址完全独立的, 是另外一套地址体系
6个字节比IPv4地址大很多, 当前每个设备都会有唯一的mac地址. 这个地址不是动态分配的, 而是网卡出厂的时候就被设置好了.

那么IP 和 mac 是如何相互配合的呢?
就是各司其职
IP 用来描述整个传输过程的起点和终点,. mac则是 用来描述两个相邻结点, 起点终点…

帧协议类型字段有三种值,分别对应IP、ARP、RARP

应用层重点协议

DNS

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

TCP/IP中使用IP地址来确定网络上的一台主机,但是IP地址不方便记忆,且不能表达地址组织信息,于
是人们发明了域名,并通过域名系统来映射域名和IP地址

域名是一个字符串,如 www.baidu.com , hr.nowcoder.com
域名系统为一个树形结构的系统,包含多个根节点。其中:

  1. 根节点即为根域名服务器,最早IPv4的根域名服务器全球只有13台,IPv6在此基础上扩充了
    数量。
  2. 子节点主要由各级DNS服务器,或DNS缓存构成。
    DNS域名服务器,即提供域名转换为IP地址的服务器。
    浏览器、主机系统、路由器中都保存有DNS缓存。
    Windows系统的DNS缓存在 C:\Windows\System32\drivers\etc\hosts 文件中
    Mac/Linux系统的DNS缓存在 /etc/hosts 文件中

网络通信发送数据时,如果使用目的主机的域名,需要先通过域名解析查找到对应的IP地址:

  • 域名解析的过程,可以简单的理解为:发送端主机作为域名系统树形结构的一个子节点,通过域名
    信息,从下到上查找对应IP地址的过程。如果到根节点(根域名服务器)还找不到,即找不到该主
    机。
  • 域名解析使用DNS协议来传输数据。DNS协议是应用层协议,基于传输层UDP或TCP协议来实现。

在这里插入图片描述

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

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

相关文章

【FreeRTOS】

FreeRTOS 一、FreeRTOS任务创建和删除1.1 动态方式1.2 静态方式 二、任务挂起和恢复三、中断管理四、临界区保护及调度器的挂起和恢复五、列表项的插入和删除六、时间片调度七、任务状态查询API函数介绍7.1 任务状态查询API7.2 任务运行时间统计API 八、时间管理九、队列十、信…

SpringBoot小项目——简单的小区物业后台管理系统 认证鉴权 用户-角色模型 AOP切面日志 全局异常【源码】

目录 引出一、应用到的技术栈Spring、Spring MVC、Spring Boot基础SpringBoot进阶、SpringMVC原理、AOP切面MyBatis 数据库相关JavaWeb基础:Session等前端Vue、JavaScript、Bootstrap 二、后台管理系统的功能登录功能1.用户名密码登录2.验证码的登录 报修业务的处理…

【多线程面试题十】、说一说notify()、notifyAll()的区别

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:说一说notify()、notify…

C++哈希表:一种快速查找和插入的方法

文章目录 1、前言2、unordered系列关联式容器2.1、 unordered_map2.1.1、unordered_map的文档介绍2.1.2、unordered_map的接口说明 2.2、 unordered_set 3. 底层结构3.1 哈希概念3.2 哈希冲突2.3 哈希函数2.4 哈希冲突解决2.4.1 闭散列2.4.2 开散列 4. 模拟实现4.1 哈希表的改造…

论文速递 TMC 2023 | RoSeFi: 一种利用商用WiFi设备进行稳健的久坐行为监测系统

注1:本文系“最新论文速览”系列之一,致力于简洁清晰地介绍、解读最新的顶会/顶刊论文 TMC 2023 | RoSeFi: 一种利用商用WiFi设备进行稳健的久坐行为监测系统 原文链接:https://ieeexplore.ieee.org/abstract/document/10269067 本文提出了一种稳健的久坐行为监测系统RoSeFi。…

ITSource 分享 第5期【校园信息墙系统】

项目介绍 本期给大家介绍一个 校园信息墙 系统,可以发布信息,表白墙,分享墙,校园二手买卖,咨询分享等墙信息。整个项目还是比较系统的,分为服务端,管理后台,用户Web端,小…

SHCTF 山河CTF Reverse方向[Week1]全WP 详解

文章目录 [WEEK1]ez_asm[WEEK1]easy_re[WEEK1]seed[WEEK1]signin[WEEK1]easy_math[WEEK1]ez_apk [WEEK1]ez_asm 从上往下读,第一处是xor 1Eh,第二处是sub 0Ah;逆向一下先加0A后异或1E 写个EXP data "nhuo[M7mc7uhc$7midgbTf7$7%#ubf7 …

Go命令行参数操作:os.Args、flag包

Go命令行参数操作:os.Args、flag包 最近在写项目时,需要用到命令行传入的参数,正好借此机会整理一下。 1 os.Args:程序运行时,携带的参数(包含exe本身) package mainimport ("fmt"&q…

ZYNQ连载02-开发环境

ZYNQ连载02-开发环境 1. 官方文档 ZYNQ开发使用的软件为Vivado/Vitis/PetaLinux,软件体积比较大,硬盘保留100G以上的空间,赛灵思提供详细的文档,链接如下: ZYNQ文档 2. Vivido和Vitis安装 赛灵思统一安装程序 3. PetaLinux安装…

OV-VG: A Benchmark for Open-Vocabulary Visual Grounding

OV-VG: A Benchmark for Open-Vocabulary Visual Grounding 一、Abstract 写在前面 又是一周周末,光调代码去了,都没时间看论文了,汗。   这是一篇关于开放词汇定位的文章,也是近两年的新坑,但是资源也是需要不少。 …

波士顿房价预测

目录 1.初始化库并导入数据 2.查看是否有缺失值,查看各个变量的相关性 3.探究各变量之间的相关关系 4.初始化并训练线性模型 5.可视化预测情况 6.模型优化 idea1:减少决策变量 idea2:数据归一化 idea3:尝试其他模型 XGB…

Vue $nextTick 模板解析后在执行的函数

this.$nextTick(()>{ 模板解析后在执行的函数 })

智慧矿山AI算法助力护帮板支护监测,提升安全与效率

在智慧矿山AI算法系列中,护帮板支护监测是保障矿山安全和提高生产效率的重要环节。护帮板作为矿山支护体系中的重要组成部分,在矿山生产中起到了关键的作用。那么,护帮板在哪种状态下是正常打开的呢?本文将对此进行介绍。 护帮板的…

搭建MyBatis

文章目录 1.创建Maven 工程创建MyBatis的核心配置文件创建mapper接口创建MyBatis的映射文件通过junit测试功能加入log4j日志功能核心配置文件详解1.这里实现了jdbc.properties jdbc.properties文件 默认的类型别名MyBatis的增删改查 1.创建Maven 工程 打包方式:jar…

从0到1之微信小程序快速入门(03)

目录 什么是生命周期函数 WXS脚本 ​编辑 与 JavaScript 不同 纯数据字段 组件生命周期 定义生命周期方法 代码示例 组件所在页面的生命周期 代码示例 插槽 什么是插槽 启用多插槽 ​编辑 定义多插槽 组件通信 组件间通信 监听事件 触发事件 获取组件实例 自…

【2023年NCST C语言新生培训】| 五次培训总结 | C到C++内容补充 | 排位赛详细题解 |《万字长文》

文章目录 一,四次培训总结1,第一次培训( 培训介绍 Onilne Judge,编译语言,编译器的选择 )2,第二次培训1,本次培训安排2,基本的运算式结构 3,第三次培训1,选择…

第 369 场周赛 (3题,递归式动态规划)

第一题 简单题,就不多写了 class Solution:def findKOr(self, nums: List[int], k: int) -> int:ans [0] * 31for n in nums:for i in range(31):if 2**i & n 2**i:ans[i] 1return sum([2**i if ans[i] > k else 0 for i in range(31)])第二题 0 至少…

【Linux】CentOS8.4 安装docker

🦄 🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!🪁🍁🪁&…

【数据结构练习题】删除有序数组中的重复项

✨博客主页:小钱编程成长记 🎈博客专栏:数据结构练习题 🎈相关博文:消失的数字 — 三种解法超详解 删除有序数组中的重复项 1.🎈题目2. 🎈解题思路3. 🎈具体代码🎇总结 1…

多输入多输出 | Matlab实现k-means-LSTM(k均值聚类结合长短期记忆神经网络)多输入多输出组合预测

多输入多输出 | Matlab实现k-means-LSTM(k均值聚类结合长短期记忆神经网络)多输入多输出组合预测 目录 多输入多输出 | Matlab实现k-means-LSTM(k均值聚类结合长短期记忆神经网络)多输入多输出组合预测预测效果基本描述程序设计参…