【网络编程】第十章 网络层-IP(分片组装+网段+路由+NAT)

news/2024/9/19 13:11:10/ 标签: 网络, tcp/ip, 网络协议

文章目录

  • 重点
  • 概念
  • IP协议
    • 4位首部长度
    • 8位生存时间(TTL)
    • 分片
      • MTU-最大传输单元
      • 分片过程
    • 组装
  • 网段
    • 网段划分
      • 子网掩码
  • 特殊IP
    • loopback 环回
    • 解决IP地址不足问题
  • 私有 IP
    • 访问广域网和返回的步骤
    • NAT
      • NAPT-网络地址端口转换表
      • NAT技术的缺陷
      • NAT和代理服务器
        • 正向代理
        • 反向代理
      • 为什么私网IP不能出现在公网当中
  • 路由
    • 路由表查询的具体过程
    • route


重点

  • 网络层的作用:在复杂的网络环境中确定一个合适的路径.
  • 理解 IP 地址,理解 IP 地址和 MAC 地址的区别
  • 理解 IP 协议格式
  • 了解网段划分方法
  • 理解如何解决 IP 数目不足的问题,掌握网段划分的两种方案
  • 理解私有 IP 和公网 IP
  • 理解网络层的 IP 地址路由过程
  • 理解一个数据包如何跨越网段到达最终目的地
  • 理解 IP 数据包分包的原因
  • 了解 NAT 设备的工作原理

概念

  • 应用层:解决如何传输数据的问题
  • 传输层:解决可靠性问题
  • 网络层:数据往哪里传,怎么找到目标主机
  • 数据链路层(物理层):数据在物理硬件层面上传输

网络层的 IP 协议,拥有将数据从 A 主机发送到 B 主机的能力,并不代表每次都能成功送达,失败了就由传输层兜底重传

  • 主机:配有IP地址,但是不进行路由控制的设备。但实际现在几乎不存在不进行路由控制的设备了,就连你的笔记本也会进行路由控制。
  • 路由器:既配有IP地址,又能进行路由控制。
  • 节点:主机和路由器的统称。

IP协议

IPV4 中报文的格式

image-20240815110959878

  • 4位版本号:指定 IP 协议的版本,IPV4 来说就是 4,IPV6 来说就是 6
  • 4位首部长度:IP 报头的长度,以4字节为单位,标准长度需要用四位首部长度 * 4字节
  • 8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本,只能四选一
  • 16位总长度:IP报头+有效载荷的总长度
  • 16位标识:唯一的标识主机发送的报文,如果数据在IP层进行了分片,那么每一个分片对应的id都是相同的
  • 3位标志字段:
  1. 第一位保留,表示现在不用。
  2. 第二位表示禁止分片,表示如果报文长度超过MTU,IP模块就会丢弃该报文。
  3. 第三位表示“更多分片”,如果报文没有进行分片,则该字段设置为0,如果报文进行了分片,最后一个分片置为 0, 其他分片报文都是 1,0 就类似于一个分片报文段的结束标记

更多分片为 0,且分片偏移为 0,代表当前报文没有进行分片;
更多分片为 1,且分片偏移为 0,代表当前是分片后报文中的第一个;
更多分片为 0,且分片偏移不为 0,代表当前是分片报文中的最后一个;

  • 13位片偏移:分片相对于原始数据载荷开始处的偏移,表示当前分片在原数据载荷中的哪个位置,实际偏移的字节数是这个值 * 8 得到的。因此除了最后一个报文之外,其他报文的长度必须是8的整数倍,否则报文就不连续了。如果数据载荷不足 8 的整数倍,需要进行向下取整!比如某个分片的数据载荷部分是 1476 字节,并非 8 的整数倍,那就应该选择1476/8=184.5 向下取整,即采用 8*184=1472 为该报文的数据载荷长度
  • 8位生存时间(TTL):控制 IP 报文能在网络层传输的时间,每经过一个路由,TTL 减一,一直减到0还没到达,那么就丢弃了,这个字段主要是用来防止出现路由循环
  • 8位协议:表示上层协议的类型,ICMP 1,IGMP 2,TCP 6,UDP 17,IPv6 41,OSPF 89
  • 16位首部检验和:检测数据是否损坏,采用因特网检验和
  • 32位源IP地址和32位目的IP地址:表示发送端和接收端所对应的IP地址
  • 选项字段:不定长,最多15×4 = 40字 节,首部默认20字节

IP 协议的报文中没有端口号,因为端口号是传输层应该解决的事情

4位首部长度

IP从底层获取到一个报文后,首先读取报文的前20个字节,并从中提取出4位的首部长度,计算报头大小,报头大小 - 20字节得到选项,读完选项剩下都是有效载荷

8位生存时间(TTL)

8位生存时间代表的是报文到达目的地的最大报文跳数,每当报文经过一次路由,这里的生存时间就会减一,当生存时间减为0时该报文就会被自动丢弃

分片

传输层一次向下交付的数据太多了会导致分片,数据链路层不支持过大的数据,这就需要在发送方网络层对数据进行分片,分片后的每片都有独立ip,分片会提高丢包的概率,影响传输速率

MTU-最大传输单元

将IP传下来的数据封装成数据帧,然后发送到网络当中,数据帧不能超过MTU,数据帧一般为1500字节

分片过程

分片报文总字节数IP报头字节数数据字节数16位标识“更多分片”13位片偏移
1150020148012310
215002014801231185
315002014801231370
46020401230555

假设IP层要发送4500字节的数据,由于该数据超过了MAC帧规定的MTU,因此IP需要先将该数据进行分片

IP报头如果不携带选项字段,那么其大小就是20字节,IP层添加的IP报头的长度就是20字节,并将数据分片四个分片报文

假设四个分片报文的16位标识都是123,则每片的id都是123

如果报文进行了分片,最后一个分片置为 0, 其他分片报文都是 1,0 就类似于一个分片报文段的结束标记

由于报文的长度必须是8的整数倍,如果数据载荷不足 8 的整数倍,需要进行向下取整,1480÷8 = 185

(1480+1480)÷8 = 370 (1480+1480+1480)÷8 = 555

总字节数相加为1480+1480+1480+40=4480,不是4500因为,加上 IP 报头 20 字节

组装

在接收方网络层对数据进行组装,根据16位标识来确定当前分片属于哪一个 “组”,再将当前报文和后续收到同一组的报文集合在一起

  • 先找到分片报文中13位片偏移为0的分片报文,然后提取出其IP报头当中的16位总长度字段,通过计算即可得出下一个分片报文所对应的13位片偏移,按照此方式依次将各个分片报文拼接起来。

  • 直到拼接到一个“更多分片”标志位为0的分片报文,此时表明分片报文组装完毕。

网段

IP = 网络号 + 主机号,例如ip为1.1.1.1

1.1.1.      1
网段   主机号
  • 网络号:标识该地址所在的网络
  • 主机号:标识该地址所对应主机上的具体设备

网段划分

image-20240820140355583

  • 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。

子网掩码

  • 引入子网掩码来区分网络号和主机号
  • 子网掩码也是一个 32 位的正整数。通常用一串 0 来结尾,一串 1 开头,如255.255.255.0;
  • 将 IP 地址和子网掩码进行 按位与 操作,得到的结果就是网络号;
  • 假设IP地址是192.168.128.10,子网掩码进行“按位与”操作后得到的就是192.168.128.0,就是网络

子网划分的目的:就是提高查找目标主机的效率

特殊IP

只能用于局域网

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

loopback 环回

image-20240820164126910

  • 如果是环回程序,会把报文发给IP输入函数读取上去,不将其插入到以太网中。

  • 如果不是环回程序的话,插入到以太网中

解决IP地址不足问题

  • 动态分配IP地址:只给接入网络的设备分配IP地址

  • NAT技术:能够让不同局域网当中同时存在两个相同的IP地址

  • IPv6:IPv6用16字节128位来表示一个IP地址

私有 IP

  • 10.*,前8位是网络号,共16,777,216个地址。
  • 172.16.* 到172.31. *,前12位是网络号,共1,048,576个地址。
  • 192.168.*,前16位是网络号,共65,536个地址。

访问广域网和返回的步骤

image-20240820181301378

  • LAN:表示连接本地网络的端口,也是子网,基本都是192.168.1.1
  • WAN:表示连接广域网的端口,一般指互联网

主机 A,访问目的IP122.77.241.10 的具体步骤,192.168.1.201 是本地私有ip,10.1.1.2是运营商私有ip,122.77.241.4是运营商公网ip

本地主机A发送IP家庭路由器B源IP:192.168.1.201目的IP:122.77.241.10
路由器B收到报文后,检测目的IP,发现并不是局域网的IP
于是交付给上层的运营商路由器C,报文的源IP被修改为家用路由器B的wan口IP
源IP:10.1.1.2目的IP:122.77.241.10
广域网IP寻址操作,找到目标公网IP的主机,再将报文发送给该主机源IP:122.77.241.4目的IP:122.77.241.10

目的ip122.77.241.4返回数据过程,本地ip192.168.1.201,10.1.1.1是运营商私有ip,122.77.241.3公网ip

目标主机返回报文,先到达运营商服务器源IP:122.77.241.10目的IP:122.77.241.4
确定局域网 IP 后,就修改当前报文的目的 IP,继续往局域网转发源IP:122.77.241.10目的IP:10.1.1.2
家庭路由器B发送IP本地主机A源IP:122.77.241.10目的IP:192.168.1.201

NAT

由于私网IP不能出现在公网当中,路由器会不断将数据包IP首部中的源IP地址替换成路由器的WAN口IP,NAT是一种将私有IP和全局IP相互转化的技术方法

NAPT-网络地址端口转换表

NAT路由器内部,用于地址转换的表。局域网中主机的私有IP 和 外网当中的某个公网IP之间的映射关系

image-20240821224744639

  • 当局域网中的主机向外网发送数据时,路由器会将源IP地址替换为自己的WAN口IP地址,并建立该主机私有IP与其对应访问的公网IP之间的映射关系,同时加上一个路由器选定的端口号。
  • 当外网发来响应数据时,NAT路由器又会将目的IP地址替换成局域网中对应主机的LAN口IP地址,路由器就能通过IP+Port的方式来区分发给不同主机的数据包。
  • 例如主机A和主机B用端口1010 访问同一个网站,此时路由器先接收一个主机请求,将源IP换成WAN口 ip端口号用1010,第二个接受的主机将源IP换成WAN口 ip端口号用1011

NAT技术的缺陷

  • 无法从NAT外部向内部服务器建立连接,因为外部无法知道内部的私网IP,也就无法主动与内部服务器建立连接。
  • 转换表的生成和销毁都需要额外开销。
  • 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。

NAT和代理服务器

代理网络用户去取得网络信息

  • NAT 在网络层工作,对 IP 地址进行替换;代理服务器是在应用层工作
  • NAT设备是网络基础设备之一,解决的是IP不足的问题,而代理服务器则是更贴近具体应用,加速器
正向代理

一个位于客户端和目标服务器之间的服务器,客户端并不直接访问目标服务器,而是先访问代理服务器,由代理服务器代替客户端去访问对应的目标服务器,并将目标服务器的响应结果返回给客户端

image-20240821225940551
  • 缓存常用的内容,从而减少对目标服务器的请求,提高访问速度
  • 访问控制和过滤,限制用户访问特定网站或资源
反向代理

一个位于客户端和目标服务器之间的服务器,对于客户端而言,反向代理服务器就相当于目标服务器,用户不需要知道目标服务器的地址

image-20240821225956525
  • 百度内部实际并不是只有一台服务器,但不同地区的人们都可以通过访问www.baidu.com享受到百度提供的服务
  • 反向代理可以起到负载均衡的作用。比如不设置反向代理服务器,那么用户在访问百度时,就会随机访问到百度内部的某台服务器,此时就可能导致某些服务器压力太大,而某些服务器却处于闲置状态。
  • 便于统一管理服务器集群,提供统一入网服务器
  • 提高了安全性,所有访问先查询是不是在黑名单或者是白名单

为什么私网IP不能出现在公网当中

  • 不同的局域网中主机的IP地址可能是相同的,所以私网IP无法唯一标识一台主机
  • 数据包必须要经过运营商的路由器

路由

实际就是一跳一跳“问路”的过程, “一跳” 就是数据链路层中的一个区间

路由表查询的具体过程

  • 首先检测是或否是当前局域网中的 IP,是则可以直接转发到目标主机;
  • 不是则查看自己的路由表,是否保存了这个 IP 应该往哪里走;
  • 路由表没有保存,则和其他与自己相连的路由器通信(信息同步),问他们这个 IP 应该给谁
  • 路由器经过路由表查询后,没有发现匹配的子网,此时路由器会将该数据转发给默认路由

route

route命令可以查看服务器上对应那些路由表

  • Destination代表的是目的网络地址。
  • Gateway代表的是下一跳地址,_gateway 以及 0.0.0.0 代表的都是默认网关
  • Genmask代表的是子网掩码。
  • Flags中,U标志表示此条目有效,G标志表示某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。
  • Iface代表的是发送接口。

将目的ip和路由表中子网掩码"按位与"之后得到网络地址,再和Destination比较,两者相等代表当前ip就是需要通过该项路由,此时通过Iface接口发出去,如果和Destination不相等,则继续与下一个子网掩码比较,以此类推,最后由default 默认路由发送出去。


http://www.ppmy.cn/news/1514634.html

相关文章

ElementPlus下拉框输入框对齐问题

1.问题 2.解决方法 2.1label-width 说明:el-form中label-width设置为auto 2.2 label-wdith固定值 说明:如果在el-form-item里面设置了label-width"100px";采用宫格布局。 .demo-one{display: grid;grid-template-columns: repe…

基于FPGA的ASIC prototype验证

在当今快速发展的电子设计自动化(EDA)领域,专用集成电路(ASIC)的开发因其高性能、低功耗和定制化的特点而备受青睐。然而,ASIC的设计和制造过程不仅成本高昂,而且周期漫长,一旦进入生…

嵌入式和单片机有什么区别?

目录 (1)什么是嵌入式? (2)什么是单片机? (3)嵌入式和单片机的共同点 (4)嵌入式和单片机的区别 (1)什么是嵌入式? 关…

k8s学习(三十八) 使用OpenTelemetry+jaeger实现链路追踪

文章目录 前言一、安装jaeger二、安装cert-manager三、安装OpenTelemetry Operator四、配置 OpenTelemetry Collector五、配置 Instrumentation六、编写java示例程序并测试调用链跟踪 前言 OpenTelemetry 可以用于从应用程序收集数据。它是一组工具、API 和 SDK 集合&#xff…

ARM——驱动——inmod加载内核模块

在上一篇文章的代码上添加出错处理 #include <linux/init.h> // 包含初始化宏和函数 #include <linux/kernel.h> // 包含内核函数和变量 #include <linux/fs.h> // 包含文件操作的结构和函数 #include <linux/kdev_t.h> /…

培训第三十五天(容器的基础命令使用)

1、创建一个容器并同时执行echo命令 # 快速启动一个容器执行特定的一次性命令并查看输出结果&#xff0c;输出结果后容器直接退出[rootdocker ~]# docker run -it --namea0 centos:latest echo "abc"abc[rootdocker ~]# docker psCONTAINER ID IMAGE COMMAND …

重定向

重定向原理 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> int main() { close(1); int fd open("myfile", O_WRONLY|O_CREAT, 00644); if(fd < 0){ perror("o…

PXE 高效批量网络装机

部署 PXE 远程安装服务 规模化&#xff1a;同时装配多台服务器&#xff1b; 自动化&#xff1a;安装系统、配置各种服务&#xff1b; 远程实现&#xff1a;不需要光盘、U 盘等安装介质 搭建 PXE 远程安装服务器 准备 CentOS 7 安装源 CentOS 7 的网络安装源一般通过 HTTP…

机器学习:决策树分类代码实现

1、概念 决策树分类是一种监督学习算法&#xff0c;用于分类问题&#xff0c;即预测离散标签。其核心原理是通过树状图模型来模拟决策过程&#xff0c;从而对数据进行分类。 2、数据准备&#xff1a; 收集数据集&#xff0c;并对其进行清洗和预处理。 将数据集分为特征&#x…

归并排序、计数排序及排序大总结

一、归并排序 1.基本思想 归并排序&#xff08;MERGE-SORT&#xff09;是建立在归并操作上的一种有效的排序算法&#xff0c;该算法是采用分治法&#xff08;Divide andConquer&#xff09;的一个非常典型的应用。将已有序的子序列合并&#xff0c;得到完全有序的序列&#x…

选择徐州服务器租用与托管的好处有哪些?

在目前的互联网社会中&#xff0c;服务器对于有着网站业务的企业来说起着十分重要的作用&#xff0c;一般来讲服务器有着租用与托管&#xff1b;两种业务方式&#xff0c;接下来小编将会介绍一下企业选择徐州服务器租用与托管的好处。 首先选择服务器服务器租用与托管&#xff…

Docker Compose运行Elasticsearch

前提&#xff1a;确保你已经安装了Docker和Docker Compose 创建项目目录 创建一个目录来存放项目文件 mkdir es cd es 创建docker-compose.yml文件 touch docker-compose.yml version: 3.3 services: elasticsearch: image: docker.elastic.co/elasticsearch/elastics…

如何使用ssm实现游戏攻略网站的设计与实现+vue

TOC ssm052游戏攻略网站的设计与实现vue 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进行科学化&#xff0c;规范…

tomcat的初实现与memcache

文章目录 1. tomcat实现多虚拟机2. tomcat定制访问日志格式3. tomcat实现MSM集群4. JVM垃圾回收算法和分代5. memcache使用&#xff0c;安装和MSM原理 1. tomcat实现多虚拟机 一键安装tomcat并启动&#xff0c;使用openjdk #!/bin/bash version10.1.28 usertomcat grouptomcat…

成为一名厉害的黑客,必须知道的12个步骤,黑客入门

黑客攻防是一个极具魅力的技术领域&#xff0c;但成为一名黑客毫无疑问也并不容易。你必须拥有对新技术的好奇心和积极的学习态度&#xff0c;具备很深的计算机系统、编程语言和操作系统知识&#xff0c;并乐意不断地去学习和进步。 如果你想成为一名优秀的黑客&#xff0c;下…

猜数3次-python

题目要求&#xff1a; 定一个数字&#xff08;1-10&#xff0c;随机产生&#xff0c;通过3次判断来猜出数字&#xff09; 数字随机产生&#xff0c;范围1-10有三次机会猜测数字&#xff0c;通过3层嵌套判断实现每次猜不中会提示大了或者小了 ps&#xff1a;补充随机函数 imp…

MyBatis 源码解读:MyBatis 核心架构与模块总览

前言 在深入解析 MyBatis 的源码之前&#xff0c;理解其整体架构和各个模块的职责是至关重要的。MyBatis 通过精巧的模块设计&#xff0c;实现了灵活的数据库访问与配置管理。本篇文章将对 MyBatis 的核心架构进行全面概述&#xff0c;帮助你在阅读源码时能够更加系统化地理解…

【通俗理解】CNN复杂度——卷积神经网络的计算成本解析

【通俗理解】CNN复杂度——卷积神经网络的计算成本解析 关键词提炼 #CNN复杂度 #卷积神经网络 #计算成本 #输入数据尺寸 #卷积核大小 #卷积核数量 #复杂度公式 第一节&#xff1a;CNN复杂度的类比与核心概念【尽可能通俗】 1.1 CNN复杂度的类比 CNN的复杂度就像是烹饪一道大…

自然语言处理系列三十三》 语义相似度》同义词词林》算法原理

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 自然语言处理系列三十三同义词词林算法原理代码实战 总结 自然语…

[mongodb][查询]MongoDb 模糊查询

模糊查询 {name:/HLCSOU17649/i}时间查询 {date:{"$gte":ISODate("2019-11-27T00:00:00Z"),"$lte":ISODate("2019-11-28T00:00:00Z")}}组合查询 {date{"$gte":ISODate("2019-11-27T00:00:00Z"),"$lte":…