【计算机网络03】网络层协议IP(详细)

网络层协议IP

网络层的作用

在复杂的网络环境中通过IP确定目标主机的合适路径

IP协议

  • 主机 :配有IP地址,但是不进行路由控制。
  • 路由器 :配有IP地址,能够进行路由。
  • 节点:主机和路由器的统称。

IP协议的报头格式

  • 4位版本号:指定IP协议的版本,IPv4对应就是4。
  • 4位头部长度: 对应IP报头的长度,这里类似于TCP协议中的首部长度,由于报头的长度是变长的,因此我们通过头部长度*4表示整个报头的长度。
  • 16位总长度:IP数据报的整体长度。
  • 8位上层协议:表示上层协议的类型。
  • 8位生存时间:计算机网络是一个巨大的拓扑网络,如果让数据报一直传输,那么很有可能出现环的问题,因此规定了数据报在网络结构中的存在时间,超过这个时间就会直接丢弃。
    剩下的参数都会在下面介绍到

网段划分

IP地址分为两个部分:网络号 + 主机号

  • 网络号:保证相互连接的两个网段具有不同的标识。
  • 主机号:同一网段内,主机具有相同的网络号,但是具有不同的主机号。

通过合理的设计,能够保证不同的主机一定网络号和主机号不同时相同

子网掩码

过去曾经提出过一种划分网络号和主机号的方式,把所有的IP地址分为两类,

类型 开始的规定字段 网络号 剩下都为主机号
A类 0 7位网络号
B类 10 14位网络号
C类 110 21位网络号
D类 1110 28位网络号
E类 11110 27位网络号

我们的国家或者组织包括企业都可以去申请这样的网络号。

但是这样划分存在问题🧐

A类网路号的用不完,B类不够用。显然这样的设计会造成很大的浪费😓
所以引入了子网掩码这一个概念,帮助我们进行更细的划分

子网掩码

子网掩码通常高位全为1,低位全为零,我们正常的IP地址与子网掩码进行按位与的操作后得到的就是网络号。

比如这是我的电脑的一个IP地址,那么显然我电脑的网络号就是192.168.124.0,主机号位1。

其实还是很好理解的对吧😀😀😀

其实子网掩码的作用就是帮助我们进行动态的调节网络号的。

特殊的IP地址

  • 将IP地址中主机地址全部置零就成了网络号,代表这一个局域网。
  • 将IP地址中的主机地址全部置一就成了广播地址,用来给同一个链路相互连接的主机发送信息。(这一点我会在数据链路层详细讲解)。
  • 127.0.0.1用于本机环回(loopback)。

私有IP和公网IP

如果一个组织内部想要组建局域网,IP地址只用于局域网通信,而不是直接连接到Internet上,理论上可以使用任意的IP地址,但是RFC规定了用于组建局域网的私有IP地址

  • 10.*:前八位网络号
  • 172.16.*:前12位是网络号
  • 192.168.*:前16位是网络号

路由器

路由器具有转发路由的功能,因此一个路由器可以配置两个IP地址,一个叫做LAN口IP,表示局域网所属的子网的IP地址,另一叫做WAN口IP,表示路由器所处的上级的IP地址。

路由器能够实现网络中报文中的转发,必然是跨网段的,也就是说他一定处于两个网段的交界处,这样他才能实现跨网段。我们网络拓扑结构式层状的,假设我们理解成多叉树(现实复杂很多),我们下层节点直接通过路由器向上层节点转发。

IP分片和组装

前面我们提到了IP协议的报头的格式,但是有几个字段我们还没有谈到。比如16位标识,13位片偏移,3位标志。

  1. 首先我们谈谈IP为什么要分片:
    在我们网络层下面还有数据链路层,显然我们一次传递报文的大小是有限制的,肯定不能想要传多大就传多大,所以提到了一个新的概念,MTU(maximum transmit unit)
    (英语不好,如果写错了,见谅🥺)

下面就是我的windows操作系统的MTU的大小:

当一个IP数据报大于MTU的时候,网络层就会默认帮助我们进行分片操作。

  1. 怎么进行分片操作:

分片其实思想很简单,比如我们吃东西,直接吃不下去,但是把他切成小块小块的就很好吃下去。网络层也是这么干的。

这里就可以解释上面IP报头里面的那几个字段的作用了。

这里很重要

  1. 标识字段:就是判断你们哪些是一家的,当几个报文切片后同时到达一个主机,主机怎么确定那些事一家的,就是通过标识字段。
  2. 偏移量 :就是编号,你切了我在对端得把你重新拼在一起,就是通过偏移量进行拼接,但是有些人要问,偏移量13位,但是总共大小可以到16位,怎么办?如果你能问出这个问题,说明你很有水平 ,这里我们默认的偏移量的单位是8,也就是说我们默认偏移量是在这个值的基础上*8才是我们真正的偏移量。有人问如果偏移量不是8的倍数怎么办,如果你能问出这个问题,那说明你超级会思考,1500(MTU大小)- 20(报头大小)= 1480显然是8的倍数,所以所以我们的报文的大小一定是1480,1480的发,最后省一点一起发,这个时候,你想一下,如果以他们的首地址编号,是不是一定是8的倍数。😯😯😯

注意

IP分片是一个好的解决方案,但是我们不希望IP进行分片,因为如果一个报文丢失,我们整个报文都会直接作废,一个报文都是的概率是k,那么分片后丢失的概率就是1 -(1-k)^ n,学过一天进步1%那套理论的都能够理解这里面的概率相差多大,或者用matplotlib或者自己求导画个图都知道相差很多。

基于分片再谈TCP/UDP协议

如果你看过我的TCP/UDP讲解或者自己了解,可以看看这里,没看过就算了。

我们谈过TCP具有滑动窗口的策略,当时我没有讲为什么要分成一块一块的发,为什么不能直接发呢,现在应该理解了,就是为了减少IP分片的问题。

UDP协议本来就是限制了传输的大小,同时为了防止IP切片的问题,我们在传输UDP报文的时候,也尽量不要超过MTU的大小

总结

IP协议作为TCP/IP协议族的核心,扮演着互联网通信基石的角色。它如同一位尽职尽责的邮差,在网络世界中穿梭,将数据包准确无误地送达目的地。

相关推荐
ling-4515 分钟前
ifconfig 不显示 Linux 虚拟机常规网卡的 IP 地址
服务器·网络·php
菜菜小蒙18 分钟前
【Linux】http 协议
网络·网络协议·http
小柒的博客1 小时前
TCP-UDP-WebSocket-组播-单播
websocket·tcp/ip·udp
钟离墨笺1 小时前
【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)
linux·服务器·网络
黑客K-ing2 小时前
网络安全:利用 IP 查询构建网络安全系统的方法
网络·安全·web安全
搬码红绿灯2 小时前
计算机网络——子网掩码
计算机网络
嘿·嘘2 小时前
第五章 STM32 环形缓冲区
linux·服务器·网络
Craaaayon3 小时前
Docker基础-自定义镜像与容器网络
java·运维·网络·数据库·后端·docker·容器
程序员黄同学3 小时前
请解释 HTTP 中的状态码,常见的状态码有哪些?
网络·网络协议·http