上篇文章,小编分享了应用层和传输层深入的一点的知识,那么接下来,这篇文章,继续分享网络层和数据链路层。
网络层
了解这个网络层,那么其实就是重点来了解下IP这个协议
对于这个协议呢,其实也是和前面的一样,重点了解下它的报文格式。
报文格式
图1
那么上面的内容可以说是与TCP不遑多让。
那么接下来就来一一讲解下这些到底是什么吧
版本:
那么这里版本只有两个选项
IPV4、IPV6
IPv4指的是互联网协议第四版,它使用32位地址。
IPv6指的是互联网协议第六版,它使用64位地址。
而目前主流的是IPv4,同样的上面给的图1也是以IPv4的报文格式来分享的。
首部长度:
这里用来表示IP报文头部的长度,由于是4个比特位,所以最大可以到表示到15
但同时它也是4个字节为单位的,又可以表示到60个字节。
同时它的长度不是固定的,也表示是可变长的。
什么意思呢?就是说其是否变长是由“选项”的选项来设置的
最小到5,最大可到60字节。
8位服务类型
这个作用是对IP报文的数据报指示优先级。
3位是优先权字段(已弃用),4位TOS字段,和一位保留字段(必须设置为0)
TOS用于指示IP数据包在网络传输过程中应优先考虑服务质量
最小延时、最大吞吐量、最高可靠性、最小成本
这四者相互冲突,只能设置一个选项,同时不同场景下,也是对应不同的字段,比如对于ftp程序来说,优先考虑的是最大吞吐量。
随着现代网络的发展
TOS字段被重新定义为区分服务(DS)字段
DS字段分为两大结构
1.DSCP(Differentiated Services Code Point, 6位)
用于指定特定的服务等级或行为聚合。不同的值,映射着不同的作用
比如加速转发、确保转发等等作用。
作用:服务质量分类,比如实时语音和视频流量可以标记位高优先级,背景下载任务可以标记为低优先级
流量控制,更改路由器策略,实现更精细的流量管理和资源分配
2.ECN(Explicit Congestion Notification, 2位)
用于显式拥塞通知,允许路由器标记数据以指示网络中的拥塞状态,而不是丢弃数据包。
作用:提高效率,通过不必要的丢包,从而提高网络的整体效率和稳定性。
16位总长度
这里指的是IP数据包整个的长度了。
16位的长度最大可以表示65535个字节,约等于64kb,那么此时就意味着传输数据只能到这吗?
显然,IP协议可没有那么“蠢”
它内置了拆包组包机制
ip协议可以把大的数据包,拆成小的数据包,进行分片传输,再到接收方那么进行组装,此时呢
它就可以传输超过64kb的数据了。
16位标识、3位标志位、13位片偏移
这几个需要合在一起来讲的,这是因为,这三个东西是对IP协议中组包和拆包,起到很大的作用
标识:
当一个很大的数据包需要通过分片传输时,每个分片都会携带相同的“标识”值,以便接收端区分哪些数据包是一个原始数据包的,并正确的讲它们组合在一起
标志位:
第一位:
DF(Don't Fragment)
值为1,表示不分片传输
值为0,表示分片传输,默认为0
第二位
MF(More Fragments)
值为1,代表不是最后一个分片
值为0,代表最后一个分片
第三位,保留位,暂不使用
片偏移:
作用:用于指定当前分片在原始数据中相对位置,帮助接收端按照正确顺序来处理分片过来的数据。
8位生存时间
这个是表示,一个数据包在网络最多可以存活多长时间。
这是为了如若,传输目的是错误的,即IP地址是不存在的,如若一直是发送当前的数据包,就会占用网络带宽资源,所以生存时间规定它只能存活多长时间,时间到了,就被当前的路由器丢弃。
那么值得注意的是,这里的时间,其实是代表的是次数
是指经过路由器转发的次数
发送一个数据包的时候,这里会有一个初始值(32、64、128……)
每经过一个路由器就会-1,那么此时如若减到0了,代表这个数据包存活“时间也到头了
就会被当前路由器丢掉
我们可以直观感受到的是,window上直接ping一个IP地址
对于ping:这是一个网络工具命令,通过发送Internet控制消息协议回显请求到目标主机上,并等待接收回显应答工作。
8位协议:
用于标识上层协议,即传输层协议用了什么协议
这是一些常见的协议编号和对应的协类型
协议编号 | 协议名称 | 描述 |
---|---|---|
1 | ICMP | Internet控制消息协议 |
6 | TCP | 传输控制协议 |
17 | UDP | 用户数据报协议 |
47 | GRE | 通用路由封装 |
50 | ESP | 封装安全负载(用于IPsec加密) |
51 | AH | 认证头(用于IPsec认证) |
89 | OSPF | 开放最短路径优先 |
16位首部校验和
这个就是可以验证下IP数据包在网络传输中,是否存在出错的可能,当然,这里是针对IP报头而言
毕竟上层传输层对载荷进行生成校验和。
32位源IP地址、32位目的IP地址
这个理解起来更简单了,就是可以表示说,从哪里来?到哪里去?
但是其中一些内容,还是值得讲讲的
比如这里32位地址,可不是用一串32位整数来表示的,人为阅读,可读性太差
可以根据这个,把32位,划分成四个字节,通过3个圆点分开
每一个部分是一个字节,范围是0~255,每一个部分用十进制表示
这样的写法就是点分十进制的写法。
举个例子
这是我本机的IP地址:192.168.255.1
这里还发现一个叫子网掩码的东西,那什么是子网掩码呢?
- 子网掩码是一个32位的数字,通常表示为四个以点分隔的十进制数(如
255.255.255.0
)。 - 它由连续的“1”和连续的“0”组成,其中“1”对应于IP地址中的网络部分,“0”对应于主机部分。
然后,其实根据这个我们就可以计算出网络地址了
什么是网络地址?
是在计算机网络中用于标识一个网络或子网的唯一地址。它是一个由 IP 地址 和 子网掩码 决定的地址,表示网络的 "身份"。在任何网络或子网中,网络地址 用来区分网络和主机部分。
如何计算呢?
将IP地址、子网掩码每位换算成二进制,然后进行与运算
-
192.168.255.1
的二进制:11000000.10101000.11111111.00000001
-
255.255.255.0
的二进制:11111111.11111111.11111111.00000000
与结果:11000000.10101000.11111111.00000000换算成十进制:
192.168.255.0
对于IP地址192.168.57.1
前四位代表的是网络号,最后一位1代表的是主机号(同一网段下,网络号相同,主机号不同,不同网段下,网络号必须不同)
这里介绍两个特殊的IP地址
1.广播地址
比如在192.168.255.0的网络地址中
广播IP:192.168.255.255
作用:用于向网络内的所有设备发送消息
2.环回地址
范围:127.0.0.0
到 127.255.255.255
常用127.0.0.1
作用:用于设备自身的网络测试和通信。
那么值得注意的是我们的IP地址是32位的,即范围可以基本可以到42亿9千万,
所以用它来表示网络中唯一的地址,也不是未尝不可(在以前的年代中)
但随着现在社会的发展,物联网的的时代,全世界都有很多机器也需要联网,也需要IP地址,此时呢,也是会遇到IP地址不够分的问题
那么这里介绍三种方案
1.动态分配IP
简单来说,设备上网,此时通过网络中的DHCP(动态主机配置协议)服务器自动分配一个IP地址
当设备不上网时,释放该IP地址,从而达到利用效率高的问题
2.NAT地址网络地址转换
简单来说,就是以一个IP代表一个局域网内所有设备的地址。
这里会延伸出几个概念
公网:公网指的是开放给所有人访问的网络,最典型的例子就是互联网。任何连接到公网的人都可以通过它与世界各地的其他设备进行通信。
私网:私网是指仅限于特定组织或个人使用的网络,不对外开放。私网可以进一步细分为内网和外网的概念
外网:外网是一种介于内网和公网之间的网络形态,它允许外部合作伙伴(如供应商、客户等)有限制地访问企业内部的部分资源和服务,但仍然保持较高的安全性控制。
内网:内网是一种特殊的私网,专指企业内部使用的网络系统。它通常部署在公司内部,用于支持员工之间的协作、资源共享以及内部业务应用的运行。
所以说,公网IP是唯一的,私网在不同局域网中是可以重复的。
那么如何触发到这个NAT机制呢?
有这样的几种情况是不会涉及到的
1.同一个局域网内,主机A访问主机B
2.公网上的设备A,访问设备B
3.一个局域网内,主机A,访问另一个局域中的主机B(NAT机制中,是不会允许的!)
以下这样的情况会触发到这样的 情况
4.局域网内部的设备A,访问公网上的设备B
那么此时,它的流程大概是怎么样的呢?
场景:我观看爱奇艺电视
发送数据
返回数据
那么我们的电脑的IP地址,会在运营商那,进行一个临时转换。
那么返回数据的时候,为什么会知道,运营商那边,会发送给谁呢?
这是因为,运营商的路由器中,会有一个路由映射表,通过获取接收的数据,就会记录在映射表中
举个例子
旧IP,旧端口,新IP,新端口
可能会以这样的方式进行组织数据。
那么对于这个NAT就分享到这
3.应用IPv6
这个是较为直接的,这个是用128位,16个字节去表示IP地址的
这个比32位,4个字节表示的IP地址,大很多了,理论上可以给地球的每一粒沙子分配一个IP。
选项
提供IP报文中额外扩展功能和额外信息的能力
常见的选项类型
1.记录路由(Record Route, Type 7)
作用:记录数据包经过的所有路由器的IP地址。
(2) 松散源站选路(Loose Source and Record Route, LSRR, Type 131)
作用:允许发送者指定某些中间路由器必须经过,但并不严格限制路径上的其他跳点。
(3) 严格源站选路(Strict Source and Record Route, SSRR, Type 137)
作用:与LSRR类似,但要求数据包严格按照指定的路径传输,不能经过未列出的路由器。
(4) 时间戳(Timestamp, Type 68)
作用:记录数据包到达每个路由器的时间戳。
(5) 安全(Security, Type 130)
作用:提供基本的安全标记或分类。
(6) 验证和复制互联网协议(CIPSO, Type 134)
作用:提供更复杂的安全标签机制。
载荷
里面的内容就是传输层中内容,实际传输的数据。
那么到这里IP报文格式分享的差不多了,接下来继续分享数据链路层协议报文格式
数据链路层
对于数据链路层也存在着很多协议,比如以太网帧、点对点协议(PPP, Point-to-Point Protocol)
这里以太网帧来分享
以太网帧
报文格式如下:
接下来一一解释下吧
1.前导码:
作用:
同步时钟:前导码由一系列交替的1和0组成(具体为10101010...),用于在发送方和接收方之间同步时钟频率。
准备接收:它让接收设备知道即将接收到一个完整的帧,并允许其调整内部时钟以便正确地读取后续数据。
2.帧起始界定符
标识帧开始:标志着前导码结束和以太网帧数据部分的开始。虽然它的大部分位与前导码相同,但最后一位是1而不是0,这使得接收方能够识别出帧的确切起点。
3.目的MAC地址、源MAC地址
简单来说,数据从哪个设备来,到哪个设备去
值得注意的是,这个MAC地址,在设备出厂的时候就已经写死了,不可以更改了
4.类型
作用:
区分上层协议:在以太网II帧中,这个字段指示了封装的数据包所使用的上层协议类型(例如IPv4为0x0800,IPv6为0x86DD)。
5.数据
作用:承载信息:该字段包含了来自上层协议(如IP、ARP等)的数据包。
值得注意的是,这里是1500字节,是另一个参数决定
MTU
它的作用:
限制数据包大小:MTU决定了通过一个特定链路传输的最大数据包大小。如果一个数据包超过了该链路的MTU值,则需要对该数据包进行分片(Fragmentation),即将其分割成较小的数据包以便传输。
提高传输效率:适当的MTU设置可以帮助减少网络中的分片数量,从而降低处理开销并提高传输效率。
避免丢包:如果数据包超过某些路由器或交换机支持的最大尺寸,可能会导致数据包被丢弃,进而引起网络性能问题。
在以太网中,MTU默认的值就是1500字节
超出此范围,那么就会进行拆包,分片传输
在接收方中,进行组包。
6.校验和( 帧校验序列(Frame Check Sequence, FCS)):
作用:
错误检测:FCS通常通过循环冗余校验(CRC)算法生成,用于检测帧在传输过程中是否发生了错误。
验证完整性:接收方也会计算FCS并与接收到的FCS值对比,若不匹配则认为帧已损坏并可能丢弃该帧。
那么到这里呢,数据链路层也分享到这里了。