计算机网络——网络层重要协议(IP)

news2024/10/5 14:13:23

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

IP 协议(Internet Protocol)

IP 数据报格式

  • 4 位版本号:指定 IP 协议的版本,对于 IPV4 来说就是 4
  • 4 位首部长度:用于表示 IP 首部的长度,单位是 32 位(4字节),IP 首部最小长度是 20 字节,最大长度是 60 字节(包含选项 )
  • 8 位服务类型:3 位优先权字段(已经弃用),4 位 TOS 字段,和 1 位保留字段(必须置为 0),4位 TOS 分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,这四者相互冲突,只能选择⼀个,对于 ssh / telnet 这样的应用程序,最小延时比较重要,对于 ftp 这样的程序,最大吞吐量比较重要;
  • 16 位总长度:表示 IP 数据报整体所占字节,最大为 64 KB,但支持拆包,组包功能;
  • 16 为标识:该字段用于唯一标识每一个数据报,一个大的数据包拆成多个小包时,他们的 16 位标识是相同的;在数据报被分片时,帮助接收端将所有分片重新组装成原始的完整数据报;
  • 3 位标志:用于控制和指示数据报分片的状态:第1位(最高位)是保留位,必须设置为0,目前没有使用,将来可能用于扩展;第二位是 DF 位,表示当前数据包是否允许拆包(0 表示允许);第三位是 MF 位,表示这是否是数据报的最后一个分片(0 表示是最后一个分片);
  • 13 位片偏移:描述当前每个小的数据包(分片的)的相对位置,更方便组包;
  • 8 位生存时间 TTL(Time to Live):描述当前数据包在网络上能存活多久,单位是次数,会有一个初始值(32,64,128),没经过一个路由器转发,TTL 减 1,TTL 为 0 时,就会丢弃该数据包(防止目标 IP 不存在,从而浪费网络资源);
  • 8 位协议:指的是封装在 IP 数据报中载荷(数据)部分的上层协议,通常是指传输层协议(如 TCP,UDP),但也可以是其他需要 IP 封装的协议(如 ICMP,IGMP);
  • 16 位首部检验和:用于检查 IP 首部的(不包括载荷)完整性,验证 IP 数据报在传输过程中是否发生了错误或数据损坏;
  • 32 位源 IP 地址和 32 位目的 IP 地址,分别代表IP数据报文中的源地址(发送者)和目的地址(接收者),使用点分十进制表示;

地址管理

网段划分

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

网络号:保证相互连接的两个网段具有不同的标识;

主机号:用于区分同一个网段中的不同主机;

同一网段内,主机之间具有相同的网络号,但是必须具有不同的主机号;

子网就是把网络号相同的主机放到一起,如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中的其他主机重复;通过合理设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的 IP 地址都不相同;

DHCP

DHCP 协议——动态主机配置协议(Dynamic Host Configuration Protocol),用于自动为网络上的设备分配 IP 地址和其他相关配置参数,如网关,子网掩码和 DNS 服务器,一般的路由器都带有 DHCP 功能,因此路由器也可以看做一个 DHCP 服务器;

IP 地址的划分

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

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

针对这种情况提出了新的划分方案,称为 CIDR(Classless Interdomain Routing):引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;子网掩码也是一个 32 位的正整数,通常用一串 "0" 来结尾;将 IP 地址和子网掩码进行 "按位与" 操作,得到的结果就是网络号;网络号和主机号的划分与这个 IP 地址是 A 类、B 类还是 C 类无关;

IP 地址和子网掩码还有一种更简洁的表示方法,例如 140.252.20.68/24,表示 IP 地址为140.252.20.68,子网掩码的高 24 位是 1,也就是 255.255.255.0;

特殊的 IP 地址

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

IP 地址数量的限制 

IP地址(IPv4)是一个 4 字节 32 位的正整数,则一共只有 2 的 32 次方个 IP 地址,大概是 43 亿左 右;TCP / IP协议规定,每个主机都需要有一个 IP 地址,因此这就存在 IP 地址不够用的问题,这时候有三种方法来解决:

  • 动态分配 IP 地址:只给接入网络的设备分配 IP 地址,因此同一个 MAC 地址的设备,每次接入互联网中,得到的 IP 地址不一定是相同的,这种做法只是提高了 IP 地址的利用率,并没有增加 IP 地址的数量;
  • NAT 技术:是一种用于改变 IP 地址信息的技术,通常用于将内部私有网络的IP地址转换为公共IP地址,从而实现内网设备与外网(如互联网)之间的通信;
    • 内网:也称局域网,指在一个组织、家庭或单位内部使用的网络,不直接连接到互联网;这种网络通常使用私有 IP 地址,局域网中的设备可直接通信;局域网是一个独立的网络,不直接暴露在互联网上,从而提供了一定程度的安全性;
      • 以 10.*,172.16.* - 172.31.*,192.168.* 开头的 IP 地址
      • 在同一个局域网内,内网 IP 不能重复
      • 在不同的局域网中,内网 IP 可以重复
    • 外网:也称为广域网,通常指互联网或任何能够覆盖较大地理范围的公共网络,在广域网中,设备使用公共IP地址,这些地址在全球范围内是唯一的,可以在互联网上访问
      • 除过内网 IP,其余都是外网 IP
      • 外网 IP 不能重复
    • 公网设备与局域网设备之间的访问关系:
      • 公网设备访问公网设备,由于公网的 IP 可作为唯一标识,因此可以直接访问;
      • 局域网设备访问同一个局域网设备,由于同一个局域网中的 IP 地址不能重复,因此也可以直接访问;
      • 局域网设备访问局域网设备,不允许;
      • 公网设备访问局域网设备,不允许主动访问;
      • 局域网设备访问公网设备,由于多个局域网中的 IP 可能相同,为了使公网设备可以区分,在访问公网时,需要对局域网 IP 进行地址转换;
    • 局域网内主机访问公网服务器的过程

路由选择 

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

IP 数据包的传输过程和问路一样;

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

那么如何判定当前这个数据包该发送到哪里呢?

这个就依靠每个节点内部维护⼀个路由表,路由表可以使用 route 命令查看,如果目的 IP 命中了路由表,就直接转发即可;路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址;

路由表通过路由表生成算法(例如,距离向量算法,LS 算法等)自动生成,也可以由网络管理员手动配置(静态路由);

 

 

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

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

相关文章

Java零基础之多线程篇:线程生命周期

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

数据库 | SQL语言和关系代数汇总篇(*^▽^*)

双重/两个 not exists 嵌套查询 简单分析_两个not exists-CSDN博客 最明白的 not exists 双层嵌套讲解 SQL 查询语句_not exist 嵌套-CSDN博客 1. 答案: 2. 答案: 3. 4. 5. 6. 7. 8. 这个SQL查询是从两个表(假设是SPJ和P)中检…

Ubuntu服务器搭建Git远程仓库

本文所述方法适用于小型团队在局域网环境中使用Git进行代码版本管理。 1. 安装Git 打开终端(Ctrl + Alt + T) ,输入以下命令: sudo apt update #更新软件包列表信息 sudo apt install git #安装Git 验证Git是否安装成功,可以查看Git版本: git --version 也需…

Java基础入门day63

day63 JSON Jackson方式 package com.saas.test; ​ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.saas.entity.Student; import com.saas.entity.Birth; ​ import java.io.IOException; i…

大学生技能科普 | office 办公软件技能掌握 暑期电脑办公软件培训

为什么要学office? 提高工作效率:通过学习和掌握Office办公软件,可以更加高效地完成文档编辑、数据处理、图表制作等任务。 增强个人竞争力:在当今职场竞争中,熟练掌握Office办公软件已经成为一项基本的技能要求。掌…

FreeRTOS源码分析

目录 1、FreeRTOS目录结构 2、核心文件 3、移植时涉及的文件 4、头文件相关 4.1 头文件目录 4.2 头文件 5、内存管理 6、入口函数 7、数据类型和编程规范 7.1 数据类型 7.2 变量名 7.3 函数名 7.4 宏的名 1、FreeRTOS目录结构 使用 STM32CubeMX 创建的 FreeRTOS 工…

《STM32 HAL库》小米微电机控制例程——通信协议分析及驱动库

之前有段时间因为机器狗项目的缘故,一直在使用小米微电机,但是苦于没有一个详尽的奶妈级教程,在控制电机的学习中踩了不少的坑。今天咱们就从头至尾一步一步的实现使用按键控制小米微电机。本文将会分析小米电机驱动库,并简要介绍…

Web3新视野:Lumoz节点的潜力与收益解读

摘要:低估值、高回报、无条件退款80%...... Lumoz正通过其 zkVerifier 节点销售活动,引领一场ZK计算革命。 长期以来,加密市场以其独特的波动性和增长潜力,持续吸引着全球投资者的目光。而历史数据表明,市场往往在一年…

RAG 流程及论文串烧

文档切片 文档切片的五个层次 https://medium.com/anuragmishra_27746/five-levels-of-chunking-strategies-in-rag-notes-from-gregs-video-7b735895694d#b123 Basic RAG 与 Advanced RAG https://pub.towardsai.net/advanced-rag-techniques-an-illustrated-overview-04d…

pytorch库 02 Anaconda、Jupyter常用命令及操作

文章目录 一、Anaconda Prompt1、conda常用命令2、pip常用命令 二、Jupyter1、Jupyter常用命令及基本操作2、Jupyter代码补全插件安装 一、Anaconda Prompt 1、conda常用命令 下列命令可以在Anaconda Prompt中输入。 清屏: cls 查看帮助: conda -h 查…

Hadoop升级失败,File system image contains an old layout version -64

原始版本 Hadoop 3.1.3 升级版本 Hadoop 3.3.3 报错内容如下 datasophon 部署Hadoop版本 查看Hadoop格式化版本 which hadoop-daemon.sh/bigdata/app/hadoop-3.1.3/sbin/hadoop-daemon.sh删除原来的旧版本 rm -rf /bigdata/app/hadoop-3.1.3查看环境变量 env|grep HADOOPHAD…

SSRF(2)

Gopher协议的利用 gopher协议是ssrf利用中最强大的协议 gopher协议支持发出GET、POST请求: 可以先截获get请求包和post请求包,再构成符合gopher协议的请求。 默认端口为70,一般需发送到80端口 如果发起post请求,回车换行需要使用%0D%0A&…

Java面试八股之myBatis与myBatis plus的对比

myBatis与myBatis plus的对比 基础与增强: MyBatis 是一个成熟的Java持久层框架,它允许开发者通过XML文件或注解来配置SQL语句和数据库映射,提供了一个灵活的方式来操作数据库,但需要手动编写所有的SQL语句和结果集映射。 MyBa…

AI系统进入临床实践的几点考量——DECIDE-AI读后感

AI系统进入临床实践的几点考量——DECIDE-AI读后感 DECIDE-AI是一个新的阶段性报告指南,用于早期的临床评估基于人工智能(AI)的决策支持系统。它由欧洲影像学和医学人工智能实验室(IDEAL)合作开发,旨在解决…

60.指针数组和数组指针

一.指针数组 指针数组是一个数组&#xff0c;在指针数组中存放的是指针变量。 定义一个指针数组p int *p[5]; 内存模型如下&#xff1a; 指针数组的初始化 #include <stdio.h>int main(void) {int a1;int b2;int c3;int i;int *p[3] {&a,&b,&c};for(i0…

hdfs源码解析之DFSClient

1、DFSClient类简介 DFSClient 是 Hadoop 分布式文件系统&#xff08;HDFS&#xff09;中的一个核心类&#xff0c;用于客户端与 HDFS 之间的交互。它提供了一组方法&#xff0c;使客户端应用程序可以方便地与 HDFS 进行通信&#xff0c;包括文件的读取、写入、创建、删除、重命…

Nidhogg:一款专为红队设计的多功能Rootkit

关于Nidhogg Nidhogg是一款专为红队设计的多功能Rootkit&#xff0c;该工具的主要目的是为红队研究人员提供一个多合一的切易于使用的多功能Rootkit&#xff0c;并允许研究人员通过单个头文件来将其引入到自己的C2框架之中。 当前版本的Nidhogg支持任意版本的x64 Windows 10和…

git的Cherry pick

Cherry pick Git Cherry Pick详解 https://blog.csdn.net/jam_yin/article/details/131594716 目标: 将开发分支A中提交的部分内容合并到B分支(可能是测试分支) 步骤: vscode安装 点击下图标进入graph

【golang学习之旅】使用VScode安装配置Go开发环境

1. 下载并安装Go1.1 下载地址1.2 选择版本并下载1.3 安装目录1.4 验证是否安装成功 2. 配置环境变量2.1 配置步骤2.2 GO部分环境变量说明 3. 下载或更新 Vscode3.1 下载地址3.2 安装步骤 4. 为Go开发配置VScode 1. 下载并安装Go 1.1 下载地址 https://studygolang.com/dl 1.…

压缩pdf文件大小,如何压缩pdf

压缩PDF文件是现代办公中常见的需求&#xff0c;因为PDF文件往往包含了大量的图片、文本和格式信息&#xff0c;导致文件体积较大&#xff0c;不利于传输和存储。本文将详细介绍如何压缩PDF文件&#xff0c;我们一起来看一下。 浏览器打开 "轻云处理pdf官网" &#x…