【网络原理】IP协议详解

news2024/11/24 5:56:45

一.与IP协议相关的基本概念

  • IP协议,即网际互连协议(Internet Protocol),是TCP/IP体系中的核心网络层协议。

网络层IP协议解决的问题

  • 数据传输的过程中,不是直接进行的传输,而是经过层层的封装和分用的过程才能到达对端. IP协议主要的功能就是地址管理(使用一套地址管理体系,描述设备在网络上的具体位置)和路由选择(数据包如何从网络中的一个地址传输到另一个地址).

二.IP协议的基本格式

IP协议的格式如图:
在这里插入图片描述

  • 4位版本号: 用来描述当前IP协议的版本(指的是IPv4和IPv6这两个版本)
  • 4位首部长度: 用来描述IP协议的IP报头.
  • 8位服务类型(TOS):3位优先权字段(已经弃用), 1位保留字段(必须置为0)和4位TOS字段. 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择⼀个.对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.
  • 16位总长度:整个IP报文的总长度.但这并不意味着IP报文的长度就想UDP报文一样有长度限制,IP协议中提供了拆包和组包这样的功能,可以根据需求,将IP数据报分成若干个,这个拆包和组包的过程是在网络层完成的,传输层和数据链路层,并不会关心这个过程.
  • 16位标识:它的作用是将拆包后的各个子包的标识位相同,在组装的时候,该位相同的放到一起组装.如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.
  • 3位标志: 该位用来描述是否进行了拆包.第⼀位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第⼆位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后⼀个分片置为1, 其他是0. 类似于⼀个结束标记.
  • 13位片偏移:描述这些子包的先后顺序.是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后⼀个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).
  • 8位生存时间:这里存储的时间不是s/ms,而是一个整数,通常是32/64.一个IP数据报,每经过一个路由器转发TTL就-1,如果这个数据减到0,说明这个数据丢包了. 这个字段主要是用来防止出现路由循环
  • 8位协议:表示传输层使用的哪个协议.
  • 16位首部校验和:使用CRC进行校验, 来鉴别头部是否损坏.只用校验IP的首部,载荷中的TCP/UDP都自带校验.
  • 32位源地址和32位目标地址: 表示发送端和接收端.

三.地址管理

网段划分

IP地址分为两个部分:

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

DHCP协议

现实中手动管理IP地址是一个非常麻烦的事情,当子网中新增主机时需要给其分配一个IP地址,当子网当中有主机断开网络时又需要将其IP地址进行回收,便于分配给后续新增的主机使用。因此对于IP地址的分配和回收一般不会手动进行,而是采用DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)技术。DHCP通常被应用在大型的局域网环境中,其主要作用就是集中地址管理、分配IP地址,使网络环境中的主机动态获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。DHCP是一个基于UDP的应用层协议,⼀般的路由器都带有DHCP功能. 因此路由器也可以看做⼀个DHCP服务器.

子网划分

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

在这里插入图片描述

  • A类 0.0.0.0到127.255.255.25
  • 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千多个主机. A类地址的子网内的主机数更多.
  • 然而实际网络架设中, 不会存在⼀个子网内有这么多的情况. 因此大量的IP地址都被浪费掉了.

针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing):

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是⼀个32位的正整数. 通常用一串 “0” 来结尾;
    • 将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

特殊的IP地址

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

四.路由选择.

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

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

相关文章

怎么通过网页查看iPhone手机的备忘录内容?

在这个数字化的时代,iPhone已成为我们日常生活中不可或缺的一部分。我特别喜欢用iPhone的备忘录功能,随时随地记录生活的点点滴滴,工作中的待办事项。然而,有时候,当我需要在电脑上查看或编辑这些备忘录时,…

最原理的一集——Mathtype公式编号设置(Mathtype7.8+Word)

版本 Mathtype7.8Office2019 Word 读完本文你将会 随心所欲,想怎么给公式编号就怎么给公式编号,想从(X.1)开始,就从(X.1)开始大概了解Mathtype公式设置原理给作者点赞 如果你想自己跟着文章做的话 请不要在自己的论文里边直接操作&#…

超详细——集成学习——Adaboost——笔记

资料参考 1.【集成学习】boosting与bagging_哔哩哔哩_bilibili 集成学习——boosting与bagging 强学习器:效果好,模型复杂 弱学习器:效果不是很好,模型简单 优点 集成学习通过将多个学习器进行结合,常可获得比单一…

批量剪辑利器:视频随机分割,创意无限,高效剪辑视频

在视频制作和编辑的过程中,剪辑是一项至关重要的技术。对于需要处理大量视频素材的用户来说,批量剪辑不仅能提高工作效率,还能为视频内容带来创意和多样性。随着技术的发展,一些高效的剪辑工具逐渐崭露头角,其中视频随…

产品推荐 | 基于 Virtex UltraScale+ XCVU3P的FACE-VPXSSD-3PA 存储板

01 产品概述 FACE(FPGA Algorithm aCceleration Engine)FPGA算法加速开发引擎是基于FPGA可编程器件构建的一系列算法加速开发引擎平台。FACE-VPXSSD-3PA存储平台是FACE系列中的一员。该平台板载2组2GB 64bit DDR4、2路QSFP28光接口、4个NVME SSD M.2接口…

Linux:进程信号(一)信号的产生

目录 一、信号是什么? 二、Linux信号 三、信号处理方式 四、信号的产生 1、 通过终端按键产生信号 2、调用系统函数向进程发信号 3、 硬件异常产生信号 一、信号是什么? 在生活中,有许多信号,比如红绿灯,下课铃声…

达梦主从数据库实例恢复

测试环境:实时主备数据库 1、在节点1向测试表aaa插入数据 如图可见,会话139695153554808向aaa表插入了10000行数据。事务id460520。 2、提交前在另一个窗口kill掉dmserver进程。 3、查看节点2的数据库日志 上图可见,系统执行alter database…

Java基础教程 - 4 流程控制

更好的阅读体验:点这里 ( www.doubibiji.com ) 更好的阅读体验:点这里 ( www.doubibiji.com ) 更好的阅读体验:点这里 ( www.doubibiji.com ) 4 流程控制 4.1 分支结构…

在企业中软件产品测试报告可以运用的场景

在企业应用场景中,测试报告的应用场景十分广泛且重要。以下是几个主要的应用场景: 产品质量评估与保证:测试报告是企业评估软件或产品质量的重要依据。通过测试报告,企业可以了解产品在不同场景下的性能表现、安全性、稳定性以及…

esp32-cam 1. 出厂固件编译与测试

0. 环境 - ubuntu18 - esp32-cam - usb转ttl ch340 硬件连接 esp32-camch340板子U0RTXDU0TRXDGNDGND5V5V 1. 安装依赖 sudo apt-get install vim sudo apt install git sudo apt-get install git wget flex bison gperf python python-pip python-setuptools python-serial p…

Redis的数据类型及使用场景

redis命令大全官网: Commands | Docs (redis.io) 基本介绍 redis起初主要就是为了解决性能问题的,那么redis为什么快? 基于内存操作的,所以操作不需要跟磁盘进行交互,单次的执行会很快 命令执行是单线程 因为基于内存操作 单次执行时间反…

Vue开发者工具Vue.js devtools Vue开发者工具安装步骤前端开发工具免费附带教程

下载地址: 链接: https://pan.baidu.com/s/1JaGvhS4NoD8lL07n2ScE9A 密码: 9rfs 安装步骤: 以谷歌浏览器为例 第一步:打开Chrome的拓展程序 如图 第二步: 将下载好的拓展程序拖入即可,如下图 第三步:…

Python数据清洗与可视化实践:国际旅游收入数据分析

文章目录 概要整体流程名词解释NumPyPandasMatplotlibre 技术细节数据清洗可视化 小结 概要 在本篇博客中,我们将通过一个实际的案例,演示如何使用Python进行数据清洗和可视化,以分析国际旅游收入数据。我们将使用Python中的Pandas库来进行数…

OpenHarmony实战开发-应用侧调用前端页面函数

应用侧可以通过runJavaScript()方法调用前端页面的JavaScript相关函数。 在下面的示例中&#xff0c;点击应用侧的“runJavaScript”按钮时&#xff0c;来触发前端页面的htmlTest()方法。 前端页面代码。 <!-- index.html --> <!DOCTYPE html> <html> <…

接口自动化框架篇:Pytest + Allure报告企业定制化实现!

接口自动化框架是现代软件开发中的重要组成部分&#xff0c;能够帮助开发团队提高测试效率和质量。本文将介绍如何使用Pytest作为测试框架&#xff0c;并结合Allure报告进行企业定制化实现。 目标规划 在开始编写接口自动化测试框架之前&#xff0c;我们需要先进行目标规划。…

超分辨率重建——BSRN网络训练自己数据集并推理测试(详细图文教程)

目录 一、BSRN网络总结二、源码包准备三、环境准备3.1 报错KeyError: "No object named BSRN found in arch registry!"3.2 安装basicsr源码包3.3 参考环境 四、数据集准备五、训练5.1 配置文件参数修改5.2 启动训练5.2.1 命令方式训练5.2.2 配置Configuration方式训…

zTasker v1.88.1一键定时自动化任务

软件介绍 zTasker是一款完全免费支持定时、热键或条件触发的方式执行多种自动化任务的小工具&#xff0c;支持win7-11。其支持超过100种任务类型&#xff0c;50种定时/条件执行方法&#xff0c;而且任务列表可以随意编辑、排列、移动、更改类型&#xff0c;支持任务执行日志&a…

SEED-X:多模态智能助手

SEED-X&#xff1a;多模态智能助手 SEED-X 是一个多模态智能助手&#xff0c;已经将所有的模型和代码开源了&#xff01;它是一个统一且多用途的多模态基础模型&#xff0c;最新开放了图像编辑模型。 相较于传统的多模态交互框架&#xff0c;SEED-X 具有以下优点&#xff1a;…

【请投票】嘉立创EDA中LED发光二极管是否应有统一的引脚定义?

LED发光二极管的引脚定义应该是唯一的吗&#xff1f; 从下面原理图可以看到&#xff0c;器件型号仅尾缀不同,R代表RED红色发光二极管&#xff0c;W代表WHITE指白色发光二极管&#xff0c;是同一家制造商KENTO&#xff0c; 左侧红色发光二极管的1脚是阴极K&#xff0c;2脚是阳极…

Android关于SparseArray面试题

问题1: 什么是SparseArray&#xff0c;它与HashMap有什么不同&#xff1f; 回答&#xff1a; SparseArray是一个用于优化特定情况下内存使用的数据结构&#xff0c;主要用于替代HashMap<Integer, Object>。SparseArray使用两个数组分别存储键和值&#xff0c;而不是使用…