计算机网络网络层数据链路层协议详解

发布于:2023-01-20 ⋅ 阅读:(10) ⋅ 点赞:(0) ⋅ 评论:(0)

网络层

工作:地址管理和路由选择

IP协议

在这里插入图片描述

  1. 4位版本:IP协议的版本号,当前只有两个取值,4和6(0100,0110),下面面讨论IPv4
  2. 4位首部长度:IP报头和TCP类似,都是可变得带有选项,4位的取值范围0-15,这里的单位也是4个字节,如果取值是1111,实际表示的首部长度就是60字节
  3. 8位服务类型(TOS):说是8位实际只有4位是有效的。4位TOS分别表示,最小延时,最大吞吐量,最高可靠性,最小成本。(同一时刻,只能取一种状态)这里的TOS相当于是切换形态。
  4. 16位总长度:UDP也有类似的情况,16位说明最大长度64k,因此单个IP数据包最大长度确实不能超过64k。如果要构造更长的数据包,IP协议自身实现了分包和组包的操作。
  5. 第二行的16位标识,3位标志,13位片偏移这三个字段就是用来进行分包和组包的。如下图所示:

在这里插入图片描述
在这里插入图片描述

16位标识:多个被拆出的IP数据报16位标识的值是相同的,可以用来区分从不同IP包里拆出的数据。
13位偏移:用来描述包的先后顺序,片偏移准确来说也不是单纯的1,2,3,4而是可以基于片偏移来计算出中间差多少空间。
3为标志:3位只有一位是好使的,0表示后面还有后续,1表示这是最后一个包。(结束标记)

如何基于UDP实现分包组包?
解决方案就是照抄IP作业

  1. 8位生存时间(TTL):表示一个IP数据报能在网络上还能存在多久,这里的单位不是s或者ms,而是转发次数。IP数据包被发送的时候会有一个初始的TTL(比如常见的取值128或者64),IP数据包每次经过了一个路由器TTL就会-1,如果TTL减到0了,此时收到这个包的路由器就会把这个包给丢弃。

原因:主要就是有些包里面的IP地址可能是永远到不了的,像这样的包不可能在网络上无休止的转发(占用硬件资源太多了),正常的IP数据包都会在既定的TTL内到达。

  1. 8位协议:传输层使用的是哪种协议,TCP和UDP都有不同的取值
  2. 16位首部校验和:用来校验数据是否正确
  3. 32位源IP地址:表述发件人地址
  4. 32位目的IP地址:目的IP表示收件人地址

IP地址

对于IPv4来说,一个IP地址本质上是32位的整数,通常会使用“点分十进制”这样的方式来表示这个IP地址。三个点吧32位整数分成4各部分,每个部分1个字节,每个部分取值就是0-255。给人看的IP通常就是用点分十进制表示的,机器存储的IP在底层仍然是按照4个字节整数来表示的。

组成部分:网络号(描述当前网段信息)+主机号(区分了局域网内部主机),要求同一局域网里,主机之间的网络号是相同的,主机号不能相同,两个相邻的局域网里(同一个路由器连接的),网络号也是不同的。
在这里插入图片描述

子网掩码:32位点分十进制表示的整数,子网掩码的左侧都是1,右侧都是0(不会01混着排列),左边的这些1就表示那些是网络号,剩下0就是表示那些位是主机号。一般家用局域网设备很少不会超过255,常见的子网掩码就是255.255.255.0,如果一个局域网设备多了,子网掩码就会出现一些其他值。
历史上(在子网掩码之前),通过一些粗暴的“分类”方式来划分网络号和主机号,把IP地址分成了A,B,C,D,E这5类,每一类分别都有几位是网络号,几位是主机号

特殊的IP地址
如果IP的主机号为全0,该IP旧表是网络号(局域网里的一个正常设备,主机号不能设为0)
如果IP的主机号为全1(255),该IP就表示“广播地址”,往这个广播地址上的发的消息整个局域网中都能收到
IP地址是127开头的,该IP都表示“环回IP”,表示主机自己,127.0.0.1(环回IP中的典型代表)
IP地址是10开头,192.168开头,172.16-172.31开头,表示该IP地址是一个局域网内部的IP(内网IP),除此之外,剩下的IP称为外网IP(直接在广域网上使用的IP)
要求外网IP一定是一个唯一的,每个外网IP都会对应到一个唯一的设备。内网IP只是在网点局域网中是唯一的,不同的局域网里可以有相同的内网IP。

为什么同一个IP能表示不同设备?
当前IPv4协议使用的IP地址是32位整数,32位能表示的数据范围42亿9千万,让每一个设备都有唯一的IP地址不现实。
解决:
1.动态分配IP地址,让每个设备连上网的时候才有IP,不联网的时候就没有IP(这个IP就可以给别的人用),但这个方案不能从根本上解决问题,治标不治本。
2.NAT机制,让多个设备共用一个IP(外网IP),这也是当前的网络环境。NAT只是续命一波但是不能从根本上解决问题。

NAT机制

把网络分成了内网(局域网)和外网(广域网),要求外网IP必须表示唯一的设备。同时内网中的若干设备可以共用一个外网IP。这个时候每个外网IP就可能表示这几千个甚至上万个设备,这个时候IP抵制的压力也就缓解了很多。

NAT设备:运营商的路由器这里就会修改IP数据报,从内网发出去的源IP改成外网IP,带有这样功能的路由器设备叫做NAT设备。
在这里插入图片描述

结论:对于一个外网的IP,可以在互联网的任意位置都能访问到。对于一个内网IP,只能在当前局域网内部访问,局域网1的设备不能使用内网IP访问局域网2的设备,因为内网IP可以重复出现,只有在当前的局域网内才是唯一的。

IPv6

在报头上使用了一个更长的字段来表示IP地址,16个字节128位。从根本上解决了IP地址不够用的问题。IPv4和IPv6并不兼容

路由选择

路由选择也就是规划路径,两个设备之间要找到一条通道能够完成传输的过程,前提是得先认识路。IP协议的路由选择也是类似,IP数据报中的目的地址就表示了这个包要发到哪里去。这个目的地址如果当前路由器直接认识就直接告诉你路了,如果当前路由器不认识就会告诉你一个大概的方向,让你走到下一个路由器的时候再去问问。依次往后其实也就是在离目标越来越近,这个时候总会遇到一个认识这个地址的路由器就可以具体的转发过去了。有的时候不光遇到了认识这个地址的路由器,这个路由器还认识多个路,就可以选一个更合适的路了。

啥叫路由器认识这个IP地址?
在路由器内部维护了一个数据结构,路由表。路由表里面记录了一些网络信息(网络号),目的IP就在这些网络号中匹配,以及每个网络号对应的网络接口(网络接口其实就对应到路由器里面具体的端口)

数据链路层

协议

主要的协议叫做“以太网”,像我们平时插的网线就叫做“以太网线”,以太网这个协议不仅仅规定了数据链路层的内容,也规定了物理层的内容。

以太网数据帧
在这里插入图片描述

CRC帧尾:一个基于CRC算法的校验和,循环冗余算法,把数据的每个字节依次进行累加。

这里的目的地址和源地址为6个字节,这个就要比IPv4更长,这里的地址称为mac地址。mac地址做到了每个设备都是唯一的(每个网卡都是唯一的),就是在网卡出场的时候就写死了。

已经有了IP地址为啥还要物理地址?
美好的误会!当年网络层协议和数据链路层协议是各自独立研发出来的,mac地址和IP地址就有点重复了。现状是当前mac和IP地址同时使用表示不同的功能,IP用来表示一次传输过程中的起点和终点(不考虑NAT的情况,一个IP数据包中的源IP和目的IP是固定的),mac用于表示传输过程中任意两个节点之间的地址(一个以太网数据帧在每次转达过程中,源mac和目的mac都会发生改变)

MTU

一个以太数据帧能够承载的数据范围,这个范围取决于硬件设备。以太网和硬件也密切相关的,不同硬件设备对应的数据量路层协议可能又不一样。数据链路层考虑的是相邻节点之间的数据传输,考虑这个细节的时候就需要关注到交通工具是啥,不同交通工具能够搭载的数据量就不太相同。

如果数据包超过了MTU咋办?
IP层分包,其实不是给IP报头64k准备的,更多是为了适应数据链路层的MTU。

MSS

TCP中在IP不分包的前提下最多搭载多少载荷,MSS对于TCP起到一定提示效果,当前传输TCP的数据长度不超过MSS的时候属于最高效的状态。MSS也取决于TCP和IP的报头(报头都是变长的)
在这里插入图片描述

ARP报文

不是用来传输数据的,只是起到一个辅助的效果。路由器这样的设备在转发数据的时候,首先拿到的是一个IP地址(目的IP),通过IP地址来决定接下来这个数据怎么走(从那个端口出去,发到那个设备上去)。因此就得决定接下来封装的以太网数据帧的目的MAC是啥,需要根据APR协议来建立起IP->mac这样的映射关系(类似于hash表这样的键值对结构,但是这个表不一定是在内存里,也可能是直接在硬件设备中存储)。
当设备启动的时候就会像局域网中广播ARP报文,每个设备收到之后就会给出一个应答,应答的信息中就包含了自己的IP和mac,发起广播的那一方就可以根据这些回应建立起这个映射表了。

DNS

是一个应用层协议,域名解析,IP地址不好记即使写成了点分十进制仍然对于人类来说不太友好。可以使用一串英文字母来表示合格IP地址。这串英文字母就是域名。域名和IP地址是一个对应的关系。
DNS系统最开始的时候只是一个普通的文件,每一行描述了IP和域名之间的关系,后续在其他程序中使用这个域名就会自动被转换成IP地址。
在这里插入图片描述

后来由一个机构维护一组服务器,把hosts文件存到这个服务器里就是域名解析服务器,也是根域名计息服务器。全世界各个地方的网络运营商会就近架设域名解析镜像服务器。我们平时上网就是就近访问了镜像服务器。