网络层协议--ip协议

news2024/12/27 11:20:00

目录

引言

IP协议

协议头格式

16位标识与3位标志与13位片偏移讲解

网段划分(重要)

DHCP技术

CIDR技术

特殊的IP地址

广播主机

IP地址的数量限制

私有IP地址和公网IP地址

路由:在复杂的网络结构中, 找出一条通往终点的路线

简单认识路由器

路由表生成算法



引言

前面介绍了应用层协议--http

传输层协议--tcp、udp

现在学习网络层--ip

后续最后一篇文章,关于数据链路层协议的介绍。

网络层:在复杂的网络环境中确定一个合适的路径。

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

16位标识与3位标志与13位片偏移讲解

由于IP的总长度是有上限的,因此传输下来的TCP报文可能会被分片。

就是中间这一栏,进行分片控制。

每个分片都要分到报头

后续片偏移的计算不能加上固定报头,只能算第一个报文的偏移时加上报头(因为我们的视角是一个完整的IP报文,只不过被分割

实际上片偏移是偏移量 / 8

其实不建议分片--可能增加丢包概率

网段划分(重要)

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

DHCP技术

DHCP(动态主机配置协议)是一种网络协议,用于自动分配和配置网络设备的IP地址和其他网络参数。以下是关于DHCP技术的一些主要特点和信息:

1. **基本功能**:DHCP允许网络设备在加入网络时自动获取IP地址、子网掩码、默认网关和DNS服务器地址等配置信息,从而简化了网络配置过程。

2. **工作原理**:DHCP基于客户端-服务器模型。客户端(如计算机或手机)向网络中的DHCP服务器发送请求,服务器则根据预定的策略和地址池为客户端分配IP地址和其他配置信息。

3. **地址分配策略**:DHCP提供三种IP地址分配策略:

   - 手工分配:管理员为特定设备静态绑定固定的IP地址。

   - 自动分配:服务器为客户端分配无限租期的IP地址。

   - 动态分配:服务器为客户端分配具有租期的IP地址,租期到期后可重新分配。

4. **资源节约与自动维护**:DHCP通过自动分配和释放IP地址,有效地管理和利用IP资源。这种自动维护机制确保了IP地址的合理使用,减少了地址浪费。

5. **应用场景**:DHCP广泛应用于企业、学校、家庭等网络环境中,特别是在大型网络中,它可以快速为新设备提供网络设置,降低了网络管理的复杂性和成本。

综上所述,DHCP技术通过自动化网络配置过程,提高了网络管理的效率和便捷性,同时通过有效的IP资源管理,实现了网络资源的节约和优化。

过去曾经提出一种划分网络号和主机号的方案 , 把所有 IP 地址分为五类 , 如下图所示 ( 该图出 自 [TCPIP])
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类地址很快就分配完了 , A 类却浪费了大量地址。
例如, 申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机(同一ip网络号). A类地址的子网内的主机数更多.然而实际网络架设中, 不会存在一个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了。
针对这种情况提出了新的划分方案 , 称为 CIDR(Classless Interdomain Routing)。

CIDR技术

引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
子网掩码也是一个 32位的正整数. 通常用一串 "0" 来结尾;
将IP地址和子网掩码进行 "按位与" 操作, 得到的结果就是网络号(注意,将 IP 地址与网络掩码结合时,通过逻辑“与”操作,可以得到 网络地址,这个网络地址 只包含网络号,不包含主机号,因为这是网络层面的通信协议 );
网络号和主机号的划分与这个IP地址是A类、B类还是C类无关;
可见,IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围;
IP 地址和子网掩码还有一种更简洁的表示方法 , 例如 140.252.20.68/24,表示IP地址为140.252.20.68, 子网掩码的高24位是1,也就是255.255.255.0
通过CIDR,可以进一步对网络地址中的主机号进行细分,对网络号进行细分。

特殊的IP地址

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

广播主机

广播主机是指在网络上能够发送广播消息的主机。在计算机网络中,广播是一种通信方式,其中一个主机可以向网络上的所有其他主机发送信息,而不需要知道它们的单个地址。以下是关于广播主机的几个关键点:

### 广播地址
- **广播地址** 是一个特殊的IP地址,当数据包被发送到这个地址时,网络上的所有主机都会接收这个数据包
- 在IPv4中,广播地址通常是网络地址的最高位加上全1的主机部分。例如,如果网络地址是192.168.1.0,子网掩码是255.255.255.0,那么广播地址就是192.168.1.255。

### 广播的类型
- **直接广播**:发送到特定网络的广播地址,例如上述的192.168.1.255,只有192.168.1.0网络上的主机能够接收到。
- **有限广播**:使用IP地址255.255.255.255进行的广播,通常用于本地网络,不会被路由器转发。
- **定向广播**:在某些情况下,可以对子网进行定向广播,这需要更复杂的子网划分。

### 广播主机的作用
- **网络发现**:广播可以用来发现网络上的其他主机,例如使用ARP(地址解析协议)来查找某个IP地址对应的MAC地址。
- **服务公告**:服务可以宣布它们的存在,例如DHCP服务器通过广播来提供IP地址配置信息。
- **网络管理**:网络管理员可以使用广播来发送网络管理命令,如重启或关闭网络上的所有主机。

### 广播的限制
- **广播风暴**:广播可能会导致网络拥塞,因为每个主机都需要处理广播消息。
- **安全性问题**:由于广播消息可以被网络上的任何主机接收,因此可能会带来安全风险。
- **不支持广播的网络**:在许多现代网络技术中,如IPv6,广播被设计为不支持的,以避免广播风暴和相关问题。
由于这些限制,现代网络设计倾向于使用多播和单播通信,而不是广播。多播允许消息发送到一组特定的主机,而不是网络上的所有主机。
 

IP地址的数量限制

我们知道 , IP 地址 (IPv4) 是一个 4 字节 32 位的正整数 . 那么一共只有 2 32 次方 个 IP 地址 , 大概是 43 亿左右 . 而TCP/IP协议规定 , 每个主机都需要有一个 IP 地址 .
这意味着 , 一共只有 43 亿台主机能接入网络么 ?
实际上 , 由于一些特殊的 IP 地址的存在 , 数量远不足 43 亿 ; 另外 IP 地址并非是按照主机台数来配置的 , 而是每一个网卡都需要配置一个或多个 IP 地址 .
CIDR 在一定程度上缓解了 IP 地址不够用的问题 ( 提高了利用率 , 减少了浪费 , 但是IP地址的绝对上限并没有增加 ), 仍然不是很够用 . 这时候有三种方式来解决
动态分配IP地址: 只给接入网络的设备分配IP地址. 因此 同一个MAC地址的设备, 每次接入互联网中, 得到的IP地址不一定是相同的;
NAT技术(后面会重点介绍);
IPv6: IPv6并不是IPv4的简单升级版. 这是 互不相干的两个协议, 彼此并不兼容; IPv6用 16字节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);
一个路由器可以配置两个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路由器根据它的路由表决定下一跳地址
注意:按位与之后,只能得到网络号,而主机号使用网络号最后为0的位去分别置1去标识。
在这个例子中,192.168.1.0 就是网络地址,它只包含网络号,不包含主机号。主机号是在网络地址基础上通过改变最后一个八位组(在这个例子中)来标识网络内的不同主机。

简单认识路由器

路由表生成算法

路由表可以由网络管理员手动维护 ( 静态路由 ), 也可以通过一些算法自动生成 ( 动态路由 ).
请同学们课后自己调研一些相关的生成算法 , 例如距离向量算法 , LS 算法 , Dijkstra 算法等 .

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

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

相关文章

区块链期末复习3.2:比特币脚本

目录 一、输入输出脚本的执行 二、简单脚本实例及压栈过程 1.P2PK(pay to public key hash) 2、P2PH(pay to public key hash) 3.多重签名 4.比特币脚本的应用: 三、其他常见指令 1.OP_EQUAL与OP_EQ…

【Mac】终端改色-让用户名和主机名有颜色

效果图 配置zsh 1.打开终端,进入.zshrc配置 cd ~ vim .zshrc2.添加如下配置并保存 # 启用命令行颜色显示 export CLICOLOR1 ## 加载颜色支持 autoload -U colors && colors # 配置 zsh 提示符 PROMPT"%{$fg_bold[red]%}%n%{$reset_color%}%{$fg_bol…

CUDA各种内存和使用方法

文章目录 1、全局内存2、局部内存3、共享内存3.1 静态共享内存3.2 动态共享内存 4、纹理内存5、常量内存6、寄存器内存7、用CUDA运行时API函数查询设备CUDA 错误检测 1、全局内存 特点:容量最大,访问延时最大,所有线程都可以访问。 线性内存…

青少年科普教学系统平台的设计与实现springboot

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱,出错率高,信息安…

Vue2:v-for创建echart图表时不能使用动态ref,要使用动态id

项目中需要创建一组图表+表格的组合,一共15组,为了便于维护,希望使用v-for来创建,而不是写出15组<div>,但是动态指定echart的ref时,频繁遭遇init失败,提示“TypeError: this.dom.getContext is not a function”。过程记录如下。 实现效果 要实现的效果如下图,…

Ch9 形态学图像处理

Ch9 形态学图像处理 blog点此处&#xff01;<--------- 四大算子相应性质。 腐蚀、膨胀、开闭之间的含义、关系 文章目录 Ch9 形态学图像处理预备知识(Preliminaries)膨胀和腐蚀(Dilation and Erosion)腐蚀膨胀膨胀与腐蚀的对偶关系 开闭操作(Opening and Closing)开运算闭…

likeAdmin架构部署(踩坑后的部署流程

1、gitee下载 https://gitee.com/likeadmin/likeadmin_java.git 自己克隆 2、项目注意 Maven&#xff1a;>3.8 ❤️.9 (最好不要3.9已经试过失败 node &#xff1a;node14 (不能是18 已经测试过包打不上去使用14的换源即可 JDK&#xff1a;JDK8 node 需要换源 npm c…

如何解决 ‘adb‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的问题

在cmd中输入 adb &#xff0c;显示 ‘adc‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件的问题 解决办法&#xff1a;在环境变量中添加adb所在的路径 1、找到 adb.exe 的所在的文件路径&#xff0c;一般在 Android 安装目录下 \sdk\platform-tools\adb.exe…

使用 OpenCV 在图像中添加文字

在图像处理任务中&#xff0c;我们经常需要将文本添加到图像中。OpenCV 提供了 cv2.putText() 函数&#xff0c;可以很方便地在图像上绘制文本&#xff0c;支持多种字体、颜色、大小和位置等参数。 本文将详细介绍如何使用 OpenCV 在图像中添加文字&#xff0c;介绍 cv2.putTe…

解线性方程组

直接三角分解&#xff08;LU分解&#xff0c;Doolittle分解&#xff09; ATM分解&#xff08;追赶法&#xff0c;Crout分解&#xff0c;克劳特分解&#xff09; 平方根法&#xff08;Cholesky分解&#xff0c;乔列斯基分解&#xff09; 矩阵的范数

17.2、应急事件场景与处理流程

目录 常见网络安全应急事件场景网络安全应急处理流程应急演练类型 常见网络安全应急事件场景 应急事件的处理场景&#xff0c;分成四类场景&#xff0c;恶意程序事件&#xff0c;网络攻击事件&#xff0c;还有网站相关的一些安全事件&#xff0c;最后是拒绝服务事件 恶意程序…

并发编程 - 死锁的产生、排查与解决方案

在多线程编程中&#xff0c;死锁是一种非常常见的问题&#xff0c;稍不留神可能就会产生死锁&#xff0c;今天就和大家分享死锁产生的原因&#xff0c;如何排查&#xff0c;以及解决办法。 线程死锁通常是因为两个或两个以上线程在资源争夺中&#xff0c;形成循环等待&#xf…

关于埃斯顿机器人文件导出或者系统日志导出

关于埃斯顿机器人文件导出或者日志导出&#xff0c;登录模式&#xff0c;选择高级设置&#xff0c;控制器备份恢复 选择U盘导入地址&#xff0c;点击导出&#xff0c;等待时间30秒就可以查看文件格式和系统日志

5G CPE接口扩展之轻量型多口千兆路由器小板选型

多口千兆路由器小板选型 方案一: 集成式5口千兆WIFI路由器小板方案二:交换板 + USBwifiUSB WIFI选型一USBwifi选型二:四口千兆选型一四口千兆选型二:四口千兆选型三:部分5G CPE主板不支持Wifi,并且网口数量较少,可采用堆叠方式进行网口和wifi功能 扩展,本文推荐一些路由…

PromptGIP:Unifying lmage Processing as Visual Prompting Question Answering

“Unifying Image Processing as Visual Prompting Question Answering” 文章提出了一种名为 PromptGIP 的通用模型&#xff0c;将图像处理任务统一为视觉提示问答范式&#xff0c;在多个图像处理任务上展现出良好性能&#xff0c;为通用图像处理提供了新的思路和方法。 confe…

【MySQL】索引 面试题

文章目录 适合创建索引的情况创建索引的注意事项MySQL中不适合创建索引的情况索引失效的常见情况 索引定义与作用 索引是帮助MySQL高效获取数据的有序数据结构&#xff0c;通过维护特定查找算法的数据结构&#xff08;如B树&#xff09;&#xff0c;以某种方式引用数据&#xf…

Doxygen 使用指南

Doxygen 是一个文档生成工具&#xff0c;可以从源代码中的注释生成高质量的文档&#xff0c;支持多种编程语言&#xff08;如 C/C、Python、Java 等&#xff09;。以下是 Doxygen 的基本使用方法。 1. 安装 Doxygen 1.1 下载 Doxygen 访问 Doxygen 官网。根据操作系统选择合适…

Jensen-Shannon Divergence:定义、性质与应用

一、定义 Jensen-Shannon Divergence&#xff08;JS散度&#xff09;是一种衡量两个概率分布之间差异的方法&#xff0c;它是Kullback-Leibler Divergence&#xff08;KL散度&#xff09;的一种对称形式。JS散度在信息论、机器学习和统计学等领域中具有广泛的应用。 给定两个概…

一个特别的串口通讯

背景 设备是EPICS流式细胞仪&#xff0c;这个设备的控制系统是在DOS系统上的。数据存储在硬盘上&#xff0c;不带串口通讯功能。我们遇到了这个设备后&#xff0c;就开发了一个DOS下的执行程序通过串口&#xff0c;将最新的数据自动上传到服务器上。 编译工具 Turbo C 数据…

4.系统学习-集成学习

集成学习 前言Bias and Variance过拟合&#xff08;overfitting&#xff09;与欠拟合&#xff08;underfitting&#xff09;集成学习为什么有效&#xff1f;Blending 模型集成Stakcing 模型集成Bagging模型集成Bagging 模型集成算法流程&#xff1a;Boosting模型集成作业 前言 …