【计算机网络】详解IP协议网段划分路由转发子网掩码网络号

news2024/10/16 16:06:12

一、IP功能

        IP可以实现主机定位和路由选择,提供一种能力,将数据可靠地从A点跨网络送到B点。数据先根据目的IP在局域网之间进行转发,再在局域网内进行内网转发

二、IP协议报头

  • 4 位版本号(version):指定 IP 协议的版本,对IPv4 来说,就是 4。
  • 4 位头部长度(header length):IP 头部的长度是多少个 32bit,也就是 length 4的字节数。4bit 表示最大的数字是 15,因此 IP 头部最大长度是 60字节。
  • 8 位服务类型(Type Of Service):3 位优先权字段(已经弃用),4 TOS 字段,和1 位保留字段(必须置为 0)。4TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于 ssh/telnet 这样的应用程序,最小延时比较
    重要;对于 ftp 这样的程序,最大吞吐量比较重要。
  • 16 位总长度(total length):IP 数据报整体占多少个字节。
  • 16 位标识(id):唯一的标识主机发送的报文。如果 IP 报文在数据链路层被分片了,那么每一个片里面的这个 id 都是相同的。
  • 3 位标志字段:第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。 第二位置为 1 表示禁止分片,这时候如果报文长度超过 MTU,IP 模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为 0,其他是 1。类似于一个结束标记。
  • 13 位分片偏移(framegament offset): 是分片相对于原始 IP 报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值除8得到的。因此, 除了最后一个报文之外, 其他报文的长度必须是 8 的整数倍(否则报文就不连续了).
  • 8 位生存时间(Time To Live, TTL):数据报到达目的地的最大报文跳数。一般是64。每次经过一个路由,TTL -= 1,一直减到 0 还没到达,那么就丢弃了。这个字段主要是用来防止出现路由循环。
  • 8 位协议: 表示上层协议的类型。
  • 16 位头部校验和: 使用 CRC 进行校验, 来鉴别头部是否损坏。
  • 32 位源地址和 32 位目标地址: 表示发送端和接收端。

三、网段划分

         IP 地址分为两个部分, 网络号和主机号。网络号:保证相互连接的两个网段具有不同的标识;主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号 不同的子网其实就是把网络号相同的主机放到一起。如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,是主机号必须不能和子网中的其他主机重复。
         每一个子网都有唯一的标识,就是网络号。发送的报文在转发时可以根据网络号进行淘汰路径,直到找到目标网络。 CIDR(Classless Interdomain Routing)技术引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;子网掩码也是一个 32 位的正整数。通常用一串 "0" 来结尾;将 IP 地址和子网掩码进行 "按位与" 操作,得到的结果就是网络号
        IP 地址和子网掩码还有一种更简洁的表示方法, 例如 140.252.20.68/24,表示 IP 地址140.252.20.68, 子网掩码的高 24 位是 1,也就是 255.255.255.0。

 四、私有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) 

五、运营商和路由转发

        运营商将网络基础设施搭建好。我们将来所有的报文都必须经过运营商,无法绕过运营商。 现在的路由器已经支持组建局域网,一般的家用设备所分配的IP地址都是192.168开头的IP地址。

        一个路由器可以配置两个IP 地址,一个是WANIP,一个是 LANIP(子网IP)。路由器 LAN 口连接的主机,都从属于当前这个路由器的子网中。不同的路由器,子网IP其实都是一样的(通常都是 192.168.1.1)。 子网内的主机IP地址不能重复。但是子网之间的IP地址就可以重复 每一个家用路由器,其实又作为运营商路由器的子网中的一个节点。这样的运营商路由器可能会有很多级,最外层的运营商路由器,WANIP就是一个公网IP了。子网内的主机需要和外网进行通信时,路由器将IP首部中的IP地址进行替换(替换成WANIP),这样逐级替换,最终数据包中的IP地址成为一个公网 IP。这种技术称为NAT(Network Address Translation,网络地址转换)。 我们所有人访问网络都是在内网当中访问的,我们无法直接访问公网,公网由各国的运营商进行报文的转发
        NAT 路由器收到外部的数据时, 又会把目标IP202.244.174.37替换回10.0.0.10,在NAT路由器内部,有一张自动生成的用于地址转换的表,当 10.0.0.10第一次向163.221.120.9发送数据时就会生成表中的映射关系。如果局域网内有多个主机都访问同一个外网服务器, 那么对于服务器返回的数据中,目的IP都是相同的。那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?这时候NAPT来解决这个问题了。使用IP+port来建立这个关联关系。这种关联关系也是由NAT路由器自动维护的。例如在TCP的情况下,建立连接时,就会生成这个表项,在断开连接后就会删除这个表项。
         路由器要有路由发现的算法 IP数据包的传输过程也和问路一样。IP 数据包,到达路由器时,路由器会先查看目的IP;路由器决定这个数据包是能直接发送给目标主机,还是需要发送给下一个路由器;依次反复,一直到达目标IP地址。如何判定当前这个数据包该发送到哪里呢?这个就依靠每个节点内部维护一个路由表。
         路由表可以使用route命令查看 。如果目的IP命中了路由表,就直接转发即可。路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。假设某主机上的网络接口配置和路由表如下:
        这台主机有两个网络接口,一个网络接口连到 192.168.10.0/24网络,另一个网络接口连到 192.168.56.0/24 网络;路由表的 Destination 是目的网络地址,Genmask 是子网掩码,Gateway 是下一跳地址,Iface是发送接口,Flags中的 U 标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发。
转发过程例 1: 如果要发送的数据包的目的地址是 192.168.56.3
跟第一行的子网掩码做与运算得 到 192.168.56.0,与第一行的目的网络地址不符,再跟第二行的子网掩码做与运算得到192.168.56.0,正是第二行的目的网络地址,因此从 eth1 接口发送出去;由于192.168.56.0/24 正是与 eth1 接口直接相连的网络,因此可以直接发到目的主机不需要经路由器转发。
转发过程例 2: 如果要发送的数据包的目的地址是 202.10.1.2。依次和路由表前几项进行对比,发现都不匹配;按缺省路由条目,eth0接口发出去,发往192.168.10.1路由器;由 192.168.10.1 路由器根据它的路由表决定下一跳地址。

六、地区间的网段划分

         这里为了方便,我们直接将各个国家作为网段划分单位,将每个国家的每个省作为更小一级的网段划分单位举例子。以IPv4为例,假设美国划分到的网段是1.0.0.0/8,中国划分到的网段是2.0.0.0/8,俄罗斯划分到的网段是3.0.0.0/8,也就是说拿出前八个比特位来区分国家。我们国家第一台国家级间的路由器IP地址就为2.0.0.1/8。

        我们国家再拿出5个比特位来区分省市,那么陕西省的第一台省间路由器IP地址就是2.8.0.1/13。市与市之间再采用相同的方法,拿出几个比特位来划分市。进一步的,由于IP地址数量的限制,在整个市里就可以构建出一个局域网了,市里的路由器就可以和运营商的出入口路由器构建成一个子网。

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

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

相关文章

如何轻松使用pip安装Git仓库中的私有Python模块(使用pip和Git仓库发布和安装私有Python模块)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 Git模块 📒📝 Git仓库要求🔖 项目目录结构🔖 文件说明📝 编写setup.py📝 配置MANIFEST.in📝 推送代码到Git仓库📝 使用pip安装模块🔖 使用用户名和密码🔖 使用Personal Access Token (PAT)🔖 示例📝 更…

opencv外接矩形cv2.boundingRect和cv2.minAreaRect区别

在OpenCV中,cv2.boundingRect和cv2.minAreaRect是两个用于获取图像中形状边界的函数,但它们在功能和返回结果上有所不同。以下是两者的详细区别: 1. cv2.boundingRect 和 cv2.minAreaRect 功能描述 cv2.boundingRect 主要是用来计算图像轮廓…

企业资产安全之数据防泄密要领

在数字化时代,数据已成为企业最宝贵的资产之一。然而,随着数据价值的增加,数据泄露的风险也随之上升。从内部员工的无意泄露到外部黑客的恶意攻击,企业数据安全面临着前所未有的挑战。SDC沙盒数据防泄密解决方案,正是为…

从零入门AI篡改图片检测(金融场景)#Datawhale十月组队学习

1.大赛背景 在全球人工智能发展和治理广受关注的大趋势下,由中国图象图形学学会、蚂蚁集团、云安全联盟CSA大中华区主办,广泛联合学界、机构共同组织发起全球AI攻防挑战赛。本次比赛包含攻防两大赛道,分别聚焦大模型自身安全和大模型生成内容…

Android Compose使用LinearProgressIndicator绘制显示异常

使用依赖版本 androidx.compose.material3:material3:1.3.0-beta05 对应代码 LinearProgressIndicator(progress { 0.7f })直接使用上述代码绘制进度条时,最终显示效果如下: 问题原因 LinearProgressIndicator中gapSize属性表示进度和背景之前的空…

【文献及模型、制图分享】中国新型城镇化与绿色发展协调演进关系研究(熵值法、耦合协调模型)

文献介绍 双碳目标下,新型城镇化与绿色发展的协调演进对于推动中国经济高质量发展意义重大。运用熵值法、耦合协调模型等研究方法,分析了2005—2020年中国30个省(自治区、直辖市)新型城镇化与绿色发展协调演进的时空格局特征与类…

DOM中的元素获取方式、事件以及属性操作

一、WebApi介绍 1. Api的概念 API ( Application Programming Interface:应用程序编程接口) 是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组程序的能力,而又无需访问源码,无需了解其内部的工作…

26K star!学习AI也不难,这个项目讲的非常全

马上就要2024年了,谁不想学习一下AI相关的知识呢?怎么开始上手一直困扰着很多初学者,现在网上也充斥着各种搬运的垃圾课程,更是让人难以选择,我们就是希望帮初学者避开那些垃圾内容。 今天我们推荐的开源项目是微软推…

Windows上安装Go并配置环境变量(图文步骤)

前言 1. 本文主要讲解的是在windows上安装Go语言的环境和配置环境变量; Go语言版本:1.23.2 Windows版本:win11(win10通用) 下载Go环境 下载go环境:Go下载官网链接(https://golang.google.cn/dl/) 等待…

阿里大佬带你一周刷完 Java 面试八股文,比刷视频效果好多了

今天在脉脉刷到了这么一条消息,现在这个大环境,都后悔学 Java 了,想转行学前端, 看完很是震惊,据大数据统计,Java 的待遇是要好过前端的。小伙伴竟然被卷到想要转行......但是行情这个东西,也不…

Python实时视频流+网络摄像头+视频检测流程播放

实时视频处理 概述需求网络摄像头推流流媒体服务器查看设备视频、音频设备列表查看指定设备配置信息 不编码、指定分辨率推流编码加速python服务端处理多线程最终的处理方式 问题与分析 概述 一款桌面应用,可以配置视频处理参数,根据参数播放网络摄像头…

MySQL 8.4.0解压版安装记录

这几天,安装最新版mysql 8.4的时候,遇到了不少问题,网上的教程大多数都是旧版本的,也安装不成功。 参考了大量教程后,经过自己的摸索终于装好了,这里记录一下。 我下载的是8.4.0 LTS MySQL :: Download …

智绘城市地图:使用百度地图 API 实现智能定位

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

全网最易详解-数据仓库分区详解

最近要搭某个业务域的数仓,本来设计规划的挺好的,该搭DIM,DWD,DWS的也都设计好了,结果一跑数仓,全是大大小小的BUG,最后揪出来整个过程,最大的烦人东西就是设计ETL数据入库分区的问题。 那么这时候肯定有…

AI大模型学习路线,只看这一篇就够了!

1. 打好基础:数学与编程 数学基础 线性代数:理解矩阵、向量、特征值、特征向量等概念。 推荐课程:Khan Academy的线性代数课程、MIT的线性代数公开课。 微积分:掌握导数、积分、多变量微积分等基础知识。 推荐课程&#xff1a…

【Python爬虫实战】XPath与lxml实现高效XML/HTML数据解析

🌈个人主页:https://blog.csdn.net/2401_86688088?typeblog 🔥 系列专栏:https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、为什么学习xpath和lxml (一)高效解析和提取数据 …

【软件】Ubuntu下QT的安装和使用

【软件】Ubuntu下QT的安装和使用 零、前言 QT是应用得比较广泛的程序框架,是因为其跨平台特性比较好,且用C/C作为开发语言,性能也比较好,故本文介绍如何安装和使用QT,用的版本是QT 6.2.4,由于QT在Windows…

windows安装deepspeed setup.py 207行找不到文件

一直报莫名奇妙的错误,查了半天也没查到 去看了一下源码,需要安装git,我没有安装 git命令获得信息也没啥用 直接注释掉 成功运行

HazyDet数据集:包含 383,000 雾霾场景中基于无人机的目标检测设计的大规模数据集

2024-09-30,由中国人民解放军陆军工程大学、南开大学、南京邮电大学和南京理工大学的研究人员联合创建了HazyDet数据集,目的解决无人机在恶劣天气条件下的环境感知问题。这个数据集的推出,极大地填补了相关基准测试的空白,为无人机…

Windows系统部署redis自启动服务

文章目录 引言I redis以本地服务运行(Windows service)使用MSI安装包配置文件,配置端口和密码II redis服务以终端命令启动缺点运行redis-server并指定端口和密码III 知识扩展确认redis-server可用性Installing the Service引言 服务器是Windows系统,所以使用Windows不是re…