IP(Internet Protocol)网际协议,是TCP/IP协议的核心部分,虽然IPV4终将会被IPV6替代,但是目前IPV4仍然是IP协议的主流版本。
MTU(Maximum Transmission Unit最大传输单元)是在IP层下面的MAC协议中的概念,MAC协议我们可以理解为是物理层的一些协议,它位于IP协议的下层,那么在发送数据时相当于是用户数据 + 应用层协议报头(如HTTP请求报头)作为有效载荷交给传输层(如TCP协议),TCP协议再将TCP报头 + 应用层传来的数据下交给IP层,IP层再将IP协议首部 + TCP层传来的TCP报文交付给MAC帧。因此每个MAC帧其实是IP协议首部 + IP层的有效载荷。而MAC帧是有长度限制的,所以就要求IP数据报向下交付时并不是随心所欲想发多长就发多长,如果MAC帧要求MTU为1500字节,而IP数据包总长度有2000字节,那么就需要分片,将原有的IP数据包分成两片,依次发送,对端的主机在接收后,由对端的IP层再完成组装。我们在Linux环境下可以使用ifconfig命令查看到MTU。
分片和组装对于上层TCP/UDP和下层的MAC都是透明的,即上层和下层都不知道IP层将数据包进行了分片操作,因此分片和组装操作会由发送方IP层和接收方IP层自动完成。但是分片意味着需要把一份数据变为多组数据传输,并且在对端还需要进行组装,这样会大大降低网络传输效率以及提升错误风险,因此在传输过程中应当尽量避免分片,即尽量不要发送超过MTU长度的IP数据报。
IPV4中我们由32位正整数来表示IP地址,计算机内部会直接以二进制来保存IP地址,不过人并不善于记忆二进制整数,所以我们采用点分十进制来记录IP地址:即将32位IP地址每8位一组,分成4组,组间用’ . '进行分隔,再将每组转换为十进制。
因此我们可以直接算出,在IPV4标准下最多有2 ^ 32 = 4292967296个IP地址,但是能被人们使用的远远不足这个数字。(比如某些IP地址是有特殊作用被预留的,某些设备如路由器会占有多个IP地址)
IP地址由网络标识(网络地址)和主机标识(主机地址)两部分组成。
网络号:保证互相连接的两个网段具有不同的标识。
主机号:保证在同一个网段中,两台主机具有不同的标识。
IP地址划分为五个级别,分别为A类、B类、C类、D类和E类(一直没有使用过),所以目前我们所能见到的IP地址只有A、B、C、D四类。划分的依据就是IP地址从第1位到第4位的比特位。
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
引入子网掩码:
随着Internet的发展,使用前四位是否为1来分类的方案弊端开始显现:那就是很多子网的申请者都会去申请B类网络地址,因为A类根本用不完,而C类不够用。导致B类的网络地址很快就被分配完了。而申请了A类的网络又会浪费大量的IP地址,在这种情况下,人们提出了新的划分方案:CIDR(Classless Interdomain Routing无类型域间选路)
将IP地址中的主机地址全设置为0,即该局域网的网络号,这个IP地址代表这个局域网。
将IP地址中的主机地址全设置为1,可以变成广播地址,这个广播地址可以给同一个链路中互相连接的所有主机发送数据包
127.*的IP地址用于本地环回测试,通常是127.0.0.1
RFC1918规定了组建局域网的私有IP地址的规范:
10.* 前8位是网络号,共有16,777,216个地址
172.16.*~172.31.* 前12位是网络号,共有1,048,576个地址
192.168.* 前16位是网络号,共有65,536个地址
上述范围内的IP地址都是私有IP,不在上述范围内的IP则为全局IP地址(公网IP地址)。
IPv6由40个字节的固定头部和可变长的扩展头部组成。
参考:(210条消息) IP协议详解_长岛冰茶去冰的博客-CSDN博客_ip协议