【计算机网络】网络层IP协议

news2024/9/23 5:30:29

文章目录

  • 一、认识IP协议
  • 二、IP协议头部格式
  • 三、IP地址划分
    • 1. IP地址分类
    • 2. 子网划分
  • 四、IP地址数量危机
    • 1. IP地址的数量限制
    • 2. NAT技术
  • 五、私网IP和公网IP
  • 六、路由
    • 1. 认识路由
    • 2. 路由表生成算法


一、认识IP协议

IP协议是Internet Protocol(互联网协议)的简称,它是一种网络层的协议。IP协议的主要作用是在互联网中传输数据包(也称为IP数据包),它定义了数据包在互联网上如何寻址、路由和传输的方式

IP协议是一种面向无连接的协议,不保证数据包的可靠传输,也不保证数据包的传输顺序。因此,IP协议一般与传输层的协议(如TCP协议)一起使用,以保证数据包的可靠传输和有序性

IP协议还定义了IP地址的格式和分配方式。IP地址是一个32位的二进制数,通常用点分十进制表示法来表示。在互联网中,每个设备都必须拥有唯一的IP地址,这样才能与互联网相通。

IP协议是互联网中最基本的协议之一,它为互联网上的数据通信提供了基础的支持。

二、IP协议头部格式

IP协议头部格式如下:


各协议字段说明:

  • 版本:占4位,协议版本号,通常为4,表示IPv4。
  • 首部长度:占4位,IP协议头部长度,即头部中有多少个32位字节,通常为5个。
  • 服务类型:占8位,用于标记数据包的优先级、延迟、可靠等。其中3位优先权字段(已经弃用),4位TOS字段和1位保留字段。4位TOS字段分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。这四者之间相互冲突,只能选择一个。对于SSH和Telnet这样的程序,最小延时比较重要;对于FTP这样的程序,最大吞吐量比较重要。
  • 总长度:占16位,表示整个IP数据包的长度,包括头部和数据部分。
  • 标识:占16位,用于唯一标识一个 IP 数据包的片段。如果IP数据包在数据链路层被分片,那么每一个片段中的标识相同。
  • 标志:占3位,第一位保留;第二位为 1 表示禁止分片,为 0 则允许分片;第三位表示分片的情况,如果为 0 表示后面还有分片,为 1 则表示当前是最后一个分片。
  • 片偏移:占13位,用于指示当前分片在原始数据包中的偏移量。实际偏移的字节数就是片偏移量乘以 8 得到的。因此,除了最后一个报文外,其他报文的长度必须是 8 的整数倍。
  • 生存时间(Time To Live,TTL):占8位,表示数据包到达目的地的最大跳数。一般是64,每次经过一个路由,TTL的值减 1 ,一直减到 0 还没有到达,那么该数据包就会被丢弃。该字段主要是用来防止出现路由循环。
  • 协议:占8位,表示数据包的上层协议类型,如TCP、UDP、ICMP等。
  • 首部校验和:占16位,用于检测头部在传输过程中出现的错误。
  • 源地址:源IP地址。
  • 目的地址:目的IP地址。
  • 可选字段:可选字段,用于扩展头部,通常不使用。
  • 填充:填充字段,用于保证头部长度位 32 位的整数倍。

三、IP地址划分

1. IP地址分类

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

  • 网络号:保证互相连接的两个网段具有不同的标识。
  • 主机号:同一个网段内,主机之间有相同的网络号,但主机号不同,以便区分不同的主机。

如下图:


不同的子网其实就是把网络号相同的主机放到一起。如果在子网中新增一台主机,则该主机的网络号与这个子网的网络号一致,但是主机号必须保证和该子网中的其他主机不同。

在刚开始设计互联网络时,为了便于寻址以及层次化构造网络,IP地址根据网络号划分出五种IP类型:A类地址、B类地址、C类地址、D类地址和E类地址。如下图所示:

  1. A类地址:以0开头,第一个字节(8位)用于网络地址,后面三个字节(24位)用于主机地址。它的网络号可以表示1~126之间的数字,它的默认子网掩码为255.0.0.0。
  2. B类地址:以10开头,前两个字节(16位)用于网络地址,后面两个字节(16位)用于主机地址。它的网络号可以表示128~191之间的数字,它的默认子网掩码为255.255.0.0。
  3. C类地址:以110开头,前三个字节(24位)用于网络地址,后面一个字节(8位)用于主机地址。它的网络号可以表示192~223之间的数字,它的默认子网掩码为255.255.255.0。
  4. D类地址:以1110开头,用于多播地址(multicast addresses),不用于单个主机或网络。
  5. E类地址:以1111开头,保留地址,不分配给主机或网络使用。

其各自的范围如下:

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

2. 子网划分

随着互联网的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址:

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

针对这种情况提出了新的划分方案,称为CIDR(Classless Interdomain Routing,无类别域间路由)。

CIDR是一种用于分配IP地址的方法,与传统的IP地址划分方式不同,CIDR将IP地址划分为一个个的子网,每个子网的大小可以根据需要灵活调整。CIDR可以在不改变网络地址和主机地址划分的基础上,更好地利用IP地址空间,避免浪费IP地址,提高IP地址的使用效率。

利用CIDR划分子网的步骤如下:

  1. 确定需要划分的IP地址范围,例如:192.168.0.0~192.168.0.255。

  2. 根据需要分配的子网数量,确定网络前缀长度。例如,如果需要将该地址范围分为4个子网,则网络前缀长度为26位(2的2次方等于4,需要2个二进制位来表示4个子网)。

  3. 将IP地址范围划分为多个子网,每个子网的大小由网络前缀长度确定。

  4. 为每个子网分配一个独立的网络地址和主机地址范围。

例如,将192.168.0.0/24划分为4个子网,每个子网大小相同,即每个子网有64个IP地址。根据CIDR表示法,网络前缀长度为26位,子网划分如下所示:

  • 子网1:192.168.0.0/26,网络地址为192.168.0.0,广播地址为192.168.0.63。
  • 子网2:192.168.0.64/26,网络地址为192.168.0.64,广播地址为192.168.0.127。
  • 子网3:192.168.0.128/26,网络地址为192.168.0.128,广播地址为192.168.0.191。
  • 子网4:192.168.0.192/26,网络地址为192.168.0.192,广播地址为192.168.0.255。

CIDR IP子网划分可以更好地利用IP地址空间,并提供更灵活的子网划分方式。它也更容易管理,因为每个子网都有一个独立的网络地址和主机地址范围,这使得网络管理更加简单和高效。

四、IP地址数量危机

1. 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 地址,但是目前还没有普及。

2. NAT技术

网络地址转换(NAT)是一种网络协议,用于在私有网络和公共网络之间转换IP地址。它通常用于家庭、小型办公室或企业网络,以便在一个公共IP地址下运行多个私有IP地址。

NAT技术可以隐藏内部网络的真实IP地址,从而增加了网络安全性。它可以防止来自互联网的未经请求的数据包进入内部网络,并且可以使内部网络中的主机更难受到攻击。

在NAT中,路由器会分配一个公共IP地址给内部网络中的每一个主机,并在必要时将数据包从公共IP地址转换到内部主机的私有IP地址。这使得内部网络中的多个主机可以共享单个公共IP地址,从而减少了IP地址的使用量。

然而,NAT技术也存在一些限制,例如它可能会影响某些应用程序的性能,特别是需要建立点对点连接的应用程序,例如视频会议或P2P文件共享。

五、私网IP和公网IP

如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到因特网上。理论上使用任意的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)。

如下图所示:

  • 一个路由器可以配置两个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,网络地址转换)。

六、路由

1. 认识路由

路由是将网络数据包从一个网络节点传递到另一个网络节点的过程。在网络中,路由器是负责路由数据包的设备。当一个数据包进入路由器时,路由器会根据其目标IP地址来确定数据包应该转发到哪个网络节点。

在路由的过程中,路由器需要查找路由表以确定数据包应该转发到哪个节点。路由表是一个数据结构,它包含了网络中的所有节点和它们之间的联系。当一个数据包到达路由器时,路由器会将其目标IP地址与路由表中的地址进行匹配,以便找到下一个节点的地址。

那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表:

  • 路由表可以通过route命令查看。
  • 如果目的IP命中了路由表,就直接转发即可。
  • 路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

假设某主机上的网络接口配置和路由表如下:

  • 这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到192.168.56.0/24网络。
  • 路由表的 Destination 是目的网络地址,Genmask 是子网掩码,Gateway 是下一跳地址,Iface 是发送接口,Flags 中的 U 标志表示此条目有效(可以禁用某些条目),G 标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。

2. 路由表生成算法

路由表是用于将IP地址映射到网络路径的数据结构,路由表生成算法用于确定路由表中的网络路径。常见的路由表生成算法包括以下几种:

  1. 静态路由:管理员手动配置的路由,它们不会自动更新或更改。静态路由比较容易实现,但需要管理员手动配置,并且不适用于复杂的网络环境。

  2. RIP(Routing Information Protocol):是一种距离向量路由协议,使用跳数作为距离指标,每个路由器将其邻居的路由表传递给其它路由器,以便每个路由器都能获得整个网络的路由信息。

  3. OSPF(Open Shortest Path First):是一种链路状态路由协议,每个路由器将其连接到的所有路由器和网络的信息发送给其它路由器,以便每个路由器都能计算出整个网络的最短路径。

  4. BGP(Border Gateway Protocol):是一种路径向量路由协议,用于在互联网上交换路由信息。它使用AS路径作为路由选择的标准,每个AS(自治系统)都将其拥有的网络告知其它AS,以便确定全局路由。

这些算法都有其优点和局限性,网络管理员需要根据网络拓扑、带宽、延迟等因素来选择适合的路由表生成算法。

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

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

相关文章

Centos7 安装jenkins java1.8版本

1. 首先安装好jdk1.8 2. 安装jenkins 命令:(可以在根目录,创建文件夹 mkdir home 然后在此文件夹下操作 cd /home) a 清华源,获取jenkins安装包 wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.346-1.1.noarch.rp…

2023软件测试金三银四常见的软件测试面试题-【测试理论篇】

三、测试理论 3.1 你们原来项目的测试流程是怎么样的? 我们的测试流程主要有三个阶段:需求了解分析、测试准备、测试执行。 1、需求了解分析阶段 我们的SE会把需求文档给我们自己先去了解一到两天这样,之后我们会有一个需求澄清会议, 我…

GO进阶(4) 深入Go的内存管理

Go语言成为高生产力语言的原因之一自己管理内存:Go抛弃了C/C中的开发者管理内存的方式,实现了主动申请与主动释放管理,增加了逃逸分析和GC,将开发者从内存管理中释放出来,让开发者有更多的精力去关注软件设计&#xff…

1633_xv6 book PC硬件与BootLoader

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 按照课程的建议,先去读了一下xv6 book的附录,感觉还是有一些收获的。这中间去扫盲增补各种概念的过程就已经收获不少。 1. 这里介绍了一下计…

C#:Krypton控件使用方法详解(第九讲) ——kryptonRadioButton

今天介绍的Krypton控件中的kryptonRadioButton,这是一个单选按钮控件。下面开始介绍这个控件的属性:首先介绍的是外观属性,如下图所示:Cheacked属性:表示设置kryptonRadioButton控件的初始选中状态是什么样的&#xff…

Buuctf [ACTF新生赛2020]Universe_final_answer 题解

1.程序逻辑 程序逻辑并不复杂: 首先输入字符串,然后对字符串进行一个判断是否满足条件的操作 如果满足则对字符串进行处理并输出,输出的就是flag 2.judge_860函数 显然根据这十个条件可以通过矩阵解线性方程组,这里对变量的命名做了一些调整,让Vi对应flag[i]方便读 ​​​​…

2018年蓝桥杯省赛试题-5道(Python)

文章目录一、日志统计思考二、递增三元组思考三、螺旋折线思考四、乘积最大思考五、全球变暖思考尾声提示:以下是本篇文章正文内容,下面案例可供参考 一、日志统计 题目描述 小明维护着一个程序员论坛。 现在他收集了一份"点赞"日志&#xf…

mysql数据库表的多条件查询

mysql数据库表的多条件查询 一、select语句基本查询 SELECT 字段1,字段2....FROM 表名[WHERE 条件] [LIMIT N][ OFFSET M]select可以返回多条数据也可以返回一条数据如果要查询所有的字段可以用 *****代替where后面跟的是筛选条件(可选)N 是返回的数据…

1632_x86中几种地址概念的理解

全部学习汇总: GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 在看xv6的资料的时候发现有几个概念没弄清楚,结果让我理解资料的时候感觉比较模糊。这几个概念名词也倒是简单:逻辑地址、线性地址、物理地…

vmware创建虚拟机centor7

右键 选择下好的centos7 设置密码 登录

Spring是怎么解决循环依赖的

1.什么是循环依赖: 这里给大家举个简单的例子,相信看了上一篇文章大家都知道了解了spring的生命周期创建流程。那么在Spring在生命周期的哪一步会出现循环依赖呢? 第一阶段:实例化阶段 Instantiation 第二阶段:属性赋…

代码随想录 NO52 | 动态规划_leetcode 647. 回文子串 516.最长回文子序列

动态规划_leetcode 647. 回文子串 516.最长回文子序列今天是动态规划最后一天的题了,整个过程已经接近尾声了! 647. 回文子串 确定dp数组(dp table)以及下标的含义 本题如果我们定义,dp[i] 为 下标i结尾的字符串有 dp…

【改进灰狼优化算法】改进收敛因子和比例权重的灰狼优化算法【期刊论文完美复现】(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…

【Hello Linux】进程概念

作者:小萌新 专栏:Linux 作者简介:大二学生 希望能和大家一起进步! 本篇博客简介:简单介绍下进程的概念 进程基本概念PCB 程序控制块task_struct是什么task_struct里面有什么查看进程通过系统目录查看进程通过ps指令查…

22.2.26打卡 Codeforces Round #853 (Div. 2)

A题极端考虑, 只要存在一个前缀数组的最大公约数小于等于2, 将其放在数组最前端, 那么保证能够满足题目要求数据范围这么小, 果断暴力Serval and Mochas Array题目描述Mocha likes arrays, and Serval gave her an array consisting of positive integers as a gift.Mocha thin…

ARM Context synchronization event和Instruction Synchronization Barrier

在Arm architecture里,经常提到Context synchronization event(CSE)和Explicit synchronization,Context synchronization events在之前是叫作context synchronization operations。Explicit synchronization是Context synchronization event的结果&…

C++9:优先级队列以及仿函数和反向迭代器

目录 优先级队列的基本增删查改实现 仿函数 反向迭代器 优先级队列的本质其实是一个堆,具体到底层的数据结构其实是有数学关系所形成的一个类似二叉树的结构 至于其优先级的这个特性,跟大堆小堆的性质是相同的,只不过它使用了仿函数来控制…

bool与引用类型

bool与引用类型bool类型介绍与使用bool(布尔类型)大小&#xff1a;1个字节返回值有两个&#xff1a;1(true)&#xff0c;0(false)#include<iostream>using namespace std;int main() {bool a false;bool b true;cout << "a " << a << end…

Lighthouse组合Puppeteer检测页面

如上一篇文章lighthouse的介绍和基本使用方法结尾提到的一样&#xff0c;我们在实际使用Lighthouse检测页面性能时&#xff0c;通常需要一定的业务前置条件&#xff0c;比如最常见的登录操作、如果没有登录态就没有办法访问其他页面。再比如有一些页面是需要进行一系列的操作&a…

从编年史角度看大数据兴起

开源大数据编年史大数据发展的各阶段大数据诞生初期大数据百花齐放的发展之路追求性能的大数据成熟期大数据发展的各阶段 开源大数据的编年史的话&#xff0c;实际上分为三个阶段。一般来说它分为初期、发展期、成熟期。 初期就是大数据刚开始萌芽的一个阶段&#xff0c;它从…