目录
一、网络层
1、IP协议
(一)IP协议报头
(二)地址管理
(三)路由选择
二、数据链路层
三、扩展知识:DNS
在上篇和中篇我们介绍了关于应用层和运输层的一些协议和细节,在此篇我们描述关于网络的剩下三层内容~
网络层最核心的协议就是IP协议,下来我们看什么是IP协议~
主要完成量方面的工作:
①、地址管理
②、路由选择
(一)4位版本:IP协议的版本号,当前取值只有两种,0100(IPv4),0110(IPv6)。我们只要讨论IPv4。
(二)四位首部长度:IP的报头和TCP报头类似,都是可变的,带有选项。4位取值范围0-15,单位是4字节。如果取值是1111=>15,实际表示的首部长度就是60字节。
(三)TOS:有8位,实质上只有四位是有效的。4位TOS分别表示:最小延时、最大吞吐量、最高可靠性、最小成本。(一个IP数据报头,只能取其中一种,不存在兼得的情况,只得其一)
IP协议能够规划出两点之间一条比较合适的路径,那么根据什么来规划呢?就是通过TOS,四种TOS选项分别规划四种不同路径来进行发送。
(四)16位总长度:16位=>最大长度64k,单个IP数据报最大长度也不能超过64K。
如果要构造一个更长的数据报如何处理?
IP协议自身实现了分包和组包的功能。
如果整个IP数据报太长了,超过了64k,此时IP协议就会把这个大包拆分成多个小包。
一个IP数据报=IP报头 + IP数据载荷(TCP数据报)
在进行分包的时候,IP数据报不考虑载荷里面的数据是什么,只是单纯的对数据载荷进行了切分。
如何区分这多个IP数据报,是从同一个大的IP数据报拆分而来?
16位标识:多个被拆分出来的IP数据报,里面的这16位标识的值是相同的。
TCP数据报的粘包问题需要规定边界,如何判断在原始IP数据报中的位置顺序?
13位片偏移:通过这13位片偏移,来描述多个包在原始IP数据报中的先后顺序。
片偏移越小,位置越靠前~
如何判断在这个数据报后还有没有别的数据报?
三位标志:三位中只有一位是好使的,0表示还有后续,1表示这是最后一个包。(结束标记)
接收方缓冲区如何对这些数据报进行处理?
缓冲区收到数据报后根据这三个字段进行分配连续空间,到达的数据报会插入到指定的位置。
(六)8位生存时间:表示一个IP数据报,在网络上还能存在多久,单位是 次 。IP数据报初次发送时,会有初始的TTL(常见取值128、64)IP数据报每次经过一个路由器,TTL就会减一。当TTL减到0时,此时转发这个包的路由器就会把这个包丢弃。
(七)8位协议:传输层使用的是什么协议,TCP或者UDP都有不同的取值。
(八)16位首部检验和:用于校验数据是否正确。
(九)32位源IP地址(发送方地址)和32位目的地址(接收端地址)。
对于IPv4来说,一个IP地址本质上是32位的整数。使用“点分十进制”表示这个IP地址
每八位为一体将32位划分为4部分,每个部分一个字节,每个部分的取值为0-255.
IP地址是由“点分十进制”构成的数据,同时,我们把IP地址分为两部分,网络号+主机号。
网络号:描述当前的网络信息(局域网标识)
主机号:区分了局域网内部的主机
此处我们要求:同一个局域网内部,主机之间的网络号是相同的,主机号是不能相同的。两个相邻的局域网(同一路由连接的)网络号也是不同的。
以宿舍为例:
问题:前多少bit位是网络号?
引入一个“子网掩码”的概念,通过子网掩码判断表示多少个bit位是网络号,也是“点分十进制”,区别在于:子网掩码的左侧都是1,右侧都是0(不会1 0 混排)左边的这些1就表示这一位是网络号,剩下的右边的0表示哪些是主机号。
例如:255.255.255.0 =》 1111 1111 1111 1111 1111 1111 0000 0000 前24个bit位就是网络号,后8个比特位就是主机号。
一些特殊的IP地址:
①主机号全为0,该IP就表示网络号。
②主机号全为1,该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的设备。
考虑到IPv4协议,使用的IP地址是32位整数(42亿九千万)。现实全世界的设备已经几近超过42亿九千万,让每个设备都有唯一的IP地址,已经不现实了。这个问题如何解决?
方案一:
动态分配IP地址,每个设备连上网的时候,才有IP,不联网的时候就没有IP。
方案二:NAT机制
让多个设备共用一个IP(外网IP)
把网络分成内网(局域网)和外网(广域网),要求外网IP必须表示唯一的设备。内网中的若干个设备,可以共同使用同一个外网IP~
NAT机制把IP分成了内网和外网,也就隐含了一个重要的结论:对于一个外网IP,可以在互联网的任意位置都可以访问;对于一个内网IP,只能在当前局域网内部访问,局域网1的设备,不能使用内网IP访问局域网2的设备。
方案三:IPv6
IPv6在报头使用了一个更长的字段来表示IP地址:16字节,128位
IPv6(给地球上的每粒沙子都分配一个IP地址!!!!)
唯一最大问题:IPv4和IPv6不兼容~对于一个设备来说,支持IPv4和IPv6是两个截然不同的机制。
路由选择其实就是在规划路径,两个设备之间需要找到一条通道,能够完成传输的过程。
IP协议的路由选择类似于问路,IP数据报中的目的地址,就表示这个包要发到哪里去。
如果数据报中的目的地址,当前路由器认识,就可以直接告诉你路~如果当前路由器不认识,就会大概给出你一个方向,让你走到下一个路由器的时候再进行询问~依次往后,间接意味着距离目的地址越来越近,总会有一个路由器认识这个目的地址,于是就可以直接转发过去~
特别指出:有时,不光遇到了一个认识这个地址的路由器,并且它还认识多条路,此时就可以选择一个更合适的路径。
1、数据链路层主要的协议,叫做“以太网”。以太网协议不仅仅规定了数据链路层的内容,也规定了物理层的内容。
已经存在IP地址为何还要有物理地址?
当初网络层协议和数据链路层协议,是各自独自研发出来的~mac地址和IP地址,就有些重复,现状就是当前mac地址和IP地址混合使用,表示的功能不同~IP用来表示一次传出过程中起点和终点。(不考虑NAT的情况,一个IP数据报中源IP和目的IP是固定的)mac用来表示传输过程中,任意两个相邻节点之间的地址(一个以太网数据帧,在每次转发过程中,源mac和目的mac都会改变)
2、说到以太网,不得不说说“以太网数据帧”。
上述就是一些以太网数据帧格式。
以太网数据帧通过6个字节来表示源地址和目的地址。
这就比IPv4地址更长了6W多倍,此时这里的地址就称为“mac地址”。mac地址做到了每个设备都是唯一的(每个网卡都是唯一的),在网卡制作完成出厂的时候就写死的。
对以太网数据帧做如下分析:
类型:类型代表后面搭载的是何种数据。例如是0800,就搭载的是一个IP数据报,0806和8035就是特殊情况~
CRC:帧尾就是一个基于CRC算法的校验和。
MTU:一个以太网数据帧能够承载的数据范围。这个范围取决于硬件设备,不同的硬件设备,对于的数据链路层协议可能又不一样,如果数据报超过了MTU如何处理?IP层分包~~IP层的分包并不是给IP的报头64K准备的,更多的是为了适应数据链路层的MTU。
MSS:TCP中在IP不分包的前提下,最多能够搭载多少载荷。取决于MTU、TCP、IP的报头(报头是可变长度)分包存在开销,MSS对于TCP起到一定的提示效果,当当前传输TCP的数据长度不超过MSS的时候,是属于最高效的状态。
ARP:ARP报文并不是用于传输数据的,只是起到了一个辅助的效果。
路由器这样的设备在转发数据的时候,首先拿到的是一个IP地址(目的地址),通过IP地址决定接下来这个数据怎么走(从哪个端口出,发到哪个设备上),因此就得决定,接下来封装的以太网数据帧,目的mac是啥~~需要根据APR协议,建立起IP->mac这样的映射关系。
DNS是一个应用层协议(域名解析)
IP地址的二进制写法和点分十进制写法对于人类来说都不算很友好,因此就决定使用一串英文单词来表示这个IP地址。这串英文单词就称为域名。域名和IP地址之间,是存在一一对应关系的。
于是乎,建立了专门的机构,负责维护域名和IP的对应关系。比如要申请一个域名,去这个机构报备即可。这个机构维护了一组服务器,把hosts文件存到服务器->域名解析服务器。
考虑到全世界同时访问这个域名解析服务器的话,服务器的压力过于大,因此,全世界各个地区的国家、地区、城市、有各自的网络运营商,这些网络运营商会就进架设域名解析镜像服务器。咱们平时上网的时候,一般就是就近访问了咱们的镜像服务器。