【linux--->网络层协议】

news2025/1/17 1:09:10

文章目录

    • @[TOC](文章目录)
  • 一、概念
    • 1.网络层概念
    • 2.IP地址概念
  • 二、IP协议报文结构
    • 1.首部长度
    • 2.总长度(total length)
    • 3.协议
    • 4.版本号(version)
    • 5.服务类型(Type Of Service)
    • 6.生存时间间(Time To Live, TTL)
  • 三、网段划分
    • 1.5类IP划分法.
    • 2.CIDR(Classless Interdomain Routing)划分方案
    • 3.IP数量受限解决方案
  • 四、路由转发
  • 五、报文分片
    • 1.分片的由来
    • 2.IP报文分片管理字段
    • 3.接收端分片报文管理原理
    • 4.tcp数据分包
  • 六、相关命令
    • 1.ifconfig查看主机IP地址,子网掩码,Mac地址,mtu最大传输单元

一、概念

1.网络层概念

网络层主要是负责执行,传输层策略的.传输层的发送不是真正意义上的发送数据,而是将封装好的协议向下交付给了网络层,有网络层执行传输层的传输策略.

2.IP地址概念

IP地址包含两个信息,一个是目标网络地址,一个是目标主机地址.目标网络用于找到目标主机所在的子网(局域网),主机地址用来定位主机.
主机和路由器都有路由控制功能,主机一般设置一个IP地址,路由器一般设置多个IP地址.主机和路由器都是网络中的节点.

二、IP协议报文结构

在这里插入图片描述

1.首部长度

首部长度占4个比特位,最大是16,首部内容包含可选字段,首部长度16*4字节-20字节是可选字段的长度.

2.总长度(total length)

总长度是真个IP协议报文的长度,占16个比特位,2^16-首部长度=数据部分.

3.协议

占8位比特位,这个字段定义了IP数据报的数据部分使用的协议类型。 常用的协议及其十进制数值包括ICMP (1)、TCP (6)、UDP (17)

4.版本号(version)

由于IPv6还没有公认化使用,所以版本号一般是表示为IPv4版本.

5.服务类型(Type Of Service)

占8位比特位,3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要

6.生存时间间(Time To Live, TTL)

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

三、网段划分

IP地址分为网络号和主机号,网络号和主机号组成一个唯一的IP地址,IP地址是一个32位的整数.也就是说IP地址有42亿多个,全球有60亿人,而且一个人手上可能有多个联网设备,所以IP地址需要合理的分配使用.

1.5类IP划分法.

在这里插入图片描述
IP地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E。 全0和全1的都保留不用。

A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。

B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。

C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络。

D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户[1] 。

E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。

2.CIDR(Classless Interdomain Routing)划分方案

A、B、C、D类地址划分子网的概念导致网络号是固定的,可能会发生B类地址早就用完了,A类IP地址用不完,而又因为将一个网络号划分给了一个地区,其他地区无法使用这个网段的IP地址.浪费了IP地址.所以后来又提出了新的划分方案,CIDR

CIDR引入一个额外的子网掩码(subnet mask)来区分网络号和主机号;子网掩码也是一个32位的正整数,子网掩码不能单独使用,要与IP地址配合使用,唯一作用就是区分网络号和主机号;将IP地址和子网掩码进行 “按位与” 操作, 得到的结果就是网络号,IP地址与子网掩码的简洁表示方法:IP地址/子网掩码所占二进制位的个数.

CIDR技术可以根据实际情况,确定网络号所占的比特位,或者主机号所占的比特位,这样就不会造成IP地址的浪费;例如子网中有2000台主机,就需要2^11个IP地址,也就是说主机号要占用11个比特位,那么子网掩码就是255.255.248.0;

网络被分为一个一个的子网,子网又可以再往下继续分为多个子网,每个子网都有一个网络地址,网络地址主机号为全0的IP地址,用来标记子网在网络中的地址.一个网段的第一个可用IP地址是网络地址+1,最后一个IP地址是广播地址,可以将数据包通过这个地址转发给子网内多有主机,最后一个可用IP地址是广播地址-1.

网络中用IP标识一个主机,A主机与B主机通信,它们要互相能在网络中查找到对方IP地址,查找的本质就是排除,一次查找排除更多的IP地址才能使查找更加高效,一个好的数据结构和相应的查找算法决定了查找的高效.所有才有了现在的网络拓扑结构.IP地址的查找通过路由器的路由表中的网络号和子网掩码,一次可以排除一个子网.很快就能定位到目标主机所在子网.

3.IP数量受限解决方案

全球有60亿人口,而IP地址是有限的,随着网民的增加,IP地址可定有不够用的一天,路由器的动态IP分配技术,有效的缓解了这个问题,就是IP地址与网络设备的关系不是固定的,每次链接都随机分配地址,解决了IP地址不适用时还被占用的问题.IPv6如果发展成熟,是能够彻底解决问题的,之所以到现在都没有普及,是因为有NAT(网络地址转换)技术,

网络拓扑结构中有公网和私网.IP也分为公网IP和私网IP.C1918规定用于组件局域网的私有IP,包含10.*前8位为网络号,172.16*—172.31*前12位为网络号,192.168.*前16位是网络号,出了这些其他的都是公网IP,私网IP是可以重复出现在不同的局域网中的,所以这也大大解决了IP数量不够的问题.

不同的局域网有相同的IP地址,在数据包转发的过程中就需要用到NAT技术了,每个路由器都有一个WAN口IP(外网IP),和LAN口IP(内网IP),.LAN口连接的是主机,WAN网连接上级子网.子网内的IP地址不能重复,但是子网之间的IP地址可以相同.内网的IP地址都是私网IP,想着样的内外网可能有好几层,最外层的运营商路由器是公网IP.跨网络通信时,首先要将LAN口IP转换为WAN口IP,一层一层的转换,成公网IP就可以将数据包转发到公网中去了.

四、路由转发

使用route命令可查看主机路由表
在这里插入图片描述
destination网络地址和genmask子网掩码,相与用来确认下一个目标网络区域,这个目标网络区域包含,目标主机地址,或者网络地址,或者子网地址,或者默认网关地址.
gateway网关 ,网络通信关口,路由器,网关IP就是路由器IP.
metric(跃点数),就是到达目标网络区域要经过的路由器的个数,当同一个目标网络区域有多条路由,tcp/ip会选择跃点数最小的一个.
iface:网络接口.
Flags中的U标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发;

IP数据包每到达一个路由器,路由器就会查一次路由表,将网络地址按位与子网掩码后的结果与目的IP地址比较,如果目的IP地址就在局域网中,就直接转发给目标主机,如果不在本地网中,需要经过路由器就是,将数据包转发给下一跳路由器.如果没有就直接走缺省地址,直接转发给网关地址.每一个网络地址都对应一个iface发送接口.

五、报文分片

1.分片的由来

数据链路层有MTU的概念,MTU是最大传输单元的意思,它限制了最大传输帧长度,超过了这个长度数据包就要被分片.以太网的传输帧长是1500,所以MTU的长度一般是1500.

2.IP报文分片管理字段

IP报文中有与分片相关的三个字段16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.

3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为0, 其他是1. 类似于一个结束标记.

13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).

3.接收端分片报文管理原理

1.接收端用源IP地址来区分是那个主机发来的分片报文.

2.用第3位标志位是否是1或者偏移是否大于0,来确认报文是否被分片.

3.用第三个标志位是否为1,偏移是否为0,来确认是否为第一个报文;用第三个标志位是否为1,偏移是否大于0,来确认是否是中间的报文;用第三个标志位是否为0,偏移是否大于0,来确认是否是最后一个报文;将收到的报文按照偏移排序就还原了报文.

4.收到的分片报文可以根据偏移字段和第三个标志位确定的第一个和最后一个报文是否丢包,可以根据偏移量+报文总长度确定下一个分片报文的首部偏移,从而确定下一个报文是否丢包.

5.传输层协议有16位校验和用来检查整个报文的正确性,IP协议有16位首部校验和,传输层协议相当于IP协议的有效载荷,所以传输层与IP协议相互配合可以检查收到报文的正确性.

4.tcp数据分包

如果分片报文丢失了,tcp会认为整个报文丢失,重发整个报文,分片会增加丢包率,所以分片是网络中的少数情况,最好的解决方案就是控制tcp封装的报文大小,数据链路层数据包最大不超过1500,数据链路层数据包就是IP报文,IP有固定大小的报头20个字节,所以数据包的大小就不能超过1480,IP数据包就是tcp报文,tcp报文固定报头20个字节,那么数据包大小就需要不超过1460.

六、相关命令

1.ifconfig查看主机IP地址,子网掩码,Mac地址,mtu最大传输单元

在这里插入图片描述


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

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

相关文章

STM32刷Micropython固件参考指南

STM32刷Micropython固件指南 其实刷固件和普通的程序下载烧录无多大的差异,主要是其他因数的影响导致刷固件或刷完固件无法运行的情况和相关问题。 📑刷固件教程 固件下载。目前所支持的stm32型号有这些: stm32f0, stm32f4, stm32f7, stm32g…

《零基础入门学习Python》第076讲:GUI的终极选择:Tkinter13

这节课我们来学习 Tkinter 的布局管理器,那什么是布局管理器呢?说白了,就是用于管理你的组件如何排列。Tkinter 提供了 3 大布局管理器:pack、grid 和 place。 pack 是按添加顺序排列组件grid 是按行/列形式排列组件place 则允许…

qt富文本编辑基本知识(QTextBlockFormat、QTextListFormat)

可以参考该文章:QTextBlockFormat、QTextListFormat - 程序员大本营 核心知识如下: 如果想开发一个富文本编辑器(html,markdown等常见格式),Qt已经为用户完成了几乎所有与编辑有关的具体工作,…

工厂模式(FactoryPattern)

工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 工厂模式提供了一种将对象的实例化过程封装在工厂类中的方式。通过使用工厂模式,可以…

Java:JDK8之后新的时间(推荐使用) ZoneId、 Instant、DataTimeFormatter、Period的相关API

ZoneId //目标:了解时区和带时区的时间。 //1、ZoneId的常见方法: // public static ZoneId systemDefault():获取系统默认的时区 zoneId zoneId ZoneId.systemDefault(); system.out.println(zoneId.getId()); system.out.println(zoneId);// public static Set<String>…

SOME/IP学习笔记1

SOA概念 在SOA中,每个服务就好像我们每一个人在社会中扮演的角色,在对别人提供着服务的同时,同时也享受着别人提供出来的服务,人与人之间,既是彼此独立的,又是需要互相通讯的。服务提供者将功能具象为一组接口,这样使用者就能知道如何调用服务,完成某件事情,得到某个…

亚马逊引流方式有哪些

亚马逊引流是指将潜在的买家从其他渠道引导到亚马逊平台上购买产品。以下是一些常见的亚马逊引流方式&#xff1a; 1、社交媒体营销&#xff1a;通过社交媒体平台如Facebook、Instagram、Twitter等发布有关你产品的信息、广告和优惠活动。吸引潜在客户点击链接&#xff0c;直接…

第七章 递归组件(树组件为例)

递归组件 封装树组件 App.vue <template><div class"App">App<MyTree :dataList"dataList"></MyTree></div> </template><script setup lang"ts"> import { ref, reactive } from "vue"…

Java当中更改源码/修复CVE-2016-1000027漏洞分析

Java当中更改源码/修复CVE-2016-1000027漏洞分析 文章目录 Java当中更改源码/修复CVE-2016-1000027漏洞分析1.基础知识&#xff1a;2.漏洞成因&#xff1a;3.解决方法:4.修改源码: 1.基础知识&#xff1a; ​ 要想分析首先要了解什么是Spring HTTP Invoker&#xff0c;HttpInv…

【考古】Java8 集合工具类Arrays

文章目录 一、概述二、常用方法三、简单使用3.1 Arrays的sort排序3.2 Arrays的binarySearch查找3.3 Arrays的fill填充3.4 Arrays的copyOf复制数组3.5 Arrays的copyOfRange复制部分Arrays的asList数组转链表 四、总结 一、概述 在 Java 的util包中提供了一个Arrays工具类用来操作…

深入了解Redis-实战篇-分布式锁

深入了解Redis-实战篇-分布式锁 一、故事背景二、知识点主要构成1、分布式锁基本原理2、不同实现方式对比3、基于redis的分布式锁3.1、获取锁3.2、释放锁 4、Redisson的可重入锁原理5、Redisson的锁重试和WatchDog机制 三、总结提升 一、故事背景 最近在系统的回顾redis相关的…

系列3-常见的高可用MySQL解决方案

高可用主要解决两个问题&#xff0c;如何实现数据共享和同步数据、如何处理failover&#xff0c;数据共享的解决方案一般是SAN&#xff0c;数据同步通过rsync和drbd技术来实现。 1、主从复制解决方案 这是MySQL自身的高可用解决方案&#xff0c;数据同步方法采用的是MySQL rep…

Eclipse进行debug

目录 基本步骤三种执行方式 -- 键盘快捷键variables面板移除debug过的项目通过eclipse调用具有软件界面的项目进行debug各个variable颜色具有的意义 基本步骤 点击eclipse右上角debug按钮 调出debug面板 点击小蜘蛛图标&#xff08;不是点绿色三角的Run&#xff09; 此时会进…

FPGA实现NIC 100G UDP协议栈网卡,UltraScale+ 100G Ethernet Subsystem驱动,提供工程源码和技术支持

目录 1、前言2、我这里已有的UDP方案3、本25G/100G网卡基本性能简介4、详细设计方案接口概述PCIe HIPDMA IFAXI总线接口时钟同步处理TXQ和RXQ队列TXCQ和RXCQ队列完成EQ MAC PHYUltraScale 100G Ethernet Subsystem流水线队列管理发送调度程序端口和接口数据路径以及发送和接收…

怎么把图片变成表格?几个步骤轻松转换

如果您需要将一张图片中的数据转换成表格&#xff0c;这里有几个简单的步骤&#xff0c;可以帮助您完成这个转换过程。以下是需要注意的事项。 首先&#xff0c;我们先了解OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;技术。然后合理运用…

前端vue uni-app自定义精美海报生成组件

在当前技术飞速发展的时代&#xff0c;软件开发的复杂度也在不断提高。传统的开发方式往往将一个系统做成整块应用&#xff0c;一个小的改动或者一个小功能的增加都可能引起整体逻辑的修改&#xff0c;从而造成牵一发而动全身的情况。为了解决这个问题&#xff0c;组件化开发逐…

【《快速构建AI应用——AWS无服务器AI应用实战》——基于云的解决方案快速完成人工智能项目的指南】

基于云的人工智能服务可以自动完成客户服务、数据分析和财务报告等领域的各种劳动密集型任务。其秘诀在于运用预先构建的工具&#xff0c;例如用于图像分析的Amazon Rekognition或用于自然语言处理的AWS Comprehend。这样&#xff0c;就无须创建昂贵的定制软件系统。 《快速构…

如何用DHTMLX组件为Web应用创建甘特图?(二)

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表。可满足项目管理应用程序的所有需求&#xff0c;是最完善的甘特图图表库。甘特图仍然是项目管理应用程序中最需要的工具之一&#xff0c;DHTMLX Gantt组件提供了能提升研发甘特图功能所需的重要工具。 在这篇…

Git在VSCode中的使用

1.Git图像化界面进行项目初始化&#xff08;git init&#xff09; 2. Git图形化界面对文件进行操作 当我们创建一个文件时&#xff0c;该文件后面有一个U&#xff0c;表示文件未跟踪。 我们在管理工具中输入日志并提交代码&#xff0c;相当于做了两件事&#xff0c;将文件由“…

ABB机器人RAPID编程常用指令介绍2

ABB机器人RAPID编程常用指令介绍2 1. 程序运行停止指令 Break 应用:机器人在当前指令行立刻停止运行,程序运行指针指向下一行指令,可以用start键继续运行机器人 举例: … Break; … 与stop指令的区别可以参考下面的示意图: 2. 程序运行停止指令 Exit 应用:机器人在当前指…