【JavaEE】网络层和数据链路层重点协议:IP和以太网

目录

1、IP协议

1.1、IP协议报头

1.2、解决IPv4地址不够用的问题

2、IP地址管理

2.1、IP地址的组成

2.1.1、子网掩码

2.1.2、IP地址的分类

3、路由选择

4、数据链路层协议:以太网协议


1、IP协议

IP协议属于TCP/IP模型的网络层,在网络层协议存在很多,IP协议作为一个比较重点的协议我们在本篇博客中进行了解。IP协议具有地址管理和路由选择这两个重要的作用,IP协议版本现在具有两种版本IPv4与IPv6,现在使用最广的是IPv4版本,IPv6的出现是为了解决IPv4这个版本的IP地址不够用的问题。

1.1、IP协议报头

  • 4位版本号: 指定IP协议的版本,对于IPv4来说,就是4.
  • 4位首部长度(IHL):描述了IP协议的首部长度(报头),单位是4字节(32比特),首部最短就是没有可选字段+填充,那么IP协议报头就存在5行必要的信息,每行信息有32bit(4个字节),因此总共有5*4 = 20个字节,首部最长长度,因为首部长度占4bit,4bit可以表示的范围是0~15,所以最大值是15,那么最大长度就是15*4=60个字节。
  • 16位总长度:表示IP首部与数据部分合起来的总字节数,该字段长16bit,因此IP报的最大长度为65535个字节。也就是64kb.
  • 3位标志:在后面的内容中有,这里就不介绍了。
  • 13位片偏移:用来标识被分片的每一分段相对于元素数据的位置。第一个分片对应的值位0.
  • 8位生存时间:它最初的意思是以秒为单位记录当前报在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TTL会减少1,直到变成0则丢弃该报。这个字段主要是用来防止出现路由循环。
  • 8位协议:表示IP首部的下一个首部隶属于那个协议。这个协议包括UDP和TCP等的协议。
  • 16位首部校验和:也叫IP首部校验和,该字段只校验数据报的首部,不校验数据部分(IP数据报的载荷部分UDP/TCP数据报已经有校验和了),它主要用来确保IP数据报头部不被破坏。

1.2、解决IPv4地址不够用的问题

由于IPv4版本的IP地址是32位(4个字节)的,所以能过表示的范围在不考虑负数的情况下是42亿9千万,这个数字在当今这个时代中,就显得比较小了,现在我们每个人至少都有一台设备上网,这个时候就需要给这台设备分配一个的IP地址,当然我们是期望每个设备都有一个唯一的IP,那么全世界这么多台设备,显然IPv4这个版本的地址不够用。所以这个时候就需要一些解决办法。

1️⃣动态分配IP地址(DHCP

设备上网才分配IP地址,不上网就不分配IP地址,这个时候就可以省下很多的IP地址,这种方法只能一定程度的缓解IP地址不够用的问题,并不能彻底解决,这就是因为这个方法并没有增加IP地址的数量。

2️⃣网络地址转换(NAT机制

在NAT机制下将IP地址分为了内网IP外网IP两大类。

📗内网IP(私有IP)

内网IP始于非注册地址,专门为组织机构内部使用。因特网分配委员会保留了3块IP地址作为私有IP地址,10.0.0.0——10.255.255.255;172.16.0.0——172.31.255.255;192.168.0.0——192.168.255.255.

内网IP可以在不同的局域网中重复出现,如果内网中一个设备要访问外网,会给它分配一个外网IP,但是这个外网IP不会被这个设备独占,而是这个内网中所有的设备都共用这一个外网IP。一个路由器连接的网络设备就是处在内网中,也就是局域网。

📘外网IP(公有IP)

外网IP是指合法的IP地址,对外代表一个或者多个内部局域地址,是全球统一的可寻址的地址。

NAT机制就是在局域网中使用内网IP,而当内部结点要与外部网络进行通信时,就要在网关处,将内网IP替换成外网IP,从而在外网上正常使用,NAT机制可以使多台计算机共享Internet连接。通过这种方法就可以只申请一个合法的IP(外网IP),就把整个局域网中的计算机接入Internet中。

就比如,现在两个内网设备要访问百度的服务器(内网设备访问外网设备),路由器会将这两台计算机的内网IP转换成外网IP,去访问百度的服务器。

主机1和主机2想要访问百度服务器首先要构造数据报,这个数据报中包含了源IP和目的IP,通过路由器转发,路由器拿到这个数据报之后,就会把主机2发来的数据报的源IP替换成路由器的IP(公有IP),将这个数据报发送给百度服务器,百度服务器将数据处理之后,通过路由器的公有地址,将数据发送给路由器。这个时候,路由器会根据端口号将响应发送给相应的计算机(之前说到端口号是用来区分同一个计算机的不同进程的,这里用来区分不同计算机的不同进程也是完全可以)。

在现实生活中,我们是将前动态分配IP和网络地址转换结合使用的,这样虽然缓解了IP地址不够有的问题,但是还是没有从根本上解决这个问题。

注意:在NAT背景下通信

  1. 外网设备访问外网设备,不需要任何的NAT,直接就能通信
  2. 内网设备访问其他内网设备是不被允许的。但是可以使用一个外网设备进行中转,也就实现了通信。
  3. 外网设备访问内网设备这也是不被允许的。
  4. 内网设备访问外网设备,对应的内网设备的路由器就会触发NAT机制进行IP替换,此时就会给这个网络数据的源IP替换成路由器字节的IP。

3️⃣使用IPv6地址

IPv6是使用16个字节(128位)来表示IP地址的,这就使IPv6可以表示的IP地址个数是一个天文数字了,给地球上的每一粒沙子都分配一个IPv6版本IP地址都是够用的,虽说IPv6可以完美解决IP地址不够用的问题,但是从IPv6被提出到现在真正被使用到的还是非常少的,现实中还是大量的使用IPv4版本的IP地址。这主要还是IPv4和IPv6不兼容,想要大范围的使用IPv6,就需要将原本的路由器等的网络设备更换掉,这个更换的成本还是很大的,还有原因就是目前IPv6的各方面还没有IPv4一样成熟。

2、IP地址管理

2.1、IP地址的组成

IP地址分为两个部分,网络号和主机号

  1. 网络号用来标识网段(标识一个局域网),保证相互连接的两个网段具有不同的标识;
  2. 主机号用来标识主机(标识一个局域网内部的主机),同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号

就比如这样一个IP地址192.168.1.8,192.168.1表示的就是网络号,8表示的就是主机号。通过下面的局域网环境来了解一下网络号和主机号。

  一个路由器存在两个IP分属不同的网段(局域网),通过这两个IP就可以将两个局域网连接在一起,此时这两个局域网就称为"相邻"局域网,这两个局域网的网络号是不能重复的。上述图片中路由器和光猫都有两个IP,一个是LAN口IP,一个WAN口IP,路由器的WAN口连接在光猫的LAN口,这个时候连接在光猫的LAN口的设备的网络号和路由器的WAN口IP的网络号相同。光猫的WAN口连接着光纤。

但是在一个IP地址中,哪个部分是网络号,那个部分是主机号,不一定是前三个字节表示网络号 。对于网络号和主机号的划分,主要有两种分类方式,一种是通过IP地址分类(ABCDE),一种是子网掩码。

2.1.1、子网掩码

子网掩码格式和IP地址一样,也是一个32位的二进制数,其中左边是网络号,用二进制数字"1"表示,1的数目等于网络的长度;右边是主机位,用二进制数字"0"表示,0的数目等于主机位的长度。家用网络的子网掩码一般都是255.255.255.0。

🌈子网号

我们通过下面的例子来了解一下IP地址为192.168.1.113,子网掩码为255.255.255.192,我们将他们转换成二进制的形式。

 按照子网掩码的定义,子网掩码中1所对应的为网络号位,而0所对应的位为主机号位,可以看到上述使用的子网掩码中原本主机号被借走了两位用来表示网络号了,这就是子网号。

2.1.2、IP地址的分类

这五类IP地址的前缀使用来区分类别的,每个类别下,网络号和主机号长度都是固定的。AB类由于主机号太长,实际中很少有那么大的局域网,这就导致很多IP地址会被浪费掉 ,这种分类方式在实际中被淘汰掉了

🌈特殊IP地址

  1. 主机号为0的IP:例如192.168.0.0 表示的就是网络号,局域网里不应该存在某个主机的主机号为0
  2. 主机号为全1的IP:例如192.168.0.255,假定子网掩码是255.255.255.0,这种称为是广播地址,(广播地址就是往这个地址上发送UDP数据报,此时这个数据报就会被转发给整个局域网中的所有主机,TCP不支持广播。)
  3. 环回地址:IP以127开头的,使用最多的是127.0.0.1,是指Windows系统自带的虚拟网卡,这块网卡于任何外部网络不能通讯,只限于本机通讯。
  4. 主机号为1:例如192.168.0.1,一般被用作"网关IP",这只是习惯用法,并不强制约定。

3、路由选择

路由选择其实就是对数据在网络中传输的路径规划,数据在发送的过程中,两台主机先是建立连接,两台主机都知道了对方的IP的地址,然后之后的每次数据传输过程中,由于网络环境非常复杂,每个数据报传输的路径不可能都相同,每条数据在网络中进行传输的时候都会经历网络中的中间节点(路由器),这些结点是无法感知到网络环境的全貌的,一个路由器最多只认识它的一些邻居结点(或者是邻居的邻居),也就是说一个网络设备是不可能有数据传输的完整路径,当这些网络设备知道了这个数据报的目的地址(目的IP),具体该怎样走他会向邻居结点进行询问(就类似于我们日常生活中向别人问路)。

路由选择的核心思路就是"问路",每个路由器中都会有一个路由表这样的数据结构用来记录邻居结点的信息,当一个IP数据报在进行网络转发的过程中,每个路由器在接收到这个IP数据报之后,就会将这个IP数据报中的目的IP与路由表中的信息进行比对,有匹配的结果就会按照当前路由器规划的路径传输,但是当前路由器的路由表中没有匹配的信息,此时就会走路由器给你指出的一条默认的路径(路由表的"下一跳表项"),这个下一跳表项就会将把这个IP数据报指引向更上一级的路由器(越上一级的路由器中的路由表中记录的信息就会更多),这样直到到达目的IP,当然也有到达不了的情况,因为每经过一个路由器问一次,生存的时间TTL就会减1,如果减到了0还没有到达目标IP,就表示这个包永远到不了了,这个包就会丢弃。


4、数据链路层协议:以太网协议

数据链路层也存在很多协议,最著名的使用最广泛的就是"以太网"协议,以太网协议不仅在数据链路层进行了规定,同时也在物理层也存在一些协议规定了一些内容。

🌈以太网数据帧的格式

这里的以太网数据帧的目的地址和源地址都是6个字节的长度,表示的范围比IPv4大了6w多倍,所以MAC地址现在还不存在地址短缺的问题,所以大部分网卡等的硬件设备在出场的时候地址就已经写死了。

一个完整的以太网数据帧是由帧头(目的地址+源地址+类型)、帧尾(校验和)和载荷构成,上面的0800类型的数据帧表示的就是用来传输数据的普通的数据帧。上述的0800类型的数据帧的载荷长度46~1500,这个1500表示的就是载荷最大长度就是1500.这是由于不同的数据链路层协议,对应不同的硬件物理设备,这个时候数据报的载荷上限也就不一样我们把这个数据链路层的数据帧最大载荷长度称为MTU。

如果要传输的数据长度超过了MTU,那么就会在IP层进行分包,使分出来的报的长度都在MTU的范围内。 在IP协议中使用16位标识、13位片偏移和3位标志位这三个字段来支撑IP协议的分包和组包的。

 0806类型的数据报载荷部分是ARP报文, 0835类型载荷部分就是一个RARP报文

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【夜深人静写数据结构与算法 | 第八篇】哈希算法与哈希表

目录 前言: 哈希: 哈希表: 哈希表组成: 哈希表实例: 哈希函数: TIPS: 总结 前言: 如果此时我要你默写一个有一百位的数字,你要如何做才能保证不会漏写呢&#xf…

算法-双指针-秋招算法冲刺

秋招冲刺算法 双指针 数组划分,数组分块 常⻅的双指针有两种形式,⼀种是对撞指针,⼀种是左右指针。 快慢指针 基本思想:使用两个移动速度不同的指针在数组或链表等序列结构上移动。通常处理结构类型:环形链表或数组…

Cortext-M3系统:储存器系统(2)

1、存储系统功能概览 Cortext-M3储存器有如下特点: 存储器映射是预定义的,并且还规定好了哪个位置使用哪条总线。 存储器系统支持所谓的“位带”(bit-band)操作。通过它,实现了对单一比特的原子操作,位带操…

【数据库三】数据库的存储引擎

存储引擎 1.存储引擎1.1 概念介绍1.2 常用存储引擎 2.MyISAM2.1 特点介绍2.2 支持的存储格式2.3 适用的生产场景 3.InnoDB3.1 特点介绍3.2 适用生产场景分析4.企业选择存储引擎依据 5.MyISAM和InnoDB的区别命令操作 1.存储引擎 1.1 概念介绍 MySQL数据库中的组件,负…

腾讯云+PicGo+Typora图床,生成专属图片链接

腾讯云PicGoTypora搭建自己的图床 原创声明,转载请注明文章链接来源、作者信息 TyporaPicGogitHub搭建自己的图床,写作效率大大提升 索奇问答 问:图床是什么? 答:用户可以将图片上传到图床,然后将生成的…

基于U-Net网络实现图像分割

目录 1、作者介绍2、U-Net网络及数据集介绍2.1 U-Net网络2.2 数据集介绍2.2.1 VOC_2012数据集2.2.2 眼球毛细血管数据集2.2.3 医学图像数据集 3、U-Net实现图像分割3.1 U-Net实现图像分割实验(简易版本)3.1.1 环境配置3.1.2 数据集准备3.1.3 代码实现3.1…

(十)异步-使用异步(3)

一、GUI 程序中的异步操作 1、在 GUI 程序中使用异步操作 在 GUI程序中, 首先理解关于 UI 显示变化的概念。 消息: UI 上的行为,如点击按钮、展示标签、移动窗体等。消息队列: 把要触发的所有消息,都按照相关的顺序…

CSDN 周赛 59 期

CSDN 周赛 59 期 前言判断题单选题题目1题目2填空题编程题1、题目名称:坏掉的打字机2、题目名称:布尔零点计数小结前言 由于最近,csdn 每日一练新增了两个题目,按照惯例,那么新增的题目,会就近出现在最近的 CSDN 周赛中,嗯,经常参加周赛,并关注每日一练社区的小伙伴应…

IO流(C++)

IO流C C语言的输入与输出流是什么CIO流C标准IO流C文件IO流二进制读写文本读写 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据,并将值存放在变量中。printf():…

阿里云国际站代理商:如何优化阿里云服务器的性能和响应速度?有哪些调优策略和建议?

随着互联网的发展,阿里云服务器已经成为很多企业和个人的首选解决方案。然而,面对不断增长的需求和复杂的网络环境,如何优化阿里云服务器的性能和响应速度,提高用户体验,是很多用户关心的问题。本文将从以下几个方面&a…

MsSqlServer配置管理器TCP/IP属性

TCP/IP 属性(“IP 地址”选项卡) 使用 “TCP/IP 属性(‘IP 地址’选项卡)” 对话框,可以配置特定 IP 地址的 TCP/IP 协议选项。 只有选中 “IP All” ,才能一次配置所有地址的 “TCP 动态端口” 和 “TCP…

Debian openssh-server 的安装

在之前安装系统的时候有一个安装 SSH 服务的,结果没点上,导致系统完成后,ssh无法连接上啊,于是要安装sshd 服务。使用命令:apt-get install openssh-server 结果就出现问题了: 网上搜索说是要更新源&#x…

catkin cmake官方教程解读以及资料补充

这里写目录标题 报错cmakei下载cmake 官方教程教程1step1最低版本 报错报错2 vscode 路径没有配置好setting.json通过该方式打开的似乎是一个全局的文件,可以为本工作文件夹下设置一个本地的吗 报错3配置cmake工具链准确的流程报错4 cpp中main函数返回值问题结果 官…

Verilog基础:标识符的向上向下层次名引用

相关文章 Verilog基础:表达式位宽的确定(位宽拓展) Verilog基础:表达式符号的确定 Verilog基础:数据类型 Verilog基础:位宽拓展和有符号数运算的联系 Verilog基础:case、casex、ca…

如何在Microsoft Excel中使用TRUNC函数

Excel 中有多种删除小数点和缩短数值的方法。在本文中,我们将解释如何使用 TRUNC 函数,以及它与其他技术的不同之处。 TRUNC函数 什么是 TRUNC 功能如何使用 TRUNC 函数从日期时间戳中删除时间什么是 TRUNC 功能 TRUNC 函数将数字截断为指定的小数位数。使 TRUNC 不同于其他…

概率论与数理统计教程第五章节笔记

参考书籍:概率论与数理统计教程第三版 茆诗松 程依明 濮晓龙 编著 文章声明:如有错误还望批评指正 文章目录 ξ 5.1 \xi5.1 ξ5.1总体与样本 ξ 5.2 \xi5.2 ξ5.2样本数据的整理与显示Python绘制直方图Python绘制茎叶图 ξ 5.3 \xi5.3 ξ5.3统计量及其分…

基於Hadoop HA 在kerberos中配置datax

概要 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 概要 前言一、基於HADOOP HA 搭建datax二、基於HADOOP HA 配置好的datax去配置kerberos1.在datax的配置文件中進行配置2.在shell腳本中加入認證語句 总结 前言…

layui框架学习(27:弹出层模块_其它用法)

除了前几篇文章介绍的弹出框类型外,layui的layer弹出层模块还支持相册框和tab框,所谓相册框即点击图片或按钮后会出现一个类似相册的页面单独浏览、切换图片,而tab框是指弹出框的显示形式类似于Winform中的TabControl控件,能以选项…

【Spring Security】的RememberMe功能流程与源码详解

文章目录 前言原理 基础版搭建初始化sql依赖引入配置类验证 源码分析 进阶版集成源码分析疑问1疑问2 鉴权 升级版集成初始化sql配置类验证 源码分析鉴权流程 扩展版 前言 之前我已经写过好几篇权限认证相关的文章了,有想复习的同学可以查看【身份权限认证合集】。今…

MIT 6.S081 Lab Four

MIT 6.S081 Lab Four 引言trapsRISC-V assembly (easy)代码解析 Backtrace(moderate)代码解析 Alarm(Hard)test0: invoke handler(调用处理程序)test1/test2(): resume interrupted code(恢复被中断的代码)代码解析issue解答 可选的挑战练习 引言 本文为 MIT 6.S081 2020 操作…