【网络层】IP报文解析和网段划分

news2024/9/30 1:28:35

文章目录

  • 网络层的作用
  • IP协议
    • 协议报头格式
    • 网段划分
      • DHCP
      • CIDR划分方案
    • IP地址的数量限制
    • 私有IP地址和公网IP地址
      • LAN和WAN
  • 路由

网络层的作用

前面学习了应用层和传输层,应用层的作用是为用户和应用程序提供网络服务,传输层的作用是提供端口到端口的通信服务。而网络层呢,其作用就是为了在复杂的网络环境中确定一个合适的路径,也就是在网络世界中找到目标主机。下面逐步介绍如何通过一个IP地址找到一台目标主机。

IP协议

在这里插入图片描述

协议报头格式

在这里插入图片描述

  • 4位版本号:指定IP协议的版本,4表示的是IPv4
  • 4位首部长度:IP头部的长度,单位是4字节,4个比特位表示的最大数为15,所以IP报头的最大长度为15*4=60个字节,最小为5*4=20字节。加粗样式
  • 8位服务类型:3位优先权字段(已经弃用),4位TOS字段和1 位保留字段(必须置为 0)。4 位 TOS 分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个.
  • 16 位总长度:数据报整体占多少个字节
  • 16位标识唯一标识主机发送的报文,也就是说每一次发送的报文的标识符都唯一。如果IP报文在数据链路层被分片了,那么每一个片里的标识符都是相同的,标识它们属于同一个报文。
  • 3位标志字段:第一位保留。第二位置1表示禁止分片,此时如果报文长度超过MTU,IP模块就会丢弃报文。第三位置1表示有更多分片,如果分片,最后一个分片置为 0, 其他是 1. 类似于一个结束标记
  • 13位片偏移:表示数据包分片在原始数据包中的位置,以8字节为单位。是分片相对于原始 IP 报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置。接收方收到被分片的IP报文后,按照13位偏移量就可以将所有的分片排序,这样得到的整个报文就是正确的顺序。
  • 8位生存时间:数据到达目的地后的最大报文跳数,一般是64。每经过一个路由器,TTL值减1,直到到达目的地或变为0时丢弃数据包。 主要用于防止出现路由循环。
  • 8位协议:表示传输层使用的协议类型,例如,ICMP为1,TCP为6,UDP为17。
  • 16位校验和:使用 CRC 进行校验, 来鉴别头部是否损坏.
  • 32 位源地址和 32 位目标地址: 表示发送主机和接收主机.
  • 选项字段(不定长, 最多 40 字节)。

网段划分

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

  • 网络号:保证相互连接的两个网段具有不同的标识
  • 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
    在这里插入图片描述
  • 不同的子网其实就是把网络号相同的主机放到一起.
  • 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复
  • 网络号用来标识网络中的某一个子网,主机号则是用来标识该子网中的某一台主机。更简单的,网络号指的是的一段范围,主机号指的是这段范围内的某台主机。

通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的 IP 地址都不相同

DHCP

DHCP技术通过服务器与客户端之间的交互,实现了IP地址和其他网络配置信息的动态分配。
工作原理:
DHCP的工作原理通常包含四个步骤:发现、提供、请求、确认。

  • 发现:当设备(手机或者电脑)加入网络时,它会广播一条DHCP发现消息,寻找可用的DHCP服务器。
  • 提供:DHCP服务器收到发现消息之后,会准备一个包含可用IP地址和其它网络配置如子网掩码等的DHCP提供消息,并将这个消息发送给请求的设备
  • 请求:设备可能收到多个提供消息,会从中选择一个,并发送一个DHCP请求消息给对应的DHCP服务器,确认接受该服务器提供的IP地址等信息。
  • 确认:DHCP服务器收到上面的请求后,再发送一个DHCP确认消息给你的手机,正式分配IP地址,设备收到后就可以正式连接网络了

简单来说就是,DHCP,能够自动的给子网内新增主机节点分配 IP 地址。一般的路由器都带有 DHCP 功能. 因此路由器也可以看做一个 DHCP 服务器.

过去曾经提出一种划分网络号和主机号的方案, 把所有 IP 地址分为五类, 如下图所示
在这里插入图片描述
随着 Internet 的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请 B 类网络地址, 导致 B 类地址很快就分配完了, 而 A 类却浪费了大量地址;显然,这种分类方式不太灵活。

针对这种情况提出了新的划分方案, 称为CIDR

CIDR划分方案

  • 引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;
  • 子网掩码也是一个 32 位的正整数. 通常用一串 “0” 来结尾;
  • 将 IP 地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号;
  • 网络号和主机号的划分与这个 IP 地址是 A 类、B 类还是 C 类无关

在这里插入图片描述
其中,IP地址中的主机地址全0表示的就是这个局域网本身,全1就表示广播地址,用于给同一个链路中相互连接的所有主机发送数据包。

此外, 127.*的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1

  • 关于本地环回地址:
    主要用于本地网络接口的测试和诊断。其实就是自己发送数据给自己,中间并没有经过局域网和其他网络

在这里插入图片描述
CIDR 在一定程度上缓解了 IP 地址不够用的问题:提高了利用率, 减少了浪费(可以根据主机数量来增加主机号的位数)

IP地址的数量限制

IPv4下的IP地址只有32位,大概就是43亿左右。假设每台主机都要有一个唯一的IP地址,那么就意味着一共只有 43 亿台主机能接入网络?事实上,由于一些特殊的 IP 地址的存在, 数量远不足 43 亿; 另外 IP 地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个 IP 地址.
CIDR 虽然在一定程度上缓解了 IP 地址不够用的问题,但仍然不够用. 这时候有三种方式来解决:

  • 动态分配 IP 地址: 只给接入网络的设备分配 IP 地址. 因此同一个 MAC 地址的设备, 每次接入互联网中, 得到的 IP 地址不一定是相同的;
  • NAT 技术:通过允许多个内部设备共享一个或多个公共IP地址来访问互联网,从而节省了公网IP地址的使用。也就是说,不同的局域网中IP地址可以是一样的
  • 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);

在这里插入图片描述
上图中的WAN口IP就是路由器所在网络的地址

  • 一个路由器可以配置两个 IP 地址, 一个是 WAN 口 IP, 一个是 LAN 口 IP(子网IP).
  • 路由器 LAN 口连接的主机, 都从属于当前这个路由器的子网中.
  • 不同的路由器, 子网 IP 可以是一样的(通常都是 192.168.1.1). 子网内的主机
  • 每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN 口 IP 就是一个公网 IP 了.
  • 家用路由器的WAN口地址通常是运营商的子网IP地址,运营商的WAN口地址通常就是公网。
  • 子网内的主机需要和外网进行通信时, 路由器将 IP 首部中的 IP 地址进行替换(替换成 WAN 口 IP), 这样逐级替换, 最终数据包中的 IP 地址成为一个公网 IP. 这种技术称为 NAT(Network Address Translation,网络地址转换).
  • 如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网 IP 的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.

LAN和WAN

LAN口地址和WAN口地址在路由器中扮演着不同的角色,分别用于局域网(LAN)和广域网(WAN)的连接与通信。注意,局域网和广域网的概念是相对的,我们认为一个路由器的子网可以是称为一个局域网,路由器“外面”的网络可以称为广域网,但路由器又可能处于运营商路由器的子网构建的局域网中。
LAN口地址通常用于局域网内部的设备之间的通信,WAN口地址,即广域网接口地址,是路由器从互联网服务提供商(ISP)处获得的公网IP地址。这个地址用于路由器与外部网络(如互联网)之间的通信。

路由

路由其实就是利用目的IP在复杂的网络中找到目标主机,这个过程类似于问路
通常,路由的过程会经过多个路由器,我们把在以太网中指从源 MAC 地址到目的MAC 地址之间的帧传输称为"一跳"。

在这里插入图片描述
当IP数据包到达路由器时,路由器会先查看目的IP。路由器维护了一张路由表,表中有着与该路由器所处同一个网络中的其它路由器的IP地址以及子网掩码。如果目的IP与该表中的某个子网掩码与上之后恰好等于其对应的网络号,那么说明这个IP数据报下一跳就去该路由器的子网中继续找。如下图所示。
在这里插入图片描述

  • 在linux中,路由表可以使用route指令查看
    在这里插入图片描述
    如果目的 IP 命中了路由表, 就直接转发即可,路由表中的最后一行即default,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

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

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

相关文章

Android 10.0 系统默认蓝牙打开状态栏显示蓝牙图标功能实现

1.前言 在10.0的系统rom定制化开发过程中,在默认系统中,打开蓝牙开关的时候不会状态栏不会显示蓝牙图标,而只有 蓝牙连接成功后会显示蓝牙图标,客户开发需要要求在蓝牙打开的时候在状态栏就显示蓝牙图标,接下来分析下 相关的状态栏图标显示流程,然后实现相关功能 2.系统…

模块的介绍

一、模块的基本介绍 1、模块是什么? 1)模块是一个py文件,后缀名.py 2)模块可以定义函数、类和变量,模块里也可能包含可执行的代码 2、模块的作用有哪些? 1)当函数、类、变量很多时&#xf…

java基础--字符串用法

一、前言(在java中字符串的重要性) 在 Java 编程中,字符串(String)的重要性不言而喻,它几乎贯穿于所有的应用程序和系统中。以下是 Java 中字符串重要性的几个方面: 1. 数据表示和处理 文本数…

使用PXE和kickstart完成自动化批量主机的安装

本实验采用的版本为rhel7.9 kickstart: 首先写一个kickstart脚本 安装脚本工具 配置自动化脚本 下载http服务用来共享脚本 yum install httpd -y systemctl enable httpd --now 实验的过程中把防火墙和selinux都关闭 配置自动化脚本 创建一个软链接使得用户访…

集团ERP信息化项目实施方案(可编辑82页PPT)

引言:在当前信息化快速发展的时代,集团企业面临着日益增长的业务复杂性和数据管理挑战。为了提升集团的整体运营效率、加强数据集成与共享、优化业务流程,我们决定实施ERP(企业资源计划)信息化项目。 方案介绍&#x…

最新口型同步技术EchoMimic部署

EchoMimic是由蚂蚁集团推出的一个 AI 驱动的口型同步技术项目,能够通过人像面部特征和音频来帮助人物“对口型”,生成逼真的动态肖像视频。 EchoMimic的技术亮点在于其创新的动画生成方法,它不仅能够通过音频和面部关键点单独驱动图像动画&a…

翻译: 可视化深度学习反向传播原理二

顺便一提 这有一点点像描述生物中 神经元的网络如何学习的一个理论 “赫布理论” 总结起来就是“一同激活的神经元关联在一起” 这里 权重的最大增长 即连接变得更强的部分 就会发生在已经最活跃的神经元 和想要更多激发的神经元之间 可以说 看见一个“2”时激发的神经元 会和…

【Git】git 不跟踪和gitignore区别

文章目录 不跟踪(Untracked):.gitignore 文件:总结 在 Git 中,不跟踪(untracked)和 .gitignore 文件有不同的作用和用途: 不跟踪(Untracked): 不…

【Material-UI】Autocomplete中的高亮功能(Highlights)详解

文章目录 一、简介二、实现高亮功能示例代码代码解释 三、实际应用场景1. 搜索功能2. 表单自动完成 四、总结 在现代Web开发中,提供清晰的用户反馈是提升用户体验的重要组成部分。Material-UI的Autocomplete组件通过高亮功能,帮助用户快速识别搜索结果中…

Javaweb项目|ssm基于ssm的宠物医院管理系统的设计与实现vue

收藏点赞不迷路 关注作者有好处 文末获取源码 一、系统展示 二、万字文档展示 基于ssm基于ssm的宠物医院管理系统的设计与实现vue 开发语言:Java 数据库:MySQL 技术:SpringSpringMVCMyBatisVue 工具:IDEA/Ecilpse、Navicat、Ma…

Java线程池的核心参数与工作原理

Java线程池的核心参数与工作原理 1、线程池工作原理2、核心参数 💖The Begin💖点点关注,收藏不迷路💖 1、线程池工作原理 Java的ThreadPoolExecutor是线程池的核心实现,负责管理一组线程以异步方式执行提交的任务。其…

keil编译报错error:#8:missing closing quote 处理

MDK5采用UTF-8,提示很多个这样的error:#8:missing closing quote 的错误信息。提供以下几种方式解决: 在KEIL中Options for Target Flash -> C/C -> Misc Controls添加“--localeenglish”。

AI智能名片小程序在促销性内容营销中的创新应用与策略分析

摘要:在数字化时代,企业营销手段日益丰富多元,促销性内容作为吸引顾客、促进消费的关键手段之一,其形式与效率不断被革新。随着人工智能(AI)技术的飞速发展,AI智能名片小程序作为一种新兴的营销…

React(四):DOCX文件在线预览

效果 注意 ⚠️注意:部分文件预览存在问题 依赖 $ yarn add docx-preview $ yarn add jszip源码 import ./index.scss; import {useRef} from react; import type {UploadRequestOption} from rc-upload/lib/interface; import {Upload, Button, message} from an…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 会议室占用时间(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题…

力扣-46.全排列

刷力扣热题–第二十六天:46.全排列 新手第二十六天 奋战敲代码,持之以恒,见证成长 1.题目简介 2.题目解答 这道题目想了会,思路比较好想,但一直没调试成功,所以就参考了力扣官网的代码,积累一下回溯算法的实现和基本实现思路,即先试探后回溯,结果在下面…

R语言中的宽长数据转换:tidyr包的使用指南

在数据分析中,数据的存储方式直接影响分析过程的效率和准确性。常见的数据存储形式有宽型数据(wide format)和长型数据(long format)。宽型数据适合人类查看和理解,而长型数据则更适合计算机处理和分析。为…

AI生成PPT?三款工具让总结更轻松

哎呀,职场新人们,你们是不是也跟我一样,刚开始做PPT的时候,感觉像是走进了一个大迷宫,脑袋里装满了想法,但就是不知道怎么把它们变成一页页漂亮的幻灯片?别急,今天咱们就来聊聊三个超…

JavaEE-多线程编程阻塞队列

目录 生产者消费者模型 生产者消费者模型优势 通过代码看一下生产者消费者模型(使用阻塞队列) 自己实现阻塞队列 之前在数据结构中学的队列是最基础的队列,在实际开发中针对队列还有很多形式:(1)普通队…

PyCharm | PyCharm中创建带有注释的py文件

文章目录 0 问题引入1 问题解决1.1 在Pycharm里进行设置1.2 模板1.3 可选参数 2 效果展示 0 问题引入 想要创建带注释的py文件,该如何解决呢? 1 问题解决 1.1 在Pycharm里进行设置 打开Pycharm的Seetings按照如图所示来操作 1.2 模板 # -*- codin…