计算机网络(四) | 网路层:IP协议

IP协议

IP协议简介

IP即网际层协议,网络层的主要作用是"实现终端节点之间的通信"。数据链路层的作用实在互连同一数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使在不同的数据链路上也能实现两端节点之间的数据包传输。

IP作用模块(IP寻址+路由控制+IP分包和组包)

IP大致分为三大作用模块:

  • IP寻址
  • 路由控制
  • IP分包和组包

(一) IP地址基础知识

IP地址的定义

IP地址(IPv4)由32位正整数来表示。IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:100.4.5.6。

IP地址的组成

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

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

通过合理设置网络号和主机号,就可以保证在相互连接的网络中,每台主机的IP地址都是唯一的。
那么,如何划分网络号和主机号呢?
根据IP地址的分类

IP地址的分类

过去曾经提出一种划分网络号和主机号的方案,把所有IP 地址分为四类,如下图所示
在这里插入图片描述

  • A类IP地址是首位以"0"开头的地址,从第1位到第8位是网络表示,地址范围是
    0.0.0.0~127.0.0.0,A类地址的后24位是主机标识
  • B类地址是前两位为"10"的地址,地址范围是128.0.0.0~191.255.0.0
  • C类IP地址是前三位为"110"的地址,地址范围192.0.0.0~255.255.255.0
  • D类地址是前四位为"1110"的地址,地址范围是224.0.0.0~239.255.255.255

【关于分配IP地址的注意事项】
为主机分配的IP地址,主机号不能为全0或全1,因为主机号全0表示对应的网络地址,主机号全1的地址通常作为广播地址

特殊的IP地址
  • 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
  • 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
  • 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
  • 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。

在上述的分类中,存在IP地址浪费的问题:
(1)单位一般会申请B类网络(C类连接主机数量有限),但实际网络架设时,连接的主机数量又常远小于65534(B类连接主机数),造成IP地址浪费;同理,A类网络的IP地址也会造成大量的浪费。
(2)当一个单位申请了一个网络号。他想将该网络能表示的IP地址再分给它下属的几个小单位时,如果在申请新的网络就会造成浪费。
为了解决以上问题,引入子网掩码来进行子网划分:

子网掩码

【格式】 子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。
子网掩码也可以使用二进制所有高位1相加的数值来表示,如以上子网掩码也可以表示为24。

子网掩码的作用:

(1)划分A,B,C三类 IP 地址子网: 如一个B类IP地址:191.100.0.0,按A ~
E类分类来说,网络号二进制数为16位网络号+16位主机号。 假设使用子网掩码 255.255.128.0(即17) 来划分子网,意味着划分子网后,高17位都是网络位/网络号,也就是将原来16位主机号,划分为1位子网号+15位主机号。此时,IP地址组成为:网络号+子网号+主机号,网络号和子网号统一为网络标识(划分子网后的网络号/网段)
(2)网络通信时,子网掩码结合IP地址,可以计算获得网络号(划分子网后的网络号)及主机号(划分子网后的主机号)。一般用于判断目的IP与本IP是否为同一个网段。对于网络通信来说,发送数据报时,目的主机与发送端主机是否在同一个网段,流程是不一样的。

网络号的计算方式:

将 IP 地址和子网掩码进行“按位与”操作(二进制相同位,与操作,两个都是1结果为1,否则为0),得到的结果就是网络号。
将子网掩码二进制按位取反,再与 IP 地址位与计算,得到的就是主机号。

全局地址与私有地址

起初,互联网中的任何一台主机或路由器必须配有一个唯一的IP地址,一旦出现IP地址冲突,就会使发送端无法判断究竟应该发给哪个地址。而接收端收到数据包以后发送回执时,由于地址重复,发送端也无从得知究竟时哪个主机返回的信息,影响通信的正常功能。随着互联网的普及,IP地址不足的问题日趋显著,如果一直按现行的方法采用唯一地址的话,会有IP地址耗尽的危险。
于是便出现了私有地址,私有地址的范围是:
在这里插入图片描述
在此范围址外的IP地址称为全局IP。
全局IP地址要在整个互联网范围内保持唯一,但私有地址不需要。只要在同一个域里保证唯一即可。私有IP地址结合NAT技术已成为现在解决IP地址分配问题的主流方式。
在这里插入图片描述

(二) 路由控制

发送数据包时所使用的地址是网络层的地址,IP地址。然而仅有IP地址还不足以实现将数据包发送到对端目标地址,在数据发送的过程中还需要类似于"指明路由器或主机"的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。
路由选择的位置类似于问路的过程:

比如现在我想从学校生活区到广州塔,但由于我并不知道具体路线,此时就要不断的向路人询问,每个路人知道的位置都是有限的(不能把全广州的地图都装在脑子里),但是每个人都有自己熟悉的一个区域,每个人都能告诉我一个大概的方向,我就沿着大概的方向不断走,最后就能找到了广州塔。
每次问路就相当于是一次路由转发,每个人脑子里存储的一些位置信息,就相当于是路由表
广州塔的位置就相当于是目的IP,每个路由器都会根据目的IP在路由表中匹配(按照网段的方式匹配),如果能匹配到,就会按照指定的方向继续转发,匹配不到就转发到默认方向。

在这里插入图片描述

(三) IP分包和组包

数据链路不同,MTU(数据链路的最大传输单元)则不同。
在这里插入图片描述
【IP报文分片和重组】
以太网的默认MTU是1500字节,因此4342字节的IP数据报无法在一个帧当中发送完成。这是路由器将此IP数据报划分成了3个分片进行发送,经过分片后的IP数据报在被重组的时候,只能由目标主机进行,路由器虽然做分片但不会进行重组
在这里插入图片描述
但分片机制也有它的不足,首先,路由器的处理符合加重,其次,在分片处理中,一旦某个分片丢失,则会造成整个IP数据报的作废。
为了解决上述问题,产生了一种新的技术"路由MTU发现",具体内容可阅读《图解TCP/IP》

IPv4首部

通过IP进行通信时,需要在数据的前面加入IP首部信息,IP首部中包含着用于IP协议进行发包控制时所有的必要信息
在这里插入图片描述

  • 版本:4位,表示表示IP首部的版本号,IPv4的版本号为4
  • 首部长度:4位,表示IP首部的长度,单位是4字节,对于没有可选项的IP包,首部长度设置为5。4bit表示最大的数字是15,因此IP头部最大长度是60字节
  • 区分服务:8位,3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于ftp这样的程序,最大吞吐量比较重要。

在这里插入图片描述

  • 总长度:字段长16位,表示IP数据报整体占多少个字节。因此IP包的最大长度是65535字节,但由于IP协议内置了拆包和组包的功能,如果搭载了太长的TCP数据报,此时IP就会分包,每个包来携带TCP的一部分数据

  • 标识:字段长16位,:唯一的标识主机发送的报文,用于分片重组,同一分片的标识值相同,不同分片的标识值不同

  • 标志字段:字段长3位,第一位保留(保留的意思是现在不用,但是还没想好说不定以后要用到)。第二位置为1表示禁止分片,这时候如果报文长度超过MTU,IP模块就会丢弃报文。第三位表示"更多分片",如果分片了的话,最后一个分片置为1,其他是0。类似于一个结束标记。
    在这里插入图片描述

  • 片偏移:字段长13位,是分片相对于原始IP报文开始处的偏移。其实就是
    在表示当前分片在原报文中处在哪个位置。实际偏移的字节数是这个值 * 8 得到的。因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍(否则报文就不连续了)。

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

  • 协议:字段长8位,表示上层协议的类型。

  • 首部校验和:字段长16位,使用CRC进行校验,来鉴别头部是否损坏。

  • 源地址和目标地址:字段长都是32位,表示发送端和接收端的IP地址

解决IP地址不够用的问题(DHCP+NAT)

IPv4首部,IP地址字段长为32位,能够表示的整数范围是42亿9千万,但现如今I由于PC、手机和海量的服务器都需要分配IP地址,导致IP地址已经不够用了,因此需要找到解决办法。

使用动态分配IP地址DHCP

简单来说,就是一个设备上网,就分配IP地址,不上网,就不分配IP地址

NAT简介

NAT(Network Address Translaotr)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的奇数。除转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT技术,因此通过NAPT技术可以实现用一个全局IP地址与多个主机的通信。
NAT技术当前解决IP地址不够用的主要手段,是路由器的一个重要功能;

  • NAT能够将私有IP对外通信时转为全局IP。也就是就是一种将私有IP和全局IP相互转化的技术方法:
  • 很多学校,家庭,公司内部采用每个终端设置私有IP,而在路由器或必要的服务器上设置全局IP;
  • 全局IP要求唯一,但是私有IP不需要;在不同的局域网中出现相同的私有IP是完全不影响的;

那么这就带来了一个问题,如果IP地址重复了,数据包应该送给谁呢?

这就是NAT机制要做的工作

NAT的工作机制

以下图的10.0.0.10主机与163.221.120.9的主机进行通信为例
在这里插入图片描述

  • NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
  • NAT路由器收到外部的数据时,又会把目标IP从202.244.174.37替换回10.0.0.10;
  • 在NAT路由器内部,有一张自动生成的,用于地址转换的表;
  • 当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系

NAT机制的本质,就使用一个全局IP代表一大批内网的设备

那么问题来了,如果局域网内,有多个主机都访问同一个外网服务器,那么对于服务器返回的数据中,目的IP都是相同的。那么NAT路由器如何判定将这个数据包转发给哪个局域网的主机?

这时候NAPT来解决这个问题了。使用IP+port来建立这个关联关系

NAPT工作机制

在这里插入图片描述
主机163.221.120.9的端口号是80,LAN中有两个客户端10.0.0.10和10.0.0.11同时进行通信,并且这两个客户端的本地端口都是1025.此时,仅仅转换IP地址为某个全局地址202.244.174.37,会令转换后的所有数字完全一致。为此,只要将10.0.0.11的端口号转换为1026就可以解决这个问题。路由器会生成一个NAPT路由器的转发表,就可以正确的转换地址跟端口的组合,令客户端A、B能同时与服务器之间进行通信。
这种转发表在NAT路由器上自动生成,例如在TCP的情况下,建立TCP连接首次握手时的SYN包一经发出,就会生成这个表。而后又随着收到关闭连接时发出FIN包的确认应答从表中删除
【NAT的潜在问题】

  • 无法从NAT外部向内部服务器建立连接;
  • 转换表的生成和销毁都需要额外开销;
  • 通信过程中一旦NAT设备异常,所有的TCP连接也都会断开;

IPv6协议

使用IPv6协议是解决IP地址不够用的终极方案,IPv4的地址长度是4字节(32位比特),IPv6的地址长度则是16字节(128比特)。IPv6的地址空间是IPv4的7.923x10^28倍,从IPv4切换到IPv6极其耗时,需要将网络中所有主机和路由器的IP地址进行重新设置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值