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.mzph.cn/news/875039.shtml

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

相关文章

Unity Shader - 2024 工具篇

目录 IDE 工具建议 IDE工具 Sublime 3 大势所趋,但是Sublime 使用插件还是相当的不习惯 代码跳转 Go to definite IDE 工具建议 () what is the best ide for coding shaderlab - #4 by DaveAstator - Unity Engine - Unity Discussions​​​​​​​I IDE工…

修复SteamUI.dll加载失败的指南,快速修复failed to load steamui.dll

在使用Steam平台进行游戏下载、安装和运行时,可能会遇到一些系统错误,比如“failed to load steamui.dll”。这个错误通常意味着Steam的用户界面库文件steamui.dll出现了问题。本文将详细介绍steamui.dll文件的相关信息以及如何修复这一问题。 一.什么是…

邮件安全篇:如何防止邮件泄密?

本文主要讨论组织内部用户违反保密规定通过邮件泄密的场景。其他场景导致邮箱泄密的问题(如账号被盗、邮件系统存在安全漏洞等)不在本文的讨论范围。本文主要从邮件系架构设计、邮件数据防泄漏系统、建立健全规章制度、安全意识培训等方面分别探讨。 1. …

Java响应式编程库Reactor的介绍和基本使用

关于响应式编程的概念和介绍可以参考: 响应式编程(Reactive Programming)是什么? Java语言中,RxJava和Reactor是实现响应式编程的两个最流行的库,因为 Spring 5 及更高版本中,Reactor 是 Spring WebFlux 的底层实现框架,用于构建响应式 Web 应用,所以相比而言,Reactor…

充电桩浪涌保护方案—保障充电设施安全稳定运行的关键

在当今新能源汽车蓬勃发展的时代,充电桩作为电动汽车的“加油站”,其重要性不言而喻。然而,由于其复杂的电气环境和暴露于户外的特点,充电桩容易受到浪涌的影响。浪涌可能来自雷电、电网故障、大功率设备的启停等,对充…

JS+H5可视化广度优先算法

源码在效果图后面 可标记 障碍 起始点 终点 点击寻路按钮后&#xff0c;表格上会自动出现一条蓝色最佳路径&#xff08;加了一格一格显示的动画&#xff09; 以下是效果图 橙色起点 绿色终点 红色障碍物 以下是寻路结果 源代码 <!DOCTYPE html> <html lang&quo…

html+css前端作业 王者荣耀官网6个页面无js

htmlcss前端作业 王者荣耀官网6个页面无js 下载地址 https://download.csdn.net/download/qq_42431718/89571150 目录1 目录2 项目视频 王者荣耀6个页面&#xff08;无js&#xff09; 页面1 页面2 页面3 页面4 页面5 页面6

Camtasia2024官方下载安装激活教程+免费永久许可证秘钥激活码

在这个数字化内容层出不穷的时代&#xff0c;视频的力量日益凸显。无论是用于教育教学、企业培训、内容创作&#xff0c;还是记录生活中的精彩瞬间&#xff0c;一款强大且易用的视频编辑软件都至关重要。今天&#xff0c;让我们一同走进 Camtasia 2024 的精彩世界&#xff0c;探…

分类模型-逻辑回归和Fisher线性判别分析★★★★

该博客为个人学习清风建模的学习笔记&#xff0c;部分课程可以在B站&#xff1a;【强烈推荐】清风&#xff1a;数学建模算法、编程和写作培训的视频课程以及Matlab等软件教学_哔哩哔哩_bilibili 目录 1理论 1.1逻辑回归模型 1.2线性概率模型 1.3线性判别分析 1.4两点分布…

github的Codespaces是什么

目录 github的Codespaces是什么 一、定义与功能 二、特点与优势 三、工作原理 四、使用场景与限制 github的Codespaces是什么 GitHub的Codespaces是一个基于云的即时开发环境,它利用容器技术为开发者提供一个完全配置好的开发环境,以便他们能够直接在浏览器或通过Visua…

轻松上手微调大语言模型——QLORA篇

轻松上手微调大语言模型——QLORA篇 前言 本篇Blog是代码实战篇&#xff0c;着重于新手如何在消费级GPU上快速跑通代码&#xff0c;打造属于自己的AI大语言模型。涉及到相关技术的具体原理我会在以后的更新中一一讲解。 在本篇中我对llama-2进行微调作为示例。 先决条件 安…

【成功率极高】消逝的光芒1联机显示加入的游戏不可用完美解决办法

今天和朋友联机玩消逝的光芒1&#xff0c;但是总是联机有问题&#xff0c;总是莫名其妙连上又退出去。而且退出去一次之后就进不来了&#xff0c;网上查了下&#xff0c;大概有三种方法&#xff0c;我全都试了下。 发现只有一种办法有用&#xff0c;那就是不连加速器。 没错&…

【你也能从零基础学会网站开发】 SQL结构化查询语言应用基础--创建表约束(table Constraints) 之 PRIMARY KEY 主键约束

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 什么是SQL数据…

《“微软蓝屏”敲响警钟:网络安全与系统稳定何去何从》

#“微软蓝屏”事件暴露了网络安全哪些问题&#xff1f;# 近日&#xff0c;一场由微软视窗系统软件更新所引发的全球性“微软蓝屏”事件&#xff0c;犹如一场突如其来的风暴&#xff0c;以雷霆万钧之势席卷了整个科技领域。这一事件宛如一颗投入平静湖面的巨石&#xff0c;瞬间激…

centos系统mysql数据库压缩备份与恢复

文章目录 压缩备份一、安装 xtrabackup二、数据库中创建一些数据三、进行压缩备份四、模拟数据丢失&#xff0c;删库五、解压缩六、数据恢复 压缩备份 一、安装 xtrabackup 确保已经安装了 xtrabackup 工具。可以从 Percona 的官方网站 获取并安装适合你系统的版本。 # 添加…

Study--Oracle-07-ASM相关参数(三)

一、ASM初始化参数 1、ASM全量参数&#xff0c;见附件 2、ASM重要参数 3、ASM权限 ASM的三大系统权限包括SYSDBA、‌SYSOPER和SYSASM。‌ SYSDBA&#xff08;‌系统管理员&#xff09;‌&#xff1a;‌这是最高级别的权限&#xff0c;‌允许用户执行所有的数据库管理任务&a…

Windows 11 家庭中文版 安装 VMWare 报 安装程序检测到主机启用了Hyper-V或Device

1、问题 我的操作系统信息如下&#xff1a; 我在安装 VMWare 的时候&#xff0c;报&#xff1a; 因为我之前安装了 docker 桌面版&#xff0c;所以才报这个提示。 安装程序检测到主机启用了 Hyper-v或 Device/credential Guard。要在启用了Hyper-或 Device/Credential Guard …

系统架构师考点--设计模式

大家好。今天来总结一下设计模式的相关考点。这部分考点也有可能在论文中出现&#xff0c;这里总结的可能不够全面&#xff0c;大家自己可以翻一下教材好好了解一下。 架构模式&#xff1a;软件设计中的高层决策&#xff0c;例如C/S结构就属于架构模式&#xff0c;架构模式反…

[k8s源码]9.workqueue

client-go 是一个库&#xff0c;提供了与 Kubernetes API 服务器交互的基础设施。它提供了诸如 Informer、Lister、ClientSet 等工具&#xff0c;用于监听、缓存和操作 Kubernetes 资源。而自定义控制器则利用这些工具来实现特定的业务逻辑和自动化任务。业务逻辑实现&#xff…

【ROS2】演示:为有损网络使用服务质量设置

目录 背景 先决条件 运行演示 命令行选项 添加网络流量 背景 请阅读有关 QoS 设置的文档页面&#xff0c;以获取有关 ROS 2 中可用支持的背景信息。 在这个演示中&#xff0c;我们将生成一个发布相机图像的节点和另一个订阅图像并在屏幕上显示图像的节点。然后&#xff0c;我们…