IP:网际协议

2023-11-03

本文是为了记录学习过程中的知识点所写,用于对自己的理解做一个记录

IP报文格式

  • 4位版本:目前的版本号为4,因此IP也称为IPv4。
  • 4位首部长度:首部占32bit(4字节)的数目,4bit最大值为15,也就是说最多为480bit 即60字节,包括选项。(也就是说IP首部范围是 20字节-60字节)
  • 8位服务类型:包括一个3bit的优先字段(现在被忽略了),4bit的服务类型(TOS)字段和1bit的未用为但必须置0。4bit的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小费用。4bit中只能置其中一个为1。且如果4bit均为0则表示一般服务,下面是不同应用的服务类型的推荐值。服务类型
  • 16位总长度(字节数): 利用首部长度和总长度字段就可以知道该数据报中数据的起始位置和长度。同样因为16bit的最大值为65535,所以最大长度可以达到65535字节。以太网的MTU为1500字节。当数据被分片的时候,该字段也随之变化。(以太网最小帧是46字节,但是IP报文最小为20字节,如果没有该字段,IP层就不知道这46字节中有多少是IP报文的内容)
  • 16位标识: 唯一的标识主机发送的每一份数据报,每发送一个报文他的值就会加1.
  • 3位标志位: 共3位。R、DF、MF三位。目前只有后两位有效,DF位:为1表示不分片,为0表示分片。MF:为1表示“更多的片”,为0表示这是最后一片。
  • 13位片偏移
  • 8位生存时间TTL: time-to-live,该字段设置了数据报可以经过的路由器的数量,它指定了报文的生存时间,TTL的初始值由源主机设置(通常为32或64),每经过一个路由器就减一,当该字段为0时,则丢弃这个数据报,并发送ICMP报文通知源主机。
  • 8位协议: 可以识别是哪个协议向IP传送数据。TCP的协议号为6,UDP的协议号为17。ICMP的协议号为1,IGMP的协议号为2.
  • 16位首部检验和: 为了计算一份数据包的IP检验和,首先把检验和字段全部置0,然后对首部中每个16bit进行二进制反码求和,结果存在检验和字段中。当传输过程中没有发生错误的时候,接收方对首部进行二进制反码求和的结果应该全为1.如果不是则检验和错误。那么IP就丢弃收到的数据包,但是不生成差错报文,由上层去发现丢失的报文。
  • 32位源IP地址: 发送方的IP地址
  • 32位目的IP地址: 目标的IP地址
  • 选项: 这是一个任选项,是数据报中的可变长的可选信息。目前很少被使用,并不是所有主机和路由器都支持这些选项,感兴趣可以自行了解。

路由表

IP层在内存中有一个路由表,当收到一份数据报并进行发送时,他都要对该表搜索一次。

接收到数据报时,首先检查IP地址是否为本机的IP地址之一或者IP广播地址。
1、如果是则会把数据报送到 IP首部中8位协议字段所指定的协议模块进行处理
2、如果目的IP地址不是以上两种,则进行如下处理

  • 如果IP层被设置为路由功能,那么就对数据报进行转发
  • 如果没有设置路由功能,则丢弃数据报

查询路由表的指令:

//windows 在cmd中
route PRINT

//linux下
route -nv

linux路由表

IP路由选择是逐跳的(hop-by-hop)。这是因为IP并不知道到达目的IP地址的完整路径。只能为数据报提供下一站路由器的IP地址。这里是假设下一站路由器比发送数据报的主机更接近目的IP地址。而且下一站路由器和本机是直接相连的。
IP地址格式
IP地址的格式如上图所示,分为5类,前面的数字是用以区分不同类的网络号的,IP地址都分为两部分,即网络号和主机号。
可能有人不能理解这5类地址前面的数字是什么,其实这个图表达的不明确,因为IP地址采用的是“点十分进制表示法”,如192.168.10.1。
其中每个点之间表示的是8bit,而上图应该应该表示的是每类地址的起始网络号:

  • A类:0000 0000 —— 0
  • B类:1000 0000 —— 128
  • C类:1100 0000 —— 192
  • D类:1110 0000 —— 224
  • E类:1111 0000 —— 240

IP路由的工作规则

1、搜索路由表,首先去匹配是否能找到和目的IP地址完全匹配的表目,即网络号和主机号都匹配。如果存在则发送给该表目指定的下一站路由器或者直连的网络接口。
2、如果不存在完全匹配的表目,则去寻找与目的网络号匹配的表目,如果存在则发送给该表目指定的下一站路由器或者直连的网络接口。
3、如果以上两种都匹配不到,则选择"默认"表目。

在Internet上的路由器一般为一个网络号指定下一站路由,这样可以为一个网络上所有的主机指定路由器,极大地缩小了路由表的规模。

子网掩码

现在所有的主机都要求支持子网编址,之前在讲路由表的时候有说过网络号和主机号。而A类和B类IP地址为主机号分配了过多的空间,可以容纳相当多的主机数。但是在一个网络中我们一般没有这么多的主机,所以子网号就出现了。
ps:主机号全0和全1是无效的

从InterNIC获得了某类IP网络号后,就会由管理员来决定是否建立子网,以及分配多少bit给子网号和主机号,这里的主机号不再是之前的主机号了。
下图是一个B类地址示例:
在这里插入图片描述
这是最常用的划分方法,即把16位的主机号平分给 子网号和新主机号,这样可以根据IP地址很容易确定子网号。但是,这不是强制要求的。
好了,可能你现在还不知道什么是子网。

假设我们有一笔钱,可以建6000个房间(主机号)。一开始有人想建一座6000个房间的大厦,但是有人发现这座楼附近根本没有这么多人来住。所以有人提议,陆续建60座(子网号)100间房间(新的主机号)的楼,这样我们就可以把每栋楼卖完以后再建新楼。这些楼就是“子网”。但是可能会建70座、80座楼,因为这并不是固定的建法。
对于一个IP地址,例:192.168.10.1 电脑并不知道那些是网络号、子网号和主机号。所以我们需要告诉电脑那些是网络号,于是子网掩码出来了。

十进制:255.255.255.0
二进制:1111 1111 . 1111 1111 . 1111 1111 . 0000 0000
把子网掩码和IP地址相与得到的就是网络号和子网号。即192.168.10.0。

获取本机的IP地址和掩码的指令

//windows
ipconfig

//linux
ifconfig
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IP:网际协议 的相关文章

随机推荐

  • C++调用OpenCV实现图像阈值处理

    1 前言 在计算机视觉技术中 阈值处理是一种非常重要的操作 它是很多高级算法的底层处理逻辑之一 比如在使用OpenCV检测图形时 通常要先对灰度图像进行阈值 二值化 处理 这样就得到了图像的大致轮廓 以便于识别图形 在阈值处理中 会将图像的
  • 配置NTP时间客户端

    NTP Network Time Protocol 是将计算机预指定服务器时间保持一致的服务 也就是让计算机时间同步的工具 前导知识 1 配置NTP服务前需要安装软件包chrony 2 NTP的系统服务 chronyd 3 NTP客户端配置
  • 构件与中间件技术

    文章目录 一 软件构件与中间构件 1 分布式软件的基本概念 2 软件构件的基本概念 3 中间件的基本概念 4 互操作的基本原理和实例 二 CORBA基本原理 1 对象管理体系结构 2 ORB结构 3 CORBA的优点和缺点 三 基于CORB
  • 【微信小程序】swiper的使用

    1 swiper的基本使用
  • error mysql提示SQLyog连接本地sql显示Can‘t connect to Mysql server on‘localhos‘

    在管理工具 服务 mysql 启动
  • 【计算机视觉】三种常用的分割数据集:室内场景(ADE20K)、室外场景(Cityscapes)和驾驶场景(BDD100K)

    文章目录 一 室内场景 ADE20K 1 1 背景介绍 1 2 数据集的介绍 二 驾驶场景 BDD100K 三 室外场景 Cityscapes 一 室内场景 ADE20K 1 1 背景介绍 ADE20K 数据集是 2016 年 MIT 开放
  • 使用VMware Workstation操作Linux系统提示Intel VT-x处于禁用状态

    问题 此主机支持Intel VT x 但Intel VT x处于禁用状态 以前没遇到过 其实跟我最近改过笔记本的bios有关 本机为联想拯救者笔记本 解决办法 1 进入bios显示如下 2 选择 Configuration 再选择 Inte
  • ubuntu下c++编译链接caffe的工程

    最近在做深度网络相关的项目 我们通常可以从github上download很多相关的源码 但是在我们的机子上编译的时候通常会遇到很多问题 将我最近踩的坑做了一些总结 希望对大家有所帮助 1 如果直接g cpp 出现下面或者是出现某种语法错误之
  • 五、多(一)对一和一对多查询

    1 查询所有账户 同时查询出账户所属的用户 包含用户的用户名和地址信息 实体类 public class User implements Serializable private Integer id private String user
  • 第3章(下)基于Softmax回归完成鸢尾花分类任务

    文章目录 3 3 实践 基于Softmax回归完成鸢尾花分类任务 3 3 1 数据处理 3 3 1 1 数据集介绍 3 3 1 2 数据清洗 3 3 1 3 数据读取 3 3 2 模型构建 3 3 3 模型训练 3 3 4 模型评价 3 3
  • 用c语言写一个自动售货机

    自动售货机 如图所示的简易自动售货机 物品架1 2上共有10样商品 按顺序进行编号 分别为1 10 同时标有价格与名称 一个编号对应一个可操作按钮 供选择商品使用 如果物架上的商品被用户买走 储物柜中会自动取出商品送到物架上 保证物品架上一
  • Oracle数据库还原数据基础知识

    还原数据在用户修改数据内容时创建 保存修改前的值 还原数据至少会保留到事务结束 便于rollback时使用 还原数据保证读取一致性 还原数据可用于闪回查询 查找过去某个时间点的数据 用于闪回表 将表恢复到特定时间点 还原表空间自动进行管理
  • Mybatis构建sql语法

    构建sql 之前通过注解开发时 相关 SQL 语句都是自己直接拼写的 一些关键字写起来比较麻烦 而且容易出错 MyBatis 给我们提供了 org apache ibatis jdbc SQL 功能类 专门用于构建 SQL 语句 常用方法
  • Mssql注入——dns注入,反弹注入

    DNS注入 DNS注入原理 通过子查询 将内容拼接到域名内 让load file 去访问共享文件 访问的域名被记录此时变为显错注入 将盲注变显错注入 读取远程共享文件 通过拼接出函数做查询 拼接到域名中 访问时将访问服务器 记录后查看日志
  • 新生代接口测试神器ApiFox总结,你真的会用吗?

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • linux启动生成文件,Linux重新生成启动引导文件

    1 重新生成grub2的配置文件 grub mkconfig o boot grub grub cfg 2 将grub2安装到硬盘引导扇区 grub install root directory dev sda 3 使用密码保护grub2
  • Unicode编码详解

    Unicode定义 Unicode 统一码 万国码 单一码 是计算机科学领域里的一项业界标准 包括字符集 编码方案等 Unicode 是为了解决传统的字符编码方案的局限而产生的 它为每种语言中的每个字符设定了统一并且唯一的二进制编码 以满足
  • Java svg图片转png图片

    Java svg图片转png图片 比较简单 主要使用batik包里的batik transcoder模块 网上的教程引的包太多了 只是转化的话 这个包就够了 你们引用的时候 记得查一下version 之前我引用的包太老了 项目就起不来了 p
  • Windows下端口号被占用排查方法

    1 WIN R CMD进入命令行 本示例端口号为8081 实操根据自己的端口号来 查找哪个进程号 PID 占用了本端口号 netstat ano findstr 8081 通过PID查到对应占用程序 tasklist findstr 142
  • IP:网际协议

    本文是为了记录学习过程中的知识点所写 用于对自己的理解做一个记录 4位版本 目前的版本号为4 因此IP也称为IPv4 4位首部长度 首部占32bit 4字节 的数目 4bit最大值为15 也就是说最多为480bit 即60字节 包括选项 也