JavaEE(系列22) 您所在的位置:网站首页 以太网帧的长度范围是多少 JavaEE(系列22)

JavaEE(系列22)

2023-07-01 19:28| 来源: 网络整理| 查看: 265

目录

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字节): 帧尾的功能一般是校验, 它是一个叫做FCS或CRC算法实现的校验和.

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

img

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

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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有