IP协议和路由转发

文章目录

  • IP协议
    • IP报头
    • 网段划分
      • 特殊的IP
      • 私有IP和公有IP
    • IP分片
  • 路由

IP协议

IP协议提供了一种能力,将数据报从A主机送到B主机,TCP可以保证可靠性,所以TCP/IP协议可以将数据可靠的从A主机送到B主机。

IP报头

在这里插入图片描述
4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4。
8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要。

标识标志片偏移是为了解决IP分片问题使用的。

8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环。

8位协议: 表示上层协议的类型

选项字段最多也是40字节和TCP一样。

IP协议如何进行报头和有效载荷的分离?
4位的首部长度,单位也是4字节,和TCP报头中的4位首部长度是一样的。IP还有16位的总长度 = 报头长度 + 有效载荷。

IP协议如何分用?
32位源地址和32位目标地址: 表示发送端和接收端的IP地址。

网段划分

我们的网络不是凭空产生的,而是有人为我们专门设计的,我们生活中的大部分网络基础设施的建设都是运营商帮我们做的,网络世界是被精心设计过得,如同OS一样。

IP地址一般分为两部分,一部分为网路号,一部分为主机号,所以IP地址 = 网络号 + 主机号。

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

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

但是,手动管理子网内的IP, 是一个相当麻烦的事情.,因此有一种技术叫做DHCP, 能够自动的给子网内新增主机节点分配IP地址, 避免了手动管理IP的不便,一般路由器都有这个服务。

通常情况下,网络划分为五类:
在这里插入图片描述
但是这种划分方案的局限性是很大的,假设申请了一个B类地址, 理论上一个子网内能允许6万5千多个主机. A类地址的子网内的主机数更多,但是在现实中一个子网能用到这么多主机的情况并不多,因此很多的IP地址就会被浪费。针对这个情况,又引入了一个子网掩码的概念,子网掩码也是一个32位的正整数. 通常用一串 “0” 来结尾;将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号,这样通过子网掩码就可以很好的提高IP地址的使用率。
在这里插入图片描述

在这里插入图片描述
IP地址与子网掩码做与运算可以得到网络号, 主机号从全0到全1就是子网的地址范围。IP地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/24,表示IP地址为140.252.20.68, 子网掩码的高24位是1,也就是255.255.255.0。

网段划分是什么?
网段划分可以将一个较大的IP地址空间分割成多个较小的、独立的网络段,也就是子网。可以利用子网掩码进行划分,划分可以提高网络的安全性、性能、可管理性和可扩展性。通过合理的网段划分,可以构建更加高效、稳定和安全的网络环境。

特殊的IP

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

私有IP和公有IP

RFC 1918规定了用于组建局域网的私有IP地址。

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

在这个范围内的都是私有IP,其他的都是公网IP,私有IP对应的就是内网,公网IP对应的就是公网。

一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP),路由器LAN口连接的主机, 都从属于当前这个路由器的子网中,不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之间的IP地址就可以重复了,每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级,最外层的运营商路由器, WAN口IP就是一个公网IP了,子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT。

在这里插入图片描述
从图中可以看到,源IP地址在路由出内网之前源IP是一直在变化的,因为内网IP无法再公网上进行路由。而且如果不变化的话,服务器收到后会存在很多这个ip的主机,不知道回应应该发给谁,所以这样可以保证回应最起码发送给自己和公网连的那个路由器上。
任何一个内网路由器,在转发报文时,都需要将源IP(端口)转化为路由器的WAN口IP。这就是NAT。

真实的网络情况 = 公网 + 私网(家用网络和运营商私网)构建的网络拓扑结构。

IP分片

因为数据链路层对报文是有大小要求的,因此如果IP报文太大,就需要对报文进行分片,分片一定是不好的,因为分片会提高报文丢失的概率,一个报文分成多片,如果丢失一片就算这个报文丢失,所以分片应该成为网络通信中的小概率事件。
MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制。以太网帧中的数据长度规定最小46字节,最大1500字节。
在这里插入图片描述
那么如果做到尽量不分片呢?
所以TCP在发送报文时,不能只按照对方的接受能力,直接发送一个大报文,必须根据自己的分片可能性,设置自己数据段的大小。这个数据段的大小一般为1460,成为MSS最大段尺寸。TCP在建立连接的过程中, 通信双方会进行MSS协商。

因为分片,所以IP报头的标识标志片偏移才有了意义,因为分片后的IP报文,都需要IP报头,用来让接收方进行组装。

16位标识:唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的。
3为标志:第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话,最后一个分片置为0, 其他是1. 类似于一个结束标记.
16位片偏移:是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了)。

  1. 可以通过报文的相同的标识来收集报文片段。
  2. 可以通过3为标志的最后一位和片偏移来确定是否是分片报文,只有两个都为0才不是分片报文,其他情况都是分片报文。
  3. 我们可以确认收到开头也可以确认收到结尾,中间的通过片偏移来确定是否连续就可以判断是否把报文收齐了。

路由

每一个局域网都会存在自己专属的和局域网的网络号,而路由的过程就是不断的比对网络号进行路由,路由到局域网在根据主机号找到对应的主机,所以IP就提供了将数据包从A主机送到B主机的能力。

路由的过程, 就是这样一跳一跳(Hop by Hop) “问路” 的过程.
在这里插入图片描述

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

所以整个网络传输的过程可以看成是一个局域网一个局域网之间的传输。

如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个路由器内部维护一个路由表;
路由表可以使用route命令查看。
如果目的IP命中了路由表, 就直接转发即可;
路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。网关就是下一跳的地址。
在这里插入图片描述
路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。

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

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

相关文章

Unity UGUI 之 Slider

本文仅作学习笔记与交流,不作任何商业用途 本文包括但不限于unity官方手册,唐老狮,麦扣教程知识,引用会标记,如有不足还请斧正 1.Slider是什么 滑块,由三部分组成:背景 填充条 手柄 填充条就是…

vue3前端开发-小兔鲜项目-产品详情基础数据渲染

vue3前端开发-小兔鲜项目-产品详情基础数据渲染!这一次内容比较多,我们分开写。第一步先完成详情页面的基础数据的渲染。然后再去做一下右侧的热门产品的列表内容。 第一步,还是老规矩,先准备好接口函数。方便我们的页面组件拿到对…

华盈生物-小分子靶点筛选服务:助力药物发现的利器

在药物发现的过程中,确定小分子化合物的靶点是至关重要的一步。华盈生物为科学家们提供了两种高效的小分子靶点筛选方案,助力研究人员精准锁定靶点,加速新药研发进程。 方案一:荧光标记与HuProt人类蛋白质组芯片结合 华盈生物的H…

软件设计之Java入门视频(19)

软件设计之Java入门视频(19) 视频教程来自B站尚硅谷: 尚硅谷Java入门视频教程,宋红康java基础视频 相关文件资料(百度网盘) 提取密码:8op3 idea 下载可以关注 软件管家 公众号 学习内容: 该视频共分为1-7…

三种方法加密图纸!2024如何对CAD图纸进行加密?

在2024年的今天,随着企业对数据安全意识的不断提高,对CAD图纸进行加密成为了保护知识产权和商业机密的重要手段。无论是建筑设计、机械制造,还是电子工程领域,CAD图纸都承载着核心的设计理念和技术细节,因此&#xff0…

音视频入门基础:PCM专题(3)——使用Audacity工具分析PCM音频文件

音视频入门基础:PCM专题系列文章: 音视频入门基础:PCM专题(1)——使用FFmpeg命令生成PCM音频文件并播放 音视频入门基础:PCM专题(2)——使用Qt播放PCM音频文件 音视频入门基础&am…

LabVIEW多种测试仪器集成控制系统

在现代工业生产与科研领域,对测试设备的需求日益增长。传统的手动操作测试不仅效率低下,而且易出错。本项目通过集成控制系统,实现了自动化控制,降低操作复杂度和错误率,提高生产和研究效率。 系统组成与硬件选择 系…

人工智能学习笔记 - 初级篇Ⅱ - 图形可视化 - 第5节-设置刻度、刻度标签和网格

微信公众号:御风研墨 关注可了解更多。问题或建议,请公众号留言 文章目录 设置刻度、刻度标签和网格应用背景准备工作操作步骤工作原理补充说明最后 设置刻度、刻度标签和网格 应用背景 在数据可视化中,合理设置刻度、刻度标签和网格是提高…

如何学习EMR:糙快猛的大数据之路(建立整体框架)

目录 初学EMREMR是什么?我的EMR学习故事糙快猛学习法则代码示例: 你的第一个EMR任务学习EMR的深入步骤EMR进阶技巧实用资源推荐常见挑战和解决方案 EMR生态EMR生态系统深度探索1. EMR上的Hadoop生态系统2. EMR Studio3. EMR on EKS 高级EMR配置和优化1. EMR实例集策…

《Milvus Cloud向量数据库指南》——开源许可证的开放度:塑造AI开发合作与创新的双刃剑

在人工智能(AI)技术日新月异的今天,开源软件作为推动技术创新的重要力量,其许可证的开放度成为了影响AI开发合作、创新模式乃至整个行业生态的关键因素。不同的开源许可证模型,以其各自独特的开放程度,不仅决定了软件项目的可访问性和可定制性,还深刻影响着AI领域内的合…

(7) cmake 编译C++程序(二)

文章目录 概要整体代码结构整体代码小结 概要 在ubuntu下,通过cmake编译一个稍微复杂的管理程序 整体代码结构 整体代码 boss.cpp #include "boss.h"Boss::Boss(int id, string name, int dId) {this->Id id;this->Name name;this->DeptId …

如何使用捕获过滤器

点击捕获,选项,然后在所选择的捕获过滤器上输入对应的捕获表达式 抓包过滤器 type(类型) 限定符: 比如host,net,port限定符等dir(方向) 限定符: src dstProto(协议类型)限定符: ether ip arp 二层过滤器举例 tcp dst port 135 …

数据传输安全--IPSEC

目录 IPSEC IPSEC可以提供的安全服务 IPSEC 协议簇 两种工作模式 传输模式 隧道模式 两个通信保护协议(两个安全协议) AH(鉴别头协议) 可以提供的安全服务 报头 安全索引参数SPI 序列号 认证数据 AH保护范围 传输模…

Qt基础 | QSqlTableModel 的使用

文章目录 一、QSqlTableModel 的使用1.主窗口MainWindow类定义2.构造函数3.打开数据表3.1 添加 SQLite 数据库驱动、设置数据库名称、打开数据库3.2 数据模型设置、选择模型、自定义代理组件、界面组件与模型数据字段间的数据映射 4.添加、插入与删除记录5.保存与取消修改6.设置…

计算机网络基础:1.上网设备与流程、OSI七层模型、TCP/IP五层模型

你正在经营一家繁忙的餐厅,顾客们点餐并期待着美味的食物。我们可以将网络的各个层次和设备比作餐厅的不同部分。 一、上网设备 网卡:就像是餐厅的点餐系统,顾客通过它来下单,而厨房通过它来接收订单。上网设备必须有网卡&#x…

数据结构之二元查找树转有序双向链表详解与示例(C/C++)

文章目录 1. 二元查找树(BST)简介2. 有序双向链表(DLL)简介3. 二元查找树的实现4. 转换为有序双向链表的步骤5. C实现代码6. C实现代码7. 效率与空间复杂度比较8. 结论 在数据结构与算法中,树和链表都是非常重要的数据…

压测实操--kafka-consumer压测方案

作者:九月 环境信息: 操作系统centos7.9,kafka版本为hdp集群中的2.0版本。 Consumer相关参数 使用Kafka自带的kafka-consumer-perf-test.sh脚本进行压测,该脚本参数为: thread:测试时的单机线程数&…

数据结构(稀疏数组)

简介 稀疏数组是一种数据结构,用于有效地存储和处理那些大多数元素都是零或者重复值的数组。在稀疏数组中,只有非零或非重复的元素会被存储,从而节省内存空间。 案例引入 假如想把下面这张表存入文件,我们会怎么做?…

Ubuntu 修改源地址

注意事项:版本说明!!! Ubuntu24.04的源地址配置文件发生改变。 不再使用以前的 sources.list 文件,该文件内容变成了一行注释: # Ubuntu sources have moved to /etc/apt/sources.list.d/ubuntu.sources…

U盘有盘符但是打不开?深度解析与双路径恢复策略

数字时代,U盘作为我们日常工作和生活中不可或缺的数据存储工具,其稳定性和可靠性直接关系到我们数据的安全。然而,当您遇到U盘已成功识别盘符,却无法正常访问的情况时,这无疑是一个令人头疼的问题。本文将围绕“U盘有盘…