IP协议

网络层

        对于网络层来说,它是传输层协议的具体实施,那么它具体是如何实施的呢?

IP协议

  IP协议_第1张图片   

         IP能够实现将数据从A主机送到B主机,在网络中,每一个IP报文都包含了它的目标网络和目标主机。

        而IP协议就是网络层使用的协议。

IP协议报头

        为了了解协议,我们需要了解它的报头。

IP协议_第2张图片

  •  4位版本号:表示使用的IP协议的版本(分为IPV4和IPV6)
  • 4位首部长度:表示报头的长度,其单位是4字节
  • 8位服务类型:三位优先权字段(已弃用),4位TOS字段,和1位保留字段。其中4位TOS字段分别是:最小延迟,最大吞吐量,最高可靠性,最小成本,这四者互相冲突,只能选择一个
  • 16位总长度:IP数据报总长度
  • 8位生存时间(TTL):数据到达目的地的最大报文跳数,一般为64,每经过一个路由器就-1,目的是防止路由循环
  • 8位协议:表示上层协议
  • 16位校验和:CRC校验,鉴别头部是否损坏
  • 32位源IP地址:发送端的IP地址
  • 32位IP地址:接收段的IP地址

        其中,IP地址所记录的就是网络号和主机号

分片

        在数据链路层有一个规定,就是发送的数据不可超过1500字节,但是传输层并不关心数据有没有超过1500字节,因此网络层对传输层发下来的数据要进行分片,将数据分开。

如何知道数据被分片了?

        解决这个问题我们需要先了解报头中的这三个属性。

  • 16位标示:唯一的标识主机发送的报文,若是报文被分片了,同一报文中被分片的数据的标识都是相同的
  • 3位标志:第一位保留(目前没用),第二位为1表示禁止分片第三位为‘更多分片’,如果一个报文的第三位为1,表示它后续还有被分片的报文,为0则表示它是最后一个分片
  • 13位片偏移:就是分片相对于原始IP报文开始出的偏移,表示该分片处于原报文的哪个位置,实际偏移量为这个值 *8 ,因此出了最后一个报文,其他报文长度都是8的整数倍

        通过这三个属性,我们就知道报文是否被分片了。

        若是3位标志的第三个为1表示是分片,若是为0&&13位片偏移大于0也说明是分片。

        同一报文的分片则通过16位标示分辨。

        而分片的数据则按照13位片偏移来按升序组装,而报头中的校验和则保证数据的正确性。

如何进行分片的?

        IP协议_第3张图片

         当传输层发下来三千字节的数据时,网络层的IP协议会先添加报头。

        然后发现数据已经超过1500字节了,因此它就会将数据给分片。

        第一片包括原来的IP报头和1480字节的数据。

        第二片则是纯1480字节的数据,然后添加报头。

        第三片则是剩下的40字节的数据,然后添加报头。

网段划分(重要)*

        为了提高传输效率方便定位主机,互联网上的每一台主机都隶属于一个子网,每一台主机在网络上都有自己主机号,每一个子网都有自己的网络号。

        我们可以将子网当成学院,主机则是学生,同一个学院的学生的学院号相同,但是它们的学号不同。

IP协议_第4张图片

        而网络通信的过程就像是学生寻找失主的过程。

IP协议_第5张图片

        假设王五捡到了张三的学生证,王五就去学生群里发消息说捡到了学号为 000 123 学号的学生证,让他认领,张三就在学生群中看到了消息,从而找回了自己的学生证。

         然后我们更换下概念,学生是主机学院是这个主机所在的子网学生群则是公网

IP协议_第6张图片

         就像图中,同一个网段中的主机标识不同,但是不同网段的主机标识可以相同,而且不同网段的网络号也不同,此外,连接两个子网的就是路由器。

        这样就能够保证网络中的主机的IP地址都不相同。

        其中路由器在网络中担任了重要角色,它带有DHCP功能,能够自动的给子网内新增节点分配IP地址。

子网掩码

        在之前,曾提出过一种划分网络号和主机号的方案,将IP地址分为五类。

IP协议_第7张图片

  •  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

        但是这种方案随着网络的发展出现了局限性,大部分组织都申请的是B类的IP地址,导致B类很快就分配完了,但是A类却浪费了大量地址。

        因此又提出了新的划分方案:CIDR

  • 引入了额外的子网掩码来区分网络号和主机号
  • 子网掩码是一个32位的正整数,通常由一串 ‘0’ 结尾
  • 将IP地址和子网掩码进行 “按位与” 的操作,就得到了网络号
  • 而网络号和主机号的划分与这几个方案都无关

例如:

IP协议_第8张图片

IP协议_第9张图片         通过与操作能够成功的计算出网络号和子网地址范围。

        此外还有一种特殊的表述方法:140.252.20.68/24,就表示IP地址是 140.252.20.68,子网掩码高24位为1,也就是 255.255.255.0 。

特殊的IP地址

  • 主机地址全为0表示网络号,也就是这个局域网
  • 主机地址全为1表示广播地址,也就是给同一链路中的所有主机发送数据包
  • 127.*表示本地环回测试,一般是127.0.0.1

IP地址的数量限制

        由于特殊IP地址和网络高速发展,IPV4版本的IP协议已经不够用了。

        即便有CIDR来缓解,但是依旧治标不治本。

        因此各界大佬提供了三种方案。

  • 动态分配IP地址:只给接入网络的设备分配IP地址
  • NAT技术
  • IPv6协议:是一个128位16字节的协议,能够大大缓解当前IP地址不足的问题

私有IP和公网IP地址

        一般组建局域网的都是私有IP,而私有IP是规定了的。

  • 10.*,前8位是网络号
  • 172.16到172.31,前12位是网络号
  • 192.168.*,前16位是网络号
  • 在这个范围内的都是私有IP

        而公网都需要运营商的路由器来连接。IP协议_第10张图片

  •  每台主机发送数据都需要经过家用路由器,企业路由器然后放到广域网中,再发送给对应的主机以此来通信。
  • 每一个路由器可以配置两个IP地址:WAN口IP和LAN口IP(子网IP)
  • 路由器LAN口连接的主机都从属于该路由器的子网
  • 每个路由器它的LAN口IP都相同,但是子网内的主机IP不同,不过子网之间的IP地址就可以重复了
  • 最外层的运营商路由器的WAN口IP就是公网IP
  • NAT技术就是每一层路由器将IP首部的IP地址进行替换,这一层的WAN口IP变为上一层的LAN口IP,逐级替换最后到公网IP
路由

        目前我们已经知道了网络通信实际上是主机发送数据包给路由器,路由器通过数据报上的目的IP来一层一层的找到对应主机,那么IP协议是如何做到的呢?

        实际上IP协议这种一层一层找到对应主机的路的方式叫做路由,而路由就是靠路由器内部维护的路由表

路由表

        在网络中的每个节点都维护着自己的路由表。

        在命令行中可以用 route 命令查看。

IP协议_第11张图片

  • Flag 中的 U 表示此条目可用,带有G表示下一跳是路由器地址,没有G则表示同一子网中的其他主机地址 

        当我们发送数据报时,就是在路由表上通过与子网掩码运算,来和目的地址对比,若是运算后有对应的目的地址,就直接跳转,没有就采用默认目的地址,通过路由发送到其他子网上去。

        通过这样的方式,我们经过一层一层的路由表的子网掩码计算得到的目的IP会越来越准确,最终定位到目标主机。

总结

        本篇博客了解了什么是IP,IP协议的报头格式,以及报头各个属性的作用,然后还了解了什么是分片。

        而后了解到为了方便定位主机,提高传输效率,大佬们提出了网段划分,但是随之而来的是IP地址的不足,为了解决这个问题大佬提出了子网掩码的解决方法,还了解到一些特殊的IP地址以及IP地址的数量限制。

        后面又了解到私有IP的划分,还了解到不同局域网之间的主机进行通信的大致过程,还了解了路由以及每个节点维护的路由表。

        以上就是网络层协议的内容。

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