【网络】第五章-网络层协议

网络层协议

  理解网络层功能,常见协议。

网络层功能

  网络层主要负责地址管理以及路由选择。在网络中我们从一个ip到另一个ip有很多条路可以走,而网络层则是帮我们规划我们传输数据的最佳路线。

ip协议

协议字段

  1、4位版本:当前的协议是IPV4还是IPV6,由socket创建时传入的地址域决定。
  2、4位首部长度:决定了头部有多长,以4个字节为单位。
  3、8位服务类型:3位优先权字段(已弃用),1位保留字段必须置0,4位TOS字段分别表示最小延时,最大吞吐量,最高可靠性,最小成本。这四者互相冲突,只能选择一个,根据场景选用合理的服务类型。
  4、16位总长度:是数据长度,传输层协议头和ip头的总长度,最大报文不超过64k,由此可见UDP报文数据的最大大小并没有64k-8,还应该减去ip头部大小。对于UDP来说如果数据报文长度小于最大报文长度则可以进行传输,但是在传输时还有一个限制——MTU,最大传输单元,这个限制是链路层的限制,限制了传输时最大的数据帧大小,如果UDP报文大于MTU大小则无法通过链路层的传输,此时为了能够传输则会进行数据分片
  5、16位标识:用于标识当前数据属于哪一个udp数据包。
  6、3位标志:第一位保留,第二位标识是否禁止分片,1表示禁止,第三位表示更多分片,即如果分片了的话,最后一个分片置为1,其它为0,类似于结束标记。
  7、13位片偏移:用于标识当前报文在原始udp数据包中的偏移量,单位为8个字节。
  8、8位生存时间TTL,之前有讲过MSL,但是在网络中真正的报文生存时间是按照TTLMSL共同计算的。TTL是所能经过的路由器跳数,8位最大255跳,发送出去之后开始计算,每经过一个主机则-1,当到0时则认为通信失败,丢弃数据。这个属性主要是为了防备路由环路的情况
  9、8位协议:标识上层协议类型,TCP/UDP等。
  10、16位首部校验和:用域校验数据一致性。
  11、32位源ip地址:从哪个主机来。
  12、32位目的ip地址:到哪个主机去。
  13、40字节选项数据:不一定有。

数据分片

  当mtu < IP头和IP数据大小 < 64k则会在网络层进行数据分片,TCP协议不会进行数据分片,因为其在传输层会协商MSS。将一个大包分为多个小包,在应用层叫分包,在传输层叫分段,在网络层叫分片,数据分片主要针对UDP。
  ip协议在进行分片时会一次取出MTU-ip头大小的数据然后分别封装一个ip头,这样就会封装成多个ip报文然后分别进行发送。
  但是此时可能会有问题,分片后并不能保证按照顺序被对端接收,对端对分片进行重组的时候也无从知道重组的顺序,不过好在ip头信息中有几条信息*来帮助我们确定其属于哪一个数据包以及分片顺序。
  标识字段帮助我们找到当前ip数据包原本属于哪个udp数据包,片偏移字段帮助我们找到当前ip数据包在原udp报文中的相对位置,并且其单位为8个字节,完全足够标识64k数据的偏移量,这也说明了ip对udp报文的每个分片必然都是8的整数倍。

地址管理

ip地址的构成

  ip地址由网络号 + 主机号组成。
  1、网络号:每一个路由器向自己子网中的主机分配地址的时候,这些地址中都应该包含这个网络的标记,这个标记用于区分每一个网络。每一个网络的网络号只要不一样则分配的ip地址就不会冲突。
  2、主机号:每一个主机的ip地址不但要具备网络的标识,还需要能够再局域网中唯一标识,这个唯一标识称之为主机号。

网段的划分

  ip地址就是一个拥有4个字节的无符号整形,不过我们经常用点分十进制进行标识,早期对网段根据网络号和主机号所占位数的不同划分为五类地址:

1
2
3
4
5
A类:高8位中高一位:0,低7位是网络号;剩下的都是主机号。(0.0.0.0 ~ 127.255.255.255)
B类:高16位中高两位:10,低14位网络号;剩下主机号。(128.0.0.0 ~ 191.255.255.255)
C类:高24位中高三位:110,低21位网络号;剩下主机号。(192.0.0.0 ~ 223.255.255.255)
D类:高4位固定:1110。(224.0.0.0 ~ 239.255.255.255)
E类:高5位固定:11110。(240.0.0.0 ~ 247.255.255.255)

  如今这种划分方式已经被淘汰,新的网段划分使用CIDR的方式进行划分,对网络的划分借助了一个字段叫子网掩码
  子网掩码是一个uint32_t类型的数据,由连续的二进制1组成。它如何帮助我们划分网络呢?
  子网掩码取反可以得到局域网中的最大主机号。例如255.255.255.0 取反-> 0.0.0.255,则这个网段中的最大主机号为255。
  

特殊的ip地址

  主机号全为0的地址–网络号。
  主机号全为1–udp的局域网广播地址。
  127.0.0.1–虚拟回环网卡,用于本机网络测试。
  0.0.0.0–本机任意地址。

局域网组建规则

  并不是所有网络号都能用于组建局域网,因为如果所有网络都能组件局域网则仍然有可能造成重复,因此规定能够组件私网的网络号只有以下几种:

1
2
3
10.*.*.* 
172.16.*.* ~ 172.31.*.*
192.168.*.*

  局域网时相邻的网络不能使用相同的网络号,会造成地址分配冲突。这里的相邻网络指的是同一路由器不同网卡所属的网络,一台路由器可以身处多个网络中,记录在同一路由器的路由表上的网络都是相邻网络。

路由选择

  每个路由器上都有一张路由表,记录当前路由器所相连的网络,当路由器接收一个数据,则取出目的ip地址,通过路由表判断当前数据的目的主机属于哪一个相邻的网络(使用相邻网络的地址与子网掩码进行相与,然后与目的网络的网络号进行比较)。若属于某个相邻的网络则使用相对应的网卡将数据发送出去,若路由表匹配失败,则将数据发送到下一层网络设备。

路由选择

  上图大概描述了一个运营商与各个独立用户之间搭建局域网进行通信的简易模型,但实际上原要比这复杂得多。
  路由选择并不困难,最为困难的是路由表生成算法。例如距离向量算法,LS算法等。关于路由选择有着很多的算法这里不再深入讨论。
  关于路由选择和网络搭建十分复杂,是一门独立的学科,还需要进一步研究讨论。

-------------本文结束感谢您的阅读!-------------
记录学习每一分,感谢您的赞助