IP协议1.0
基本概念:
• 主机: 配有IP地址, 但是不进⾏路由控制的设备;
• 路由器: 即配有IP地址, ⼜能进⾏路由控制;
• 节点: 主机和路由器的统称;
IP协议的报头

• 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
• 4位头部⻓度(header length): IP头部的⻓度是多少个32bit, 也就是 length * 4 的字节数. 4bit表⽰最 ⼤的数字是15, 因此IP头部最⼤⻓度是60字节.
• 8位服务类型(Type Of Service): 3位优先权字段(已经弃⽤), 4位TOS字段, 和1位保留字段(必须置为 0). 4位TOS分别表⽰: 最⼩延时(传输过程中消耗时间最短), 最⼤吞吐量(单位时间内传输数据尽可能多), 最⾼可靠性(降低丢包的概率), 最⼩成本(比较减小系统开销). 这四者相互冲突, 只能选择⼀个.对于ssh/telnet这样的应⽤程序, 最⼩延时⽐较重要; 对于ftp这样的程序, 最⼤吞吐量⽐较重要.
• 16位总⻓度(total length): IP数据报整体占多少个字节.
• 16位标识(id)(用来区分那些数据报要进行合并): 唯⼀的标识主机发送的报⽂. 如果IP报⽂在数据链路层被分⽚了, 那么每⼀个⽚⾥⾯的 这个id都是相同的.
• 3位标志字段: 第⼀位保留(保留的意思是现在不⽤, 但是还没想好说不定以后要⽤到). 第⼆位置为1表 ⽰禁⽌分⽚, 这时候如果报⽂⻓度超过MTU, IP模块就会丢弃报⽂. 第三位表⽰"更多分⽚", 如果分⽚ 了的话, 最后⼀个分⽚置为1, 其他是0. 类似于⼀个结束标记. (第二位是结束标记,当前包就是最后一个需要组包的部分。第三位表述该数据是否触发了拆包效果)
• 3位分⽚偏移(framegament offset)(若干数据报拼接的先后顺序): 是分⽚相对于原始IP报⽂开始处的偏移. 其实就是在表⽰当前 分⽚在原报⽂中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此,除了最后⼀个报⽂之 外, 其他报⽂的⻓度必须是8的整数倍(否则报⽂就不连续了).
• 8位⽣存时间(Time To Live, TTL): 数据报到达⽬的地的最⼤报⽂跳数. ⼀般是64. 每次经过⼀个路 由, TTL -= 1, ⼀直减到0还没到达, 那么就丢弃了.这个字段主要是⽤来防⽌出现路由循环
• 8位协议: 表⽰上层协议的类型 >
• 16位头部校验和: 使⽤CRC进⾏校验, 来鉴别头部是否损坏.
• 32位源地址和32位⽬标地址: 表⽰发送端和接收端.
• 选项字段(不定⻓, 最多40字节): 略
IP地址不够用怎么办?
方案一:动态分布IP地址(上网就分配,不上网就不分配)
方案二:NAT机制(网络地址映射``)
首先把IP地址分为两大类
1.私网IP:10.* 172.16-172.31.* 192.168.*
2.公网IP
引入上述私网IP,那么怎么通信呢?
1.同一个局域网内部,设备之间通信
由于同一个局域网内部的IP不能重复,所以此时这些设备都能进行正常的相互交互
2.广域网与广域网之间的通信
由于公网IP的唯一性,所以也可以进行交互
3.局域网1中的设备A尝试连接局域网2中的设备B
不能进行交互
4.局域网设备尝试连接广域网的设备
这个过程通过NAT机制就能进行访问
5.广域网的设备尝试连接局域网的设备
不能进行交互
那么具体内网访问外网IP是怎么实现的呢

网段划分
IP地址分为两个部分, ⽹络号和主机号
• ⽹络号: 保证相互连接的两个⽹段具有不同的标识;
• 主机号: 同⼀⽹段内, 主机之间具有相同的⽹络号, 但是必须有不同的主机号;
不同的⼦⽹其实就是把⽹络号相同的主机放到⼀起.
如果在⼦⽹中新增⼀台主机, 则这台主机的⽹络号和这个⼦⽹的⽹络号⼀致,但是主机号必须不能和⼦⽹中的其他主机重复. 通过合理设置主机号和⽹络号, 就可以保证在相互连接的⽹络中, 每台主机的IP地址都不相同.
那么问题来了, ⼿动管理子网内的IP, 是⼀个相当麻烦的事情.
• 有⼀种技术叫做DHCP, 能够⾃动的给⼦⽹内新增主机节点分配IP地址, 避免了⼿动管理IP的不便.
• ⼀般的路由器都带有DHCP功能. 因此路由器也可以看做⼀个DHCP服务器.
子网掩码
过去曾经提出⼀种划分⽹络号和主机号的⽅案, 把所有IP 地址分为五类, 如下图所⽰。

随着Internet的⻜速发展,这种划分⽅案的局限性很快显现出来,⼤多数组织都申请B类⽹络地址, 导致B类地址很快就分配完了, ⽽A类却浪费了⼤量地址;
• 例如, 申请了⼀个B类地址, 理论上⼀个⼦⽹内能允许6万5千多个主机. A类地址的⼦⽹内的主机数更多.
• 然⽽实际⽹络架设中, 不会存在⼀个⼦⽹内有这么多的情况. 因此⼤量的IP地址都被浪费掉了.
针对这种情况提出了新的划分⽅案, 称为CIDR(Classless Interdomain Routing):
• 引⼊⼀个额外的⼦⽹掩码(subnet mask)来区分⽹络号和主机号;
• ⼦⽹掩码也是⼀个32位的正整数. 通常⽤⼀串 “0” 来结尾;
• 将IP地址和⼦⽹掩码进⾏ “按位与” 操作, 得到的结果就是⽹络号;
• ⽹络号和主机号的划分与这个IP地址是A类、B类还是C类⽆关;

• ⼀个路由器可以配置两个IP地址, ⼀个是WAN⼝IP, ⼀个是LAN⼝IP(⼦⽹IP). • 路由器LAN⼝连接的主机, 都从属于当前这个路由器的⼦⽹中.
• 不同的路由器, ⼦⽹IP其实都是⼀样的(通常都是192.168.1.1).⼦⽹内的主机IP地址不能重复. 但是⼦ ⽹之间的IP地址就可以重复了.
• 每⼀个家⽤路由器, 其实⼜作为运营商路由器的⼦⽹中的⼀个节点.这样的运营商路由器可能会有很 多级, 最外层的运营商路由器, WAN⼝IP就是⼀个公⽹IP了.
• ⼦⽹内的主机需要和外⽹进⾏通信时,路由器将IP⾸部中的IP地址进⾏替换(替换成WAN⼝IP), 这样 逐级替换, 最终数据包中的IP地址成为⼀个公⽹IP 这种技术称为NAT(Network Address Translation,⽹络地址转换)
• 如果希望我们⾃⼰实现的服务器程序,能够在公⽹上被访问到, 就需要把程序部署在⼀台具有外⽹IP 的服务器上. 这样的服务器可以在阿⾥云/腾讯云上进⾏购买.
路由选择
在复杂的⽹络结构中, 找出⼀条通往终点的路线;路由的过程, 是⼀跳⼀跳(Hop by Hop) “问路” 的过程.
所谓 “⼀跳” 就是数据链路层中的⼀个区间. 具体在以太⽹中指从源MAC地址到⽬的MAC地址之间的帧传输区间.
IP数据包的传输过程也和问路⼀样.
• 当IP数据包, 到达路由器时, 路由器会先查看⽬的IP;
• 路由器决定这个数据包是能直接发送给⽬标主机, 还是需要发送给下⼀个路由器;
• 依次反复, ⼀直到达⽬标IP地址;
那么如何判定当前这个数据包该发送到哪⾥呢? 这个就依靠每个节点(主机和路由器的统称)内部维护⼀个路由表;
• 路由表可以使⽤route命令查看
• 如果⽬的IP命中了路由表, 就直接转发即可;
• 路由表中的最后⼀⾏,主要由下⼀跳地址和发送接⼝两部分组成,当⽬的地址与路由表中其它⾏都不匹配时,就按缺省路由条⽬规定的接⼝发送到下⼀跳地址。
假设某主机上的⽹络接⼝配置和路由表如下:

• 这台主机有两个⽹络接⼝,⼀个⽹络接⼝连到192.168.10.0/24⽹络,另⼀个⽹络接⼝连到192.168.56.0/24⽹络;
• 路由表的Destination是⽬的⽹络地址,Genmask是⼦⽹掩码,Gateway是下⼀跳地址,Iface是发送接⼝,Flags中的U标志表⽰此条⽬有效(可以禁⽤某些 条⽬),G标志表⽰此条⽬的下⼀跳地址是某个路由器的地址,没有G标志的条⽬表⽰⽬的⽹络地址是与本机接⼝直接相连的⽹络,不必经路由器转发;转发过程例1: 如果要发送的数据包的⽬的地址是192.168.56.3
• 跟第⼀⾏的⼦⽹掩码做与运算得 到192.168.56.0,与第⼀⾏的⽬的⽹络地址不符
• 再跟第⼆⾏的⼦⽹掩码做与运算得 到192.168.56.0,正是第⼆⾏的⽬的⽹络地址,因此从eth1接⼝发送出去;
• 由于192.168.56.0/24正 是与eth1 接⼝直接相连的⽹络,因此可以直接发到⽬的主机,不需要经路由器转发;
转发过程例2: 如果要发送的数据包的⽬的地址是202.10.1.2
• 依次和路由表前⼏项进⾏对⽐, 发现都不匹配;
• 按缺省路由条⽬, 从eth0接⼝发出去, 发往192.168.10.1路由器;
• 由192.168.10.1路由器根据它的路由表决定下⼀跳地址;
路由表生成算法
路由表可以由⽹络管理员⼿动维护(静态路由), 也可以通过⼀些算法⾃动⽣成(动态路由). 例如距离向量算法, LS算法, Dijkstra算法等.
DNS(domain name system)域名解析系统
相关文章:
IP协议1.0
基本概念: • 主机: 配有IP地址, 但是不进⾏路由控制的设备; • 路由器: 即配有IP地址, ⼜能进⾏路由控制; • 节点: 主机和路由器的统称; IP协议的报头 • 4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4. • 4位头部⻓度(header length): IP头部的⻓…...
源码编译安装LNMP
LNMP包含: linux、Nginx、Mysql、php LNMP的工作原理 : 由客户端发送页面请求给Nginx,Nginx会根据location匹配用户访问请求的URL路径判断是静态还是动态,静态的一般是以 .html .htm .css .shtml结尾,动态的一般是以 .…...
安装Chrome扩展程序来 一键禁用页面上的所有动画和过渡。有那些扩展程序推荐一下
要安装Chrome扩展程序来一键禁用页面上的所有动画和过渡,以下是一些推荐的扩展程序: Toggle CSS Animations and Transitions 功能:此扩展程序允许用户轻松地在网页上切换CSS动画和过渡的开启与关闭状态。使用方法:安装后&#x…...
读人工智能时代与人类未来笔记19_读后总结与感想兼导读
1. 基本信息 人工智能时代与人类未来 (美)亨利基辛格,(美)埃里克施密特,(美)丹尼尔胡滕洛赫尔 著 中信出版社,2023年6月出版 1.1. 读薄率 书籍总字数145千字,笔记总字数39934字。 读薄率39934145000≈27.5% 1.2. 读厚方向 千脑智能 脑机穿越 未来呼啸而来 …...
个人影响力
华人出了个黄仁勋,世界级影响力,还是近代华人历史首次出现具有如此影响力的人。凭借的逻辑是什呢?在人工智能领域有巨大影响力。...
OBS实现多路并发推流
OBS实现多路并发推流 解决方案速览相关依赖下载安装多路推流 解决方案速览 利用OBS进行本地直播画面的构建。 使用Multiple RTMP outputs plugin进行多路并发推流。 相关依赖下载安装 OBS软件 # OBS官网 https://obsproject.com/zh-cnMultiple RTMP outputs plugin # 插件官网…...
JDK环境配置、安装
DK环境配置(备注:分32位与64位JDK,32位电脑只能按照32位JDK,64位电脑兼容32、64位JDK) 一、检查自己电脑是否安装过JDK 1.在电脑屏幕左下角,输入命令提示符CMD,打开命令提示符应用 2.在打开界…...
莱富康压缩机的选型软件介绍
下载地址 https://download.csdn.net/download/jintaihu/16295771 安装步骤 这里可以选制冷系统的参数,最后在压缩机列表内选择推荐的型号。...
Pr 2024下载安装,Adobe Premiere专业视频编辑软件安装包获取!
Premiere Pro,简称PR,无论是想要剪辑家庭录像,还是制作专业的影视作品,Premiere Pro都能为您提供强大的支持。 Premiere Pro以其卓越的编辑功能和强大的性能,助力用户在视频创作的道路上不断突破自我。 它具备丰富的视…...
MySQL事务与MVCC
文章目录 事务和事务的隔离级别1.为什么需要事务2.事务特性1_原子性(atomicity)2_一致性(consistency)3_持久性(durability)4_隔离性(isolation) 3.事务并发引发的问题1_脏读2_不可重…...
【数据结构】链式二叉树详解
个人主页~ 链式二叉树基本内容~ 链式二叉树详解 1、通过前序遍历的数组来构建二叉树2、二叉树的销毁3、二叉树节点个数4、二叉树叶子节点个数5、二叉树第k层节点个数6、二叉树查找7、前序遍历8、中序遍历9、后序遍历10、层序遍历与检查二叉树是否为完全二叉树Queue.hQueue.c层序…...
PHP面向对象编程总结
PHP面向对象编程总结 学习PHP时,面向对象编程(OOP)往往是一个重要的里程碑。PHP的OOP功能提供了一种更加模块化、可扩展和易于维护的代码结构。在本文中,我们将深入探讨PHP面向对象编程的各个方面,包括类与对象、访问控…...
linux中的“->“符号
问: "->“符号在Linux中是什么意思。 例如:当我在一个特定的文件夹中执行ls -l时,我得到了以下结果。 lrwxrwxrwx 1 root root 11 May 16 13:30 nexus3 -> /nexus-data lrwxrwxrwx 1 root root 29 Feb 27 12:23 ojdbc.jar -&g…...
MySql 数据类型选择与优化
选择优化的数据类型 更小的通常更好 一般情况下尽量使用可以正确存储数据的最小类型。更小的数据类型通常更快,因为它们占用更少的磁盘,内存和CPU缓存,并且处理时需要的CPU周期也更少。但也要确保没有低估需要存储值的范围。 简单就好 简单的…...
HTML静态网页成品作业(HTML+CSS)——家乡常德介绍网页(1个页面)
🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有1个页面。 二、作品演示 三、代…...
【ARMv7-A】——CP15 协处理器
文章目录 CP15 协处理器指令格式MCR 示例MRC 示例寄存器C0 identification registersC1 system control registersC2 memory protection and control registersC3 memory protection and control registersC4 Not usedC5 Memory system fault registers...
学习笔记:(2)荔枝派Nano开机显示log(全志F1C200S)
学习笔记:TF卡启动荔枝派Nano(全志F1C200S) 1.u-boot配置2.需要配置LCD的显示设备树1.u-boot配置 ARM architecture Enable graphical uboot console on HDMI, LCD or VGAx:480,y:272,depth:...
Qt——升级系列(Level Two):Hello Qt 程序实现、项目文件解析、
Hello Qt 程序实现 使用“按钮”实现 纯代码方式实现: // Widget构造函数的实现 Widget::Widget(QWidget *parent): QWidget(parent) // 使用父类构造函数初始化QWidget,传入父窗口指针, ui(new Ui::Widget) // 创建Ui::Widget类的实例,并…...
VUE阻止浏览器记住密码若依CLOUD(INPUT框密码替换圆点)
网上找的要不就是缺少方法要不就是不好用,故发一个完整的 粘贴可用版本 <el-form-item prop"password"><el-input v-model"loginForm.pwdCover" type"text" name"pwd" id"pwd" placeholder"密码" autoco…...
GPT-4o:人工智能新纪元的启航者
引言 随着人工智能技术的不断进步,我们见证了从简单的自动化工具到复杂的决策支持系统的演变。在这一演变过程中,OpenAI的GPT系列无疑占据了领导地位。最近,GPT-4o的推出再次引发了关于AI能力的广泛讨论。本文将对GPT-4o进行详细评价&#x…...
XDMA驱动内存读写测试指南:从reg_rw工具使用到AXI4时序分析
XDMA驱动内存读写测试指南:从reg_rw工具使用到AXI4时序分析 在FPGA与主机间的高速数据交互场景中,XDMA(Xilinx DMA)作为PCIe协议栈的核心引擎,其内存读写性能直接决定了系统整体吞吐量。本文将深入剖析reg_rw工具的底层…...
RTX 3090环境下的BEVFusion实战部署:从源码编译到多模态训练调优
1. RTX 3090环境准备与BEVFusion适配 在RTX 3090上部署BEVFusion最大的挑战就是硬件与软件版本的兼容性问题。官方推荐的环境是CUDA 9.2和PyTorch 1.3.1,但这对于RTX 3090来说完全不适用——30系显卡需要CUDA 11才能发挥全部性能。我刚开始尝试直接按照官方文档安装…...
stealth.js全解析:40+反检测补丁的配置与优化技巧
Stealth.js全解析:40反检测补丁的配置与优化技巧 在当今的Web自动化领域,反检测技术已成为开发者必须掌握的核心技能之一。无论是数据采集、自动化测试还是其他需要模拟真实用户行为的场景,如何让脚本"隐形"都是决定成败的关键因素…...
基于Xinference-v1.17.1的嵌入式Linux开发指南
基于Xinference-v1.17.1的嵌入式Linux开发指南 1. 引言 嵌入式设备上的AI推理一直是个技术挑战,特别是在资源受限的环境中部署大模型。Xinference-v1.17.1作为一个开源推理框架,为嵌入式Linux系统提供了轻量级的AI模型部署方案。无论你是想在树莓派上运…...
智能农业大棚设计详解
基于单片机的智能农业大棚设计温湿度二氧化碳光照(详细设计说明 10119-基于单片机的智能农业大棚设计温湿度二氧化碳光照(详细设计说明书proteus源代码原理图元件清单) 功能需求: 智慧农业大棚的底层理念是实现智能化控制与生产&a…...
AIVideo效果对比展示:不同参数下的视频生成质量评测
AIVideo效果对比展示:不同参数下的视频生成质量评测 1. 开场白:参数设置对视频效果的影响 你有没有遇到过这样的情况:用AI生成视频时,明明输入的内容一样,但出来的效果却天差地别?有时候画面模糊不清&…...
微信小程序集成AI能力:调用LFM2.5-1.2B-Thinking-GGUF实现智能聊天与内容生成
微信小程序集成AI能力:调用LFM2.5-1.2B-Thinking-GGUF实现智能聊天与内容生成 1. 为什么要在小程序里集成AI 微信小程序作为轻量级应用平台,用户使用门槛低、传播效率高。但传统小程序功能相对单一,缺乏智能化交互体验。通过集成LFM2.5-1.2…...
Wan2.2-T2V-A5B开发环境配置:IntelliJ IDEA远程调试与GPU服务器连接
Wan2.2-T2V-A5B开发环境配置:IntelliJ IDEA远程调试与GPU服务器连接 你是不是也遇到过这种烦恼?本地电脑性能有限,跑个稍微大点的模型就卡成幻灯片,风扇呼呼作响,感觉下一秒就要起飞。但代码和模型都部署在远端的GPU服…...
OpenClaw是什么?OpenClaw能做什么?OpenClaw详细介绍及保姆级部署教程-周红伟
1. 什么是 OpenClaw? 1.1 核心定义 OpenClaw(前身为 Clawdbot/Moltbot)是一款开源、本地优先、可执行任务的 AI 自动化代理引擎,遵循 MIT 协议。它以自然语言指令为驱动,在本地或私有云环境中完成文件操作、流程编排…...
FUTURE POLICE语音模型重装系统后快速恢复部署指南
FUTURE POLICE语音模型重装系统后快速恢复部署指南 重装系统这事儿,对开发者来说,有时候就跟电脑的“大扫除”一样,图个干净利落。但扫除完,看着空空如也的桌面和命令行,要重新把那些吃饭的家伙——比如你正在跑的FUT…...
