IP的作用
IP相当于OSI参考模型中的网络层,网络层主要作用是实现终端节点之间的通信。具体来说,数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递,然而,一旦跨越多种数据链路,就需要借助网络层了,网络层可以跨越不同的数据链路。
- 网络层与数据链路层的关系:数据链路层提供直连两个设备之间的通信功能,与之相比,作为网络层的IP则负责在没有直连的两个网络之间进行通信传输。
IP大致又分为三大作用模块,分别是IP寻址、路由(最终节点为止的转发)以及IP分包和组包。
IP地址
MAC地址用来标识同一个链路中不同计算机,IP地址则是用来标识网络层中主机的通信地址。
- IP地址:一个32位的正整数(IPV4),由网络和主机两部分标识构成。网络标识在数据链路每个段配置不同的值,相同段内相连的主机必须有相同的网络地址;主机标识在用于标识同一个网段内不同的主机。
- IP地址的分类:IP地址分为网络和主机两部分组成,那么,从第几位到第几位是网络标识,又是从第几位到第几位是主机标识呢?目前,对于IP地址的划分,主要有两种划分方式;IP分类地址和子网掩码区分
- IP 地址分类:IP地址分为四个级别,分别为A、B、C、D类。
- A类地址:首位以“0”开头的地址,从第一位到第八位是网络标识,后24位相当于主机标识,即:0.0.0.0~127.0.0.0是A类地址。一个网段内可容纳的主机地址上限为16777214(去掉全0和全1保留地址)。
- B类地址:前两位以“10”开头的地址,从第一位到第十六位是网络标识,后16位相当于主机标识,即:128.0.0.0~191.255.0.0是B类地址。一个网段内可容纳的主机地址上限为65534(去掉全0和全1保留地址)。
- C类地址:前三位以“110”开头的地址,从第一位到第二十四位是网络标识,后8位相当于主机标识,即:192.0.0.0~239.255.255.0是C类地址。一个网段内可容纳的主机地址上限为254(去掉全0和全1保留地址)。
- D类地址:前四位以“1110”开头的地址,从第一位到第三十二位是网络标识,即:224.0.0.0~239.255.255.255是D类地址。D类地址没有主机标识,常被用于多播。
- 广播地址:广播地址用于在同一个链路中相互连接的主机之间发送数据包。将IP地址中的主机地址部分全部设置为1,就成了广播地址。
- 本地广播:在本网络内的广播叫做本地广播。例如:网络地址为192.168.0.0/24的情况下,广播地址为:192.168.0.255.这个广播地址的IP包会被路由器屏蔽,不会到达192.168.0.0/24以外的其他链路上。
- 直接广播:在不同网络之间的广播叫做直接广播。例如,网络地址为192.168.0.0/24的主机向192.168.1.255/24的目标地址发送IP包,收到这个包的路由器,将数据转发给192.168.1.0/24,从而使得192.168.1.1~192.168.1.254的主机都能收到这个包。由于直接广播有一定的安全问题,多数情况下会在路由器上设置为不转发。
- 子网掩码:直接使用A类或者B类地址,非常浪费资源,而通过子网掩码,能够实现比A、B、C更小粒度的网络。这种方式,实际上就是将原来A、B、C勒种的主机地址部分用作子网地址,将原网络分为多个物理地址的一种机制。引入子网以后,一个IP地址,就有了两种识别码,一是IP地址本身,另一个是表示网络部的子网掩码。子网掩码是一个32位的数字,它对应IP地址网络标识部分的位全为1,对应的IP地址主机标识的部分则全部为0.由此,一个IP地址不再受限于自己的类别,而是可以用这样的子网掩码自由的定位自己的网络标识长度。子网掩码的标识方式有两种:
- IP地址 172. 20.100. 52
子网掩码 255.255.255.192
网络地址 172. 20.100. 0
子网掩码 255.255.255.192
广播地址 172. 20.100. 63
子网掩码 255.255.255.192 - 另一种方式是后缀法:它在每个IP地址后面追加网络地址的位数,用/隔开
IP地址 255.255.255.52/26
网络地址 172. 20.100. 0/26
广播地址 172.20.100.63/26
- 全局地址和私有地址:起初,互联网中任何一台主机或者路由器都配有一个唯一的IP地址,然而,随着互联网的迅速普及,IP地址不足的问题日趋显著。于是,出现了一种新的技术,他不要求为每一台主机或者路由器分配一个固定的IP地址,而是在必要的时候只为相应数量的设备分配唯一的IP地址。于是出现了对应全局地址的私有网络的IP地址。
- 私有地址:私有地址的范围如下:
10.0.0.0 ~ 10.255.255.255 (10/8) A类
172.16.0.0 ~ 172.31.255.255 (172.16/12) B类
192.168.0.0 ~ 192.168.255.255 (192.168/16) C类 - 全局地址:不在私有地址范围的IP地址均为全局地址。
私有IP最早没有计划连接互联网,而只用于互联网之外的独立网络,然而,当一种能够互换私有IP和全局IP的NAT技术诞生以后,配有私有地址的主机与配有全局地址的互联网主机也能实现通信。
路由控制
发送数据包时使用的地址是网络层的地址,即IP,然而仅仅有IP地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标主机。保存这种信息的就是路由控制表。
-
IP地址的网络地址部分用于进行路由控制。路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。下图就是通过路由控制吧将IP发送到指定目标地址的过程。
路由控制表分为两种,一种是管理员手动设置的,称为静态路由控制,另一种是路由器与其他路由器相互交换信息时自动刷新,称为动态路由控制。
IP报文的分片与重组
- 为何需要进行分片?因为网络层需要对数据链路层进行抽象,而数据链路不同,他们的MTU(最大传输单元)都不尽相同,IP属于数据链路的上一层,它必须不受限于不同数据链路层的MTU大小。为了让IP包能在不同的数据链路中进行传输,所以必须要对IP进行分片处理。例如,以太网默认的MTU是1500字节,因此,4342字节的IP数据报无法再一个帧中发送完成,这时,路由器或者主机将此IP数据报划分成3个分片进行发送。
- IP报文分片在网络层进行,由路由器进行;经过分片之后的IP数据报在被重组的时候,只能由目标主机进行,路由器虽然能做分片,但不会进行重组。因为现实中,无法保证IP数据报是否经过同一个路径传送,拆分之后的每个分片都可能会在途中丢失,即使在途中某一处进行重组,如果下一站再经过其他路由时还会面临被分片的可能,这会给路由器带来多余的负担,也会降低网络传送效率。所以,在目标主机端进行重组IP分片称为现行规范。
- 路径MTU发现
分片机制也有着他的不足,首先,路由器的处理负荷加重,因为路由器在现代网络中负荷越来越重,只要允许,对IP数据包的分片处理,尽量由主机进行,而不是路由器进行;其次。在分片处理中,一旦某一个分片丢失,则会造成整个IP数据报作废。为了应对这些问题,产生了“路径MTU发现”技术。 - 路径MTU发现是指从发送端主机到接收端主机之间不需要分片时的最大MTU大小,即路径中存在的所有数据链路最小的MTU。而路径MTU发现从发送主机按照路径MTU的大小将数据报分片后进行发送。进行路径MU发现后,就可以避免在中途的路由器上进行分片处理。
- 路径MTU发现的工作原理:
1,发送时IP首部的分片标志位设置为不分片。超过数据链路的最大MTU时,也不分片,直接丢弃该包;
2,通过一个ICMP的不可达消息将数据链路上的MTU的值发送给主机。
3,下一次,从发送给同一目标主机的IP数据报获得ICMP所通知的MTU值以后,将他设置成当前MTU,发送主机根据这个MTU对数据报进行分片处理。如此反复,直到数据报被发送到目标主机为止没有再收到任何ICMP,就认为最后一次ICMP所通知的MTU即是一个合适的MTU值。
需要注意的地方是:UDP中没有重发处理。应用在发送下一个消息时会被分片。具体来说,就是指UDP层面传过来的“UDP首部+UDP数据”在IP层被分片,对于IP,它并不区分UDP首部和应用的数据。所有分片到达目标主机后进行重组,在传给UDP层;在TCP中情况则不一样:由于TCP是可靠性传输,具有重发机制,数据报被丢弃后会被重新发送。TCP负责将数据分成IP层不会再分片的粒度以后再传给IP层。IP层不做分片处理了,接收端主机不需要进行重组,数据被原样发送给接收端主机的TCP层。
IPv4首部
IPv4首部格式如上图所示。介绍一些主要字段:
- 版本(version):4比特构成,表示标识IP首部的版本号。IPv4的版本号即为4,IPv6即为6。
- 首部长度:4比特构成,表明IP首部的大小,单位是4字节(32比特)。
- 总长度:16比特,表示首部与数据部分结合起来的总字节数,IP包的最大长度为(2的16次方)65535字节。
- 标识:16比特,由于分片重组,同一个分片的标识值相同,不同分片的标识值不同。
- 标志:3比特,表示被分片的相关信息
比特 含义
0:未使用,现在必须是0
1:表示是否可以进行分片:0-可以分片,1-不可以分片
2:包被分片的情况下,表示是否为最后一个包。0 -最后一个分片中的包,1-分片中段的包 - 片偏移:13比特,用于标识被分片的每一个分段相对于原始数据的位置
- 生存时间:8比特,是指包可以中转多少个路由器的意思,每经过一个路由器,TTL会减1,直到变成0则丢弃该包。
- 协议:8比特,表示IP首部的下一个首部隶属于哪个协议。
- 首部校验和:16比特,该字段只检验数据报的首部,不校验数据部分,主要用来确保IP数据报不被破坏。
- 源地址:32比特的发送端IP地址;
- 目标地址:32比特的接收端IP地址;
- 可选项:长度可变。通常只在进行试验或者诊断额时候使用。
- 填充:再有可选项的情况下,首部长度可能不是32比特的整数倍,为此,通过向该字段填充0,调整为32比特的整数倍。
- 数据:存入数据。将IP上层协议的首部也作为数据进行处理。