【Linux】IP协议

目录

IP报头格式

网段划分

特殊的IP地址

IP地址的数量限制

私有IP地址和公网IP地址

路由

IP报文分片

1.粗粒度谈谈分片

a. 确保将所有的分片全部聚到一起(相同的标识)

 b. 片偏移排序(完成组转)

2.分片细节

数据链路层

MAC地址

mac帧

局域网的通信原理


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. 类似于一个结束标记 .
13位分片偏移(framegament offset) : 是分片相对于原始 IP 报文开始处的偏移 . 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的 . 因此 , 除了最后一个报文之外 , 其他报文的长度必须是8 的整数倍 ( 否则报文就不连续了 ).
8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数 . 一般是 64. 每次经过一个路由 , TTL -= 1, 一直减到 0 还没到达 , 那么就丢弃了 . 这个字段主要是用来防止出现路由循环
8位协议: 表示上层协议的类型
16位头部校验和: 使用 CRC 进行校验 , 来鉴别头部是否损坏 .
32位源地址和32位目标地址: 表示发送端和接收端 .
选项字段 ( 不定长 , 最多 40 字节 ):

IP协议的本质工作:提供一种能力,将数据跨网络从A主机发送到B主机!

用户需要的是:提供一种能力,将数据可靠的跨网络从A主机送到B主机

IP=目标网络+目标主机

1.报头和有效载荷如何分离?固定长度+自描述字段(首部+总),报头20个字节

2.如何将有效载荷交付给上层?报头中的8位协议

网段划分

  1. 分类划分法:A、B、C、D、E
  2. 子网掩码

IP地址分为两部分,网络号和主机号

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

  • 不同的子网其实就是把网络号相同的主机放到一起。
  • 如果在子网中新增一台之际,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复。
  1. 路由器的本质也是一个子网的主机,也要配置IP地址。
  2. 为了实现跨网段传输,路由器一定至少要连接两个子网 ,也就相当于同时在两个子网,因此路由器可以配置多个IP。
  3. 路由器一般是一个子网中的第一台设备,一般他的IP地址都是:网络号.1。
  4. 路由器的功能,ip报文的转发,不仅仅如此,还构建了子网(局域网)。

手动管理子网内的IP,是一个相当麻烦的事情。

  • 有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便。
  • 一般的路由器都带有DHCP功能,因此路由器也可以看作一个DHCP服务器。

过去曾经提出一种划分网络号和主机号的方案,把所有的IP地址分为五类,如下图所示:

  • A类 0.0.0.0 到 127.255.255.255
  • B类 128.0.0.0 到 191.255.255.255
  • C类 192.0.0.0 到 223.255.255.255
  • D类 224.0.0.0 到 239.255.255.255
  • E类 240.0.0.0 到 247.255.255.255

随着Internet的迅速发展,这种划分方案的局限性很快就显现出来了,大多数组织都申请B类网络地址,因为B类网络号和主机号都比较多,好申请,导致B类地址很快就分配完了,而A类却浪费了大量地址。

例如 , 申请了一个 B 类地址 , 理论上一个子网内能允许 6 5 千多个主机 . A 类地址的子网内的主机数更多 . 然而实际网络架设中, 不会存在一个子网内有这么多的情况 . 因此大量的 IP 地址都被浪费掉了 .

针对这种情况 提出了心得划分方案,成为CIDR

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;
  • IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;
  • 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关

例如

理论上上述划分一个子网可容纳256台主机,但是 .0 和 .255两个IP地址分别被用来当网络号, 广播地址,因此实际可容纳的254台主机。

那么一个IP地址对应的网络号要怎么计算出来呢?

IP地址:140.252.20.68          == 140.252.20. 0100 0100

子网掩码:255.255.255.240   == 255.255.255.1111 0000

两者进行&运算即可

特殊的IP地址

  • IP地址中的主机地址全部设为0, 就成为了网络号, 代表这个局域网;
  • IP地址中的主机地址全部设为1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*IP地址用于本机环回(loop back)测试,通常是127.0.0

IP地址的数量限制

CIDR(Classless Interdomain Routing):

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个32位的正整数. 通常用一串 "0" 来结尾;
  • IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号;
  • 网络号和主机号的划分与这个IP地址是A类、B类还是C类无关
CIDR 在一定程度上缓解了 IP 地址不够用的问题 ( 提高了利用率 , 减少了浪费 , 但是 IP 地址的绝对上限并没有增加 ), 仍然 不是很够用. 这时候有三种方式来解决:
  • 动态分配IP地址: 只给接入网络的设备分配IP地址. 因此同一个MAC地址的设备, 每次接入互联网中, 得到 的IP地址不一定是相同的;
  • NAT技术(后面会重点介绍):私有地址不断被替换的过程;
  • IPv6: IPv6并不是IPv4的简单升级版. 这是互不相干的两个协议, 彼此并不兼容; IPv616字节128位来表示一个IP地址; 但是目前IPv6还没有普及;

私有IP地址和公网IP地址

如果一个组织内部组建局域网 ,IP 地址只用于局域网内的通信 , 而不直接连到 Internet , 理论上 使用任意的 IP 地址都
可以 , 但是 RFC 1918 规定了用于组建局域网的私有 IP 地址
  • 10.*,8位是网络号,16,777,216个地址
  • 172.16.172.31.,12位是网络号,1,048,576个地址
  • 192.168.*,16位是网络号,65,536个地址

包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP)

从内网到公网的过程中,不断用路由器的WAN口IP替换src ip地址 ,这个技术就做NAT技术

那么为什么要使用NAT技术呢?IP地址不足,不同子网可以用相同的内网IP.

路由

目标网络        下一跳的路由器        子网掩码        U正在使用G表示路由器

查路由表的方法

拿着目标主机的IP & Genmask == Destination 进行比对

IP数据包的传输过程也和问路一样.
  • IP数据包, 到达路由器时, 路由器会先查看目的IP;
  • 路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器;
  • 依次反复, 一直到达目标IP地址

实际上,在一台主机中,报文并没有通过网络层直接发出去,而是交给了自己的下一层协议(数据链路层),而数据链路层,不能一次发送过大的报文!要求上层不能给其交付过大的报文,上限要求即下图所示mtu的值

IP报文分片

1.粗粒度谈谈分片

前置问题:怎么知道一个IP报文是被分片了呢?片偏移!=0 || 更多分片==1

a. 确保将所有的分片全部聚到一起(相同的标识)

组装过程如何识别是否有丢失分片

  • 丢第一个:如果不存在偏移量为0的,便是丢失了第一个
  • 丢中间:如果偏移量+分片长度不等于下一个分片的偏移量,便是丢失了中间分片
  • 丢最后:如果不存在3位标志,第三位为0的话,就代表最后一个分片丢失了

 b. 片偏移排序(完成组转)

但是实际上,并不建议分片,会增加丢包概率,组装失败,报文需要进行重发

2.分片细节

假设一个3000字节的IP报文,进行分片,需分成3个,大小分别为1500,1500,40

因为每个分片,都需要添加报头(20字节),后续才能根据标识进行组装.

数据链路层

直接相连的主机之间,进行数据交付的问题

MAC地址

在同一个局域网中,区分特定的主机

mac帧

1. mac帧如何做到解包和封装?

定长报文 

2.如何做到分用

mac帧只在局域网中有效,转发是由IP报头进行决策。

mtu是mac帧有效载荷的大小

传输层--MSS

数据链路层--MTU

局域网的通信原理

可能会发生数据碰撞 ---》碰撞避免算法

局域网中,主机越多,发生数据碰撞的概率就越高;因此,我们可以划分碰撞域,减少局域网碰撞,这便是交换机的作用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

http模块 服务器端如何响应(获取)静态资源?

一、静态资源与动态资源介绍: (1)静态资源 内容长时间不改变的资源。eg:图片、视频、css js html文件、字体文件... (2)动态资源 内容经常更新的资源。eg:百度首页、淘宝搜索列表... 二、服…

引领向量数据库技术新变革,Milvus 2.4 正式上线

备受关注的 Milvus 2.4 正式上线! 作为向量数据库赛道的领军者,Zilliz 一直致力于推动向量技术的进步与创新。本次发布中,Milvus 新增支持基于 NVIDIA 的 GPU 索引—— CUDA 加速图形索引(CAGRA),突破了现有向量搜索的能力。 GPU 索引是向量数据库技术中的重要里程碑,…

【码银送书第十六期】大模型在金融行业的应用场景和落地路径

作者:林建明 来源:IT阅读排行榜 本文摘编自《AIGC重塑金融:AI大模型驱动的金融变革与实践》,机械工业出版社出版 文章转自:大模型在金融行业的应用场景和落地路径 这是最好的时代,也是最坏的时代。尽管…

Linux系统使用Docker部署个人IT工具箱IT-Tools结合内网穿透实现公网访问

作为程序员,在日常工作中,需要借助一些工具来提高我们工作效率,IT-Tools是为开发人员度身打造的一套便捷在线工具。它提供全面功能,使开发者能以更高效方式完成任务。经由IT-Tools,开发人员能轻松应对各类技术挑战&…

【随笔】Git -- 高级命令(上篇)(六)

💌 所属专栏:【Git】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! 💖 欢迎大…

CVPR 2024 | 风格迁移和人像生成汇总!扩散模型diffusion用于经典AIGC方向

风格迁移 1、DEADiff: An Efficient Stylization Diffusion Model with Disentangled Representations 基于文本到图像扩散模型在迁移参考风格方面具有巨大潜力。然而,当前基于编码器的方法在迁移风格时显著损害了文本到图像模型的文本可控性。本文提出DEADiff来解决…

解决win10 cmd下运行python弹出windows应用商店

Windows 10 的五月更新为 Microsoft Store 应用商店带来了 Python 3.7 原因是这个环境变量“C:\Users\hongc\AppData\Local\Microsoft\WindowsApps”的优先级比我们创建的python环境变量优先级高 所以我们只需要删除这个环境变量即可 但是为了不影响正常功能 推荐将Python的…

【机器学习】数据探索---python主要的探索函数

在上一篇博客【机器学习】数据探索(Data Exploration)—数据质量和数据特征分析中,我们深入探讨了数据预处理的重要性,并介绍了诸如插值、数据归一化和主成分分析等关键技术。这些方法有助于我们清理数据中的噪声、消除异常值,以及降低数据的…

每日一题(相交链表 )

欢迎大家来我们主页进行指导 LaNzikinh-CSDN博客 160. 相交链表 - 力扣(LeetCode) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节…

【蓝桥杯第十三届省赛B组】(详解)

九进制转十进制 #include <iostream> #include<math.h> using namespace std; int main() {cout << 2*pow(9,3)0*pow(9,2)2*pow(9,1)2*pow(9,0) << endl;return 0; }顺子日期 #include <iostream> using namespace std; int main() {// 请在此…

20-日志处理(上):如何设计日志包并记录日志?

通过记录日志&#xff0c;可以完成一些基本功能&#xff0c;比如开发、测试期间的Debug&#xff0c;故障排除&#xff0c;数据分析&#xff0c;监控告警&#xff0c;以及记录发生的事件等。 如何设计日志包 基础功能 基础功能&#xff0c;是优秀日志包必备的功能&#xff0c;能…

勒石燕然的窦宪,打得匈奴只得为害欧洲了

匈奴&#xff0c;一个与汉族争斗了数百年的民族&#xff0c;在大大小小上百场战役中&#xff0c;双方一直打得你来我往。在东汉&#xff0c;一个罪臣指挥了汉民族与匈奴的终局之战。更令人想不到的是&#xff0c;终局之战北匈奴的战败却整得离中国相距甚远的欧洲崩溃了。 窦家…

ARP类型

地址解析协议ARP即可实现将IP地址解析为MAC地址 动态ARP 动态ARP表项由ARP协议通过ARP报文自动生成和维护&#xff0c;可以被老化&#xff0c;可以被新的ARP报文更新&#xff0c;也可以被静态ARP表项覆盖。 动态ARP适用于拓扑结构复杂、通信实时性要求高的网络。 静态ARP …

单元测试mockito(一)

1.单元测试 1.1 单元测试的特点 ●配合断言使用(杜绝System.out) ●可重复执行 。不依赖环境 ●不会对数据产生影响 ●spring的上下文环境不是必须的 ●一般都需要配合mock类框架来实现 1.2 mock类框架使用场景 要进行测试的方法存在外部依赖(如db,redis,第三方接口调用等),为…

Linux系统Docker如何部署Nextcloud结合内网穿透实现公网访问本地资源?

文章目录 1. 安装Docker2. 使用Docker拉取Nextcloud镜像3. 创建并启动Nextcloud容器4. 本地连接测试5. 公网远程访问本地Nextcloud容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Linux Ubuntu系统使用Docker快速部署Nextcl…

从vrrp、bfd、keepalived到openflow多控制器--理论篇

vrrp 在一个网络中&#xff0c;通常会使用vrrp技术来实现网关的高可用。 vrrp&#xff0c;即Virtual Router Redundancy Protocol&#xff0c;虚拟路由冗余协议。 应用场景 典型的如下面这个例子&#xff1a; 当Router故障后&#xff0c;将会导致HostA-C都无法连接外部的I…

阿里AI编码助手“通义灵码”安装及使用

1.介绍 “通义灵码”是一款基于阿里云通义代码大模型打造的智能编码助手&#xff0c;产品于2023年10月31日云栖大会上&#xff0c;正式对外发布。 核心使用场景&#xff1a;代码智能生成和研发智能问答。 主要功能点&#xff1a; &#xff08;1&#xff09;行级/函数级实时…

大数据 - Spark系列《十五》- spark架构

Spark系列文章&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《…

【数字孪生平台】使用 Three.js 以 3D 形式可视化日本新宿站地图

在本文中&#xff0c;我们将使用日本新宿站的室内地图数据&#xff0c;并使用 Three.js 将其进行 3D 可视化。更多精彩内容尽在数字孪生平台。 使用的数据 这次&#xff0c;我们将使用日本空间信息中心发布的“新宿站室内地图开放数据”的集成版本&#xff08;ShapeFile&#…

区间预测 | Matlab实现带有置信区间的BP神经网络时间序列未来趋势预测

区间预测 | Matlab实现带有置信区间的BP神经网络时间序列未来趋势预测 目录 区间预测 | Matlab实现带有置信区间的BP神经网络时间序列未来趋势预测预测效果基本介绍研究回顾程序设计参考资料预测效果 基本介绍 BP神经网络(Backpropagation neural network)是一种常用的人工神…