网络层--IP

目录

一.补充知识

二.IP协议格式

三.分片与组装

3.1分片

3.2组装

3.3如何避免分片

四.网络号与主机号

4.1介绍

 4.2网段划分

4.3特殊的IP地址

四.私网IP地址和公网IP地址

五.路由



一.补充知识

前面已经学习了应用层与传输层的知识了。

网络层--IP_第1张图片

应用层协议:如http,https(加密)等。在应用层向下交付给传输层后,保证的是数据传输的可靠性和传输效率,如TCP协议。但真正负责数据在网络中传输的则传输层之下的网络层和链路层。

有传输层的存在,可以保证数据可以从一方可以发送给另一方(出现丢包等问题时,可以重传等,以及它的其它特性,保证了数据传输的可靠性和传输效率),而数据在网络上是如何走的,是由网络层和链路层控制的。网络层要解决的问题就是,将数据从一台主机送到另一台主机,也就是数据的路由。

主机: 配有IP地址, 但是不进行路由控制的设备;。

路由器: 即配有IP地址, 又能进行路由控制;

节点: 主机和路由器的统称。

 网络层--IP_第2张图片

 数据的传输基本都是夸网络的,路由器就是连接多个网络的硬件设备,因此数据在进行跨网络传输时一定需要经过多个路由器,数据中包含目的地的地址,而路由器可以通过查路由表找到最短路径,慢慢接近目的主机。

二.IP协议格式

网络层--IP_第3张图片

 具体解释:

1. 4位版本号:即IP协议的版本,对于IPv4来说, 就是4。

2.4位首部长度:表示IP报头的长度,以4字节为单位。(最大值为1111,即15*4=60字节)

3. 8位服务类型:3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 

4.16位总长:表示IP数据报整体占多少个字节。

5. 16位标识(id):当数据包过大时会进行分片(ip层分片),而同一个数据包的分片16位标识是一样的。

6.3位标志段:第一位保留(现在未用到)。第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文。第三位表示"更多分片", 如果进行分片了,最后一个分片置为1, 其他是0.

7.13位片偏移是分片相对于原始IP报文开始处的偏移.,其实就是在表示当前分片
在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的。例如:

在这里插入图片描述

8.8位生存时间:数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL-= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环。
9. 8位协议:用来表示上层协议的类型。

10.16位头部校验和使用CRC进行校验,来鉴别数据报的首部是否损坏,但不检验数据部分。

11.32位源IP地址和32位目的IP地址:表示发送端和接收端所对应的IP地址。

12.选项字段(0-40字节,4位首部长度表示的长度-20)

三.分片与组装

3.1分片

数据在网络上传输时,要经过多个路由器,IP进行数据跨网络传送的前提是,需要先将数据从一个节点传送到和自己相连的下一个节点,这个问题实际就是由IP之下的数据链路层解决的,其中数据链路层最典型的代表协议就是MAC帧。两两相连的节点是在同一个局域网当中的,因此要讨论两个相邻节点的数据传送时,实际讨论的就是局域网通信的问题。

MAC帧是在数据链路层的协议,它会对IP层传输下来的数据进行封装,后再发送到网络上。但MAC帧携带的有效载荷的最大长度是有限制的,IP层向下交付的数据一般最大为1500字节,这个值也叫做最大传输单元(Maximum Transmission Unit,MTU)。

所以当数据大于1500字节时(包括IP的报头和IP的有效载荷。),数据要在网络层进行分片。

具体过程:

如果 MTU = 1500

确定分片后长度方法:L=长度 & 满足 L + 20 <= MTU(1500) 且 L 能被8整除的最大值
L <= 1480,1480 能被8整除且最接近与MTU,另外 如果这个包大小为4000,4000/1480 = 2.7,及要分为3个分片包发送。
确定分片后的 偏移量:由每个分片起始位置决定,如果是第一个分片,起始位就是 0 偏移量 = 0/8=0,第一个分片的偏移量就是0,以此类推。
确定分片后的标识:随机产生,但每个分片需相同。
确定分片后的标志:除了最后一个分片包是0,其余都是1。计算过程中都不带包头

网络层--IP_第4张图片

 因为网络环境的不同,网络中的MTU也可能不一样,数据的分片和组装发生在IP层,不仅源端主机可能会对数据进行分片,数据在路由过程中的路由器也可能对数据进行分片但,分片数据的组装只会发生在目的端的IP层。

在分片的数据中,每一个分片在IP层都会被添加上对应的IP报头,而传输层添加的报头只会出现在第一个分片中,因此网络中传输的数据包可能没有传输层的报头。

3.2组装

通过ip报头的32位原ip地址可以确定数据是由哪些主机发送的,通过16位标识符可以确定哪些数据是分片的。第一个分片报文中的13位片偏移的值一定为0。最后一个分片报文中的“更多分片”标志位一定为0。对于每一个分片报文来说,当前报文的13位片偏移加上当前报文的数据字节数 ÷  8所得到的值,就是下一个分片报文的所对应的13位片偏移。通过特点就可以将数据数据进行组装,直到拼接到一个“更多分片”标志位为0的分片报文,此时表明分片报文组装完毕。

3.3如何避免分片

如果数据在ip层进行了分片,在数据传输过程中就可能出现丢包问题,若一个分片对方主机未收到,也就等同于这个报文整体丢失了,因此分片会增加传输层重传数据的概率。

TCP作为传输控制协议,它需要控制一次向下交付数据不能超过某一阈值,这个阈值就叫做MSS(Maximum Segment Size,最大报文段长度)。MAC帧的有效载荷最大为MTU,TCP的有效载荷最大为MSS,而TCP和IP一般情况下报头的长度是20字节,因此一般情况下 MSS = MTU - 20 - 20,而MTU的值一般是1500字节,因此MSS的值一般就是1460字节。

四.网络号与主机号

4.1介绍

ip地址的分为两个部分,网络号和主机号。

网络号:保证互相连接的两个网段具有不同的标识。

主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。

子网其实就是把网络号相同的主机放到一起,如果要在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复。

例如:网络层--IP_第5张图片

 4.2网段划分

过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类,例如:网络层--IP_第6张图片

 由于A类地址第一位是0,所以前八位最大是 0111 1111,换算成十进制是 127。

A类:0.0.0.0到127.255.255.255。
B类:128.0.0.0到191.255.255.255。
C类:192.0.0.0到223.255.255.255。
D类:224.0.0.0到239.255.255.255。
E类:240.0.0.0到247.255.255.255。

 判断一个IP地址是属于哪一类时,只需要遍历IP地址的前五个比特位,第几个比特位最先出现0值,那么这个IP地址对应就属于A、B、C、D、E类地址。

这种方案存在很大的问题,在实际网络架设中,在一个局域网当中一般不会有这么多主机的情况,也就意味着大量的IP地址实际都被浪费掉了。

后面有了改进的方案:CIDR(Classless Interdomain Routing)

在原有的五类网络的基础上继续进行子网划分,这也就意味着需要借用主机号当中的若干位来充当网络号,此时为了区分IP地址中的网络号和主机号,于是引入了子网掩码(subnet mask)的概念。

每一个子网都有自己的子网掩码,子网掩码实际就是一个32位的正整数,通常用一串“0”来结尾。将IP地址与当前网络的子网掩码进行“按位与”操作,就能够得到当前所在网络的网络号。

 例如:如果在某一子网中,它将前16位作为网络号,那么该网络对应的子网掩码的前16位就为1,剩下的8个比特位为0。

 在这里插入图片描述

 本质就是保留了主机IP地址中前16个比特位的原貌,将剩下的16个比特位的值清0了而已,也就是将主机号清0了,所以“按位与”后的结果就是该网络对应的网络号。

4.3特殊的IP地址

有一些IP的地址是具有特殊用途的,例如:

  • IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网。
  • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包。
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1。

四.私网IP地址和公网IP地址

私网IP:在一个局域网内内的通信,并且不直接连到Internet上。

规定:

  • 10.*,前8位是网络号,共16,777,216个地址。
  • 172.16.*到172.31.*,前12位是网络号,共1,048,576个地址。
  • 192.168.*,前16位是网络号,共65,536个地址。

这个范围内的为私网ip,其余的为公网ip。

路由器是连接两个或多个网络的硬件设备,它有两个接口:LAN口和WAN口

  • LAN口(Local Area Network):表示连接本地网络的端口,主要与家庭网络中的交换机、集线器或PC相连。
  • WAN口(Wide Area Network):表示连接广域网的端口,一般指互联网。

我们将LAN口的IP地址叫做LAN口IP,也叫做子网IP,将WAN口的IP地址叫做WAN口IPO,也叫做外网IP

网络层--IP_第7张图片

 子网内的主机在和外网进行通信时,路由器会不断将数据包IP首部中的源IP地址替换成路由器的WAN口IP,这样逐级替换,最终数据包中的源IP地址成为一个公网IP,这种技术成为NAT(Network Address Translation,网络地址转换)。如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 只需要把程序部署在一台具有外网IP的服务器上,这样的服务器可以在阿里云/腾讯云上进行购买。

五.路由

概念:数据在路由的过程中,实际就是一跳一跳(Hop by Hop)“问路”的过程。所谓“一跳”就是数据链路层中的一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。

网络层--IP_第8张图片

 

路由器的查找结果可能有以下三种:

路由器经过路由表查询后,得知该数据下一跳应该跳到哪一个子网。
路由器经过路由表查询后,没有发现匹配的子网,此时路由器会将该数据转发给默认路由。
路由器经过路由表查询后,得知该数据的目标网络就是当前所在的网络,此时路由器就会将该数据转给当前网络中对应的主机。

你可能感兴趣的:(tcp/ip,网络,服务器)