JavaEE(系列22) -- IP协议和以太网

news2025/8/14 9:49:05

目录

1. IP协议

1.1 协议头格式

1.2 解决IPV4地址不够用的问题

1.3 IP地址管理

1.4 路由选择

2. 以太网 (数据链路层)

1. IP协议

        P协议是位于OSI模型中第三层(网络层)的协议, 在这层上工作的不止这一个协议, 但IP协议是网络层传输所使用的最主流的一种协议, 有IPv4和IPv6两个版本, 目前IPv4在全球仍然是主流使用的协议, 但IPv6在中国已经基本普及了.

1.1 协议头格式

img版本(4位): 用来描述IP协议的版本, 这个属性只有两个取值, 即4, 6, 分别表示IPv4和IPv6.

首部长度(4位): 描述了IP协议首部的长度(报头), 单位是4字节, 报头中有选项部分的存在(可选字段+填充), 因此IP报头是能变长的, 最大长度为15*4=60字节.

服务类型TOS(8位): 实际只有4位是有效的, TOS用来切换IP传输的四种形态/工作模式, TOS有效的4位分别表示最小延时(延迟尽量小), 最大吞吐量(传输速度尽量大), 最高可靠性(可靠性尽量大), 最小成本(资源消耗尽量小), 这四种状态, 在同一时间传输时, 只能选择一种模式; 而在实际开发中是很少专门去切换这几个模式的, 因为这几个模式都是站在技术角度来处理的, 而实际上, 性能瓶颈往往是业务带来的.
 

总长度(16位): 描述了一个IP数据报的总长度(报头+数据载荷), 最大长度不超过16位, 即64k, 这个长度减去IP报头长度, 剩下的就是载荷长度(一个完整的TCP /UDP数据报), 但只有16的总长度的限制并不意味着IP协议最大只能传输这16位长度的数据, 如果要传输的数据长度超过64k了, 在这个限制下IP协议自身还支持对包的拆分和组装, 也就是说如果网络层从传输层拿到的数据太长了, 超过64KB, 就会在网络层针对数据进行拆包, 也就是把一个数据分成多个IP数据报分别进行发送, 而接收方网络层会将载荷重新拼装再交给传输层; 实现有关拆包组包字段为16位标识, 3位标志, 13位片偏移.

标识(16位): 一份数据拆包发送时, 同一个数据报的数据, 标识是相同的.

标志(3位): 用来标志拆包的结束标志, 即将源数据的最后一个包标志为0, 否则为1

片偏移(13位): 由13位构成, 用来标识被分包的每一个分包相对于原始数据的位置, 这样就算出现先发的包后到的情况, 也能确定该包在原始数据中的位置, 保证组包后数据的顺序不被打乱.

生存时间TTL(8位): 表示一个数据报在网络上能够传输的最大时间, 但这个时间的单位并不是 “时间单位”, 而是次数, 指的是可以中转多少个路由器的意思, 每经过一个路由器, TTL就会减少1, 如果TTL变成了0还没有到达目标, 此时就认为这个包永远都到不了, 就会丢弃该包.

协议(8位): 描述了当前载荷部分的内容时属于哪一个协议(TCP/UDP).

首部校验和(16位): 只针对IP协议首部进行校验, 载荷部分(TCP/UDP数据)自身已经有校验和了.

源地址, 目标地址(32位): 这是IP协议中最重要的组成部分, 源地址表示发送方的IP地址, 目标地址表示接收方的IP地址, 通常使用点分十进制的方式来表示IP地址, 就是将32位等分成4份每份8位, 比如117.86.92.37 这样数字串.

可选项和填充: 这个字段使IP首部是变长的, 填充部分是为了防止选项可能不是32位的整数倍, 为此, 通过向字段填充0, 调整为32比特的整数倍.
 

1.2 解决IPV4地址不够用的问题

 现在为了解决IP地址不够用的问题, 主要有下面三种办法:

1. DHCP 动态分配IP地址

就是当有设备使用网络的时候才进行分配IP地址, 如果当前设备不联网了, 那么就不分配了, 但这种方案治标不治本, 只是提高了地址的利用率, 根本上IP地址的个数并没有增加.

 2. NAT网络地址转换

在NAT机制下, 把IP地址分成了两个大类:

内网IP(私有IP)
一个路由器下的电脑都处在一个内网中, 也称之为局域网, 内网IP不同的局域网是可以重复的, 出了局域网, 内网IP就无法访问了, 内网IP网段只有几个, 只要ip地址不属于 10.X.X.X, 192.168.X.X, 172.16.X.X-172.31.X.X 这几个网段范畴的, 都是公网IP.

外网IP(公网IP)
外网IP是互联网中唯一的地址, 不会出现重复的情况, 分配外网IP的设备可以被互联网中其他的电脑直接访问到.

NAT本质上是使用一个外网IP代表N个内网IP的设备, 就好比网上购物, 收货地址填写的是小区的地址, 而小区里有很多人, 每个人用姓名和手机号区分, 而进入内网 IP后则是使用端口号区分.

如果某个内网里的设备想访问公网的设备, 就需要对应的NAT设备(路由器)把内网IP映射成公网IP, 从而完成网络访问; 反之, 公网的设备也是无法直接访问私网的设备的, 不同局域网的私网的设备没法直接相互访问.

NAT机制能够有效解决IP地址不够用的问题, 但带来的副作用就是让网络环境更加复杂了…

 3. 使用IPv6

 

     IPv6使用16字节表示IP地址, 这可表示的IP地址个数就是一个天文数字了, 据说把地球上的每一粒沙子都分配一个IPv6地址都是够用的, IPv6虽然看起来可以完美的解决问题, 但当今世界上仍然是以NAT+ IPV4+动态分配来进行网络组建的, 除了国内, 世界上其他地方IPv6的覆盖率还是比较低的, 这是因为, lPv6和IPv4是不兼容的, 要想支持IPv6就需要大范围更换路由器等网络设备, 这个成本是极大的, 而国内环境主要是工信部给力啊.(防止因为IP地址分配而带来的没必要的麻烦)

1.3 IP地址管理

        在IPv4中, IP地址分为两个部分, 即网络号和主机号, 网络号能够描述当前的网段信息(标识局域网), 主机号区分了局域网中的主机; 要求在同一个局域网内, 网络号必须相同, 主机号不能相同, 两个相邻的局域网(同一台路由器连接), 网络号不能是相同的.

比如192.168.31.35这个IP地址, 192.168.31表示网络号, 35就表示主机号, 下图中就是一个典型的局域网环境:

img

1.4 路由选择

        路由选择其实就是规划路径, 数据想要从一个设备到另一个设备, 需要先规划一条路出来, 然后数据沿着这条路进行传输, 传输到目标IP地址; 但由于网络环境非常复杂, 任何一个节点(路由器)都是无法感知到网络环境的全貌的, 一个路由器最多只认识它的一些邻居节点(或者是邻居的邻居……), 也就是说一个设备是不可能有数据传输的完整路径的, 它知道了目标IP只是知道了大致方向, 具体下一步该怎么走还需要向附近的节点询问(就类似于我们生活向别人问路).

        路由选择的核心思路就是 “问路”, 每个路由器都会保存一定的周围设备的信息(路由信息表, 记录一些网段信息以及每个网络号对应的网络接口), 每次有一个IP数据报经过路由器, 就需要匹配路由表, 看看接下来该怎么走, 如果路由表上有匹配的项(该路由器认识路), 直接按照要求走就行了, 如果没有匹配的项(路由器不认识路), 会提供一个默认路径, 这个默认路径提供的大体方向是不会错的, 沿着这个方向继续走, 继续问, 直到到达目标IP; 当然也有可能是到不了的, 因为每经过一个路由器问一次, 生存时间TTL就会减1, 如果减到0了还没到达目标IP, 就表示这个包永远也到不了的, 这个包就会被丢弃.

2. 以太网 (数据链路层)

数据链路层中使用的典型协议也有很多, 其中最知名常用的就是 "以太网"了, 考虑的是相邻两个节点(通过网线/光纤/无线直接相连的两个设备)之间的传输, 以太网除了规定了数据链路层的协议外还规定了一些物理层的内容, 组网所使用的的网线也叫做 “以太网线”, 是遵循以太网协议的网线.

以太网帧体格式如下:

 `        一个完整的以太网数据帧是由帧头(目的地址+源地址+类型), 帧尾再加上数据载荷构成的, 普通的以太网数据帧(类型0800), 载荷部分就是一个完整的IP数据包, 而类型0806载荷部分是一个ARP报文, ARP是数据链路层中另外的一个协议, 通过这个协议让让某个路由器/交换机, 能够认识局域网里的其他设备(义会在交换机/路由器里建立出一个表, 相当于是一个Hash表, 能够建立出IP和MAC地址之间的映射关系); 同样, 类型0835载荷部分就是一个RARP报文.

目的地址, 源地址(6字节): 数据链路层的地址是MAC地址, 表示物理层地址, 这个地址和IP地址是完全独立的另一套地址体系, 每一个设备只有一个物理层地址, 在网卡等硬件设备出厂时这个地址就已经写死了(大部分), 使用6个字节来表示, 地址长度比IPv4长了6w多倍, 如80-30-49-26-8E-D9就是一个物理地址, 在命令行输入ipconfig /all就能够查看自己设备的物理地址.


帧尾(4字节): 帧尾的功能一般是校验, 它是一个叫做FCSCRC算法实现的校验和.

         以太网数据帧的最大数据载荷称为MTU, 载荷具体多长和使用的物理介质和数据链路层使用的协议有很大关系, 不同硬件设备的MTU也不同; 正是这个MTU引起了IP这个协议要进行分包组包, IP的分包组包通常不是根据IP数据包最大长度64k来分的, 大概率情况下数据链路层的MTU都比64kb要小.

img

除了MTU还有一个类似的概念, 那就是MSS, 表示在不分包的情况下, 除去IP与TCP首部能够搭载的最大容量.

不是所有的MTU的值都是1500 因为不同的数据链路层协议,MTU不一样.只有以太网才是1500!

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

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

相关文章

实现旋转切换效果的轮播图。

下面视频是实现后的效果图。具体实现方法可以通过下面链接进行观看 实现旋转切换效果的轮播图。_ღ张明宇࿐的博客-CSDN博客https://blog.csdn.net/zmx781284440/article/details/131466113 旋转切换轮播图

httprunner2.0 概述及使用说明

目录 一、概述 二、系统流程 三、文件组织 1、项目文件目录结构 四、用例编写 1、用例编写 2、编写用例注意事项 五、变量或函数引用 六 环境变量引用 1、编辑.env文件 2、引用环境变量 七、参数化数据驱动 一、概述 HttpRunner是一款面向 HTTP(S) 协议的通用测试…

2023亚马逊云科技中国峰会:如何让AI前景更广阔

今天,2023亚马逊云科技中国峰会的第二天,峰会现场精彩不断绽放! 值得关注的是,峰会上,亚马逊云科技大中华区产品总经理陈晓建在《专注创新,摆脱基础架构束缚》主题演讲中提出,云服务是支持数字创…

「UG/NX」BlockUI 树列表(回调函数)

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

如何创建WooCommerce会员网站

Web网站内容货币化的一种非常标准的方法是通过会员社区提供对内容的有限访问。您可以使用 WordPress 的众多付费专区插件之一轻松创建它。有些使用MemberPress或其他顶级 WordPress 会员插件,还有一些使用 WooCommerce。当您想到会员网站时,WooCommerce可…

Tomcat服务器的使用

一。Tomcat的概念 1.服务器 服务器:分为服务器硬件和服务器软件。在硬件服务器(其实就是一台计算机)上安装了服务器软件,才可以对外提供服务。 1.硬件:通常是指在互联网上具有独立IP的计算机,通常配置比…

u盘刷新系统

1.百度u盘制作将u盘进行刷成系统盘 点击添加系统 确认 关掉即可 到这里就制作完成了,u盘里也有系统了,下一步就是进入电脑的 bios 一般是f8 或者f2 或者esc 看你是什么电脑自己手机百度一下, 当进入u盘系统时候会发现一键刷机工具找不到镜像&…

【前端基础知识】iframe如何实现项目集成?如何防止被XFS?

目录 iframe介绍iframe语法如何实现集成效果如何将自己的网站实现禁止访问 iframe介绍 HTML 内联框架元素 (<iframe>) 表示嵌套的 browsing context。它能够将另一个 HTML 页面嵌入到当前页面中。 iframe语法 <iframe src"" name"" width"…

115.使用JS让移动导航工作起来

● 还记得我们之前的移动导航吗&#xff1f;需要手动添加类才能使其生效&#xff0c;现在我们用js来自动实现 const btnNavEl document.querySelector(".btn-mobile-nav"); const headerEl document.querySelector(".header"); btnNavEl.addEventListe…

【滤波】自适应滤波器

%matplotlib inline#format the book import book_format book_format.set_style()简介 到目前为止&#xff0c;我们已经考虑了跟踪与我们的过程模型相关的表现良好的对象的问题。例如&#xff0c;我们可以使用恒速滤波器来跟踪直线运动的物体。只要物体以合理的恒定速度沿直线…

文心一言vs通义千问 之前端文件夹命名

今天心血来潮想试试国内百度和腾讯的AI在解决前端难题–文件命名方面的效果。 如下&#xff1a; 综上&#xff0c;是百度会更贴近一些哈 大伙有什么命名的好工具嘛&#xff1f;

Flutter学习四:Flutter开发基础(六)调试Flutter应用

目录 0 引言 1 调试Flutter应用 1.1 日志与断点 1.1.1 debugger() 声明 1.1.2 print和debugPrint 1.1.3 调试模式、中间模式、发布模式 1.1.4 断点 1.2 调试应用程序层 1.2.1 转储Widgets树 1.2.2 转储渲染树 1.2.3 转储Layer树 1.2.4 转储语义树 1.2.5 调度&…

PyEcharts 学习总结

—— 如何用 pyecharts 绘制一切你想象得到的交互式图表&#xff1f; pyecharts 分为 v0.5.x 和 v1.0.0 两个版本&#xff0c;这篇总结针对新版本。 本文不包含基础例子的演示&#xff0c;主要记录一些细节方面的理解。示例看 gallery.pyecharts.org 一、简介 – Echarts &am…

基于Java网上手机商城设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

js获取文字的宽度

通过canvas api 获取文字宽度 const getTextWidth () > {const measureText document.createElement("canvas");const ctx measureText.getContext(2d)!return (name: string) > {const { width } ctx.measureText(name);return width 20 px} }const ge…

Java版企业工程项目管理系统源码-全面的工程项目管理+spring cloud

​ ​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈&#xff0c;内卷严重&#xff0c…

FTP-读取指定目录下的文件,上传到FTP服务器,一键复制黏贴,就是这么丝滑~

背景&#xff1a;需要定时将服务器下的日志文件上传到指定FTP服务器的目录下&#xff0c;并通知第三方平台文件已上传。 FTP服务器模拟工具&#xff1a; application.yml配置&#xff1a; spring:logfilepath: /home/jboss/server/default/log# ftp配置ftp:ip: 192.*****port…

ChatGLM-6B部署、实战与微调

文章目录 摘要下载chatglm-6b下载模型文件推理代码调用网页版的Demo网页版的Demo2命令行 Demo 部署API部署低成本部署模型量化CPU 部署Mac 部署多卡部署 训练与微调软件依赖下载数据集训练P-Tuning v2评估P-Tuning v2训练的模型部署P-Tuning v2训练的模型量化全参数Finetune 训…

回归预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络的数据多输入单输出回归预测

回归预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络的数据多输入单输出回归预测 目录 回归预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 回归预测 | MATLAB实现PSO-CNN粒子群算法优…

计算机网络 套接字函数 | socket、bind、listen、accept、connect

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…