IP
互联网时代的开始,IP已经成为网络的代名词。这个起源于1969年阿帕网的“朴素青年”,在那暗流涌动的网络年代,也在那混沌迷蒙的年代,经过层层厮杀,击退了一个又一个的强大敌人(比如:ATM),最终完成了他的大业,统一了网络通信。如今,他已成为生活的一部分,成为人们口中津津乐道的话。从IPv4到IPv6,再到如今神秘莫测的SRv6,IP始终砥砺前行,继续解决网络通信一个又一个难题。
Why IP
网络通信为什么需要IP?或者说为什么出现跟IP类似的协议?简而言之,现在有两个人想进行交流,首先我们要知道各自的名字,通信双方具体对象;其次,就是定位,知道对象后够确定对方的位置。因此需要出现一个标识——IP地址,确定对象和定位,还需要路由——通过定位找人的具体方式。当然,这个标识不一定是IP地址,也可以是其他协议的标识,只不过,IP(Internet Protocal)完成了他的伟业,干掉了所有对手。(个人观点)
题外话
不讨论SR,因为我不会,哈哈哈哈哈。
IPv4到IPv6,其实IP目前“公认”也就这两版本,那有没有IPv5、IPv9这些稀奇古怪的东西,可能都在实验室吧。
对历史遗留感兴趣,看看RFC 1190、1475、1347等。
IPv4
1. IPv4报头格式
“只闻其声,未见其人”,作为互联网的功臣,声名远扬,就让我们撕开名声的外壳,看看IPv4的真面目。
报头格式自己画有点丑,个字段作用如下:
-
verson(版本号,4bit),标志IP第几个版本号,IPv4就是0100,v6就是0110,目前就是这两种。
-
header length(头部长度,4bit),单位是4Byte,IP报头大小 = 长度 * 单位大小,IPv4报头大小为20~60Bytes,且为4的倍数。
-
DSCP+ECN(一共8bit,原本属于8bit的TOS,经过修改分成“区分服务代码点”+“显示拥塞通知”),这个作用就是QoS,对普通用户基本没作用,因为运营商除了给你限速,基本能保障上网且不太卡就行,企业内网运用广泛,所以选择不讲(主要是不会QoS的具体规则),详情看RFC 2474。
-
total length(总长度,包括“有效载荷”+“报头长度”,16bit),单位是 1Byte,因此最长为65535 Bytes。
-
identifier(标识符,16bit),配合分片使用,即一个数据包为2000 Bytes,经过MTU为1500的链路,数据包就需要分片。帮助设备识别一个数据包的分段,起到标识作用。
举例:A被分成1、2,通过标识标记1、2,表明都属于A。 -
flag(标记字段,3bit),配合分片使用。
位置 | 作用 |
---|---|
第一位 | 没用 |
第二位(DF,dont fragment) | 置为1时,不允许分片,配合ICMP发现MTU;正常情况,允许分片 |
第三位 (MF,more fragment) | 置为1时,表示还有分片;置为0时,表示最后一个数据包 |
- fragment offset(片段位移,13 bit),标志分段数据包跟起始数据包的相对位置,单位为8 Bytes。目的端设备,可以根据这个字段,重新组装接收时间失序的报文。
题外话
片段位移一共能组装起来:2^13*8 Bytes大小的数据包,而一个IP包最大能组装2^16 Bytes
的数据包,大小刚好一致,如果一个包被分成1 Byte大小,可能会不够,但是实际上一个数据
至少是20Bytes(IP头部),因此不用担心片段位移不够的情况。
- Time To Live(TTL,生存时间,8bit),最大为255,初始值由软件或者操作系统自定,每经过一台路由器,TTL值减1。当TTL减少为0时,默认把IP报文丢弃。
TTL值两大作用:
1. 防止路由环路时,数据包被无限转发,造成网络故障(比如:带宽打满)
2. 配合其他协议,完成其他功能(如:trace功能、HSRP和BGP等协议的TTL 安全功能)
- Protocal(协议,8 bit),索引字段,标志上层协议或者同层协议的协议号。
- header checksum(头部校验和,16bit),校验和的作用就是检查数据包传输过程中是否出现差错,头部校验和仅针对IP头部进行校验。
- Source & Destination Address(源目地址,各32 bit),主机与主机通信标识,发送方和目的端的地址,具体格式后文叙述。
- Option(可选项,长度不定,里面的功能是可选可不选)
Option | 功能 |
---|---|
松散源路由选择 | 数据包按照IP序列传送(人为给定),但是相邻两个IP地址可以跨多台路由器 |
严格源路由选择 | 数据包按照IP序列传送(人为给定),但是相邻两个IP地址必须严格按照路由转发,即路由下一跳要在列表中,换句话说路由器要相邻 |
记录路由 | 类似路由追踪功能,但这里记录的是出站接口的IP,trace则是入站接口的IP |
时间戳 | 记录到达时间 |
- Padding(填充项,长度未知),通过填0,仅帮助Option字段补齐32位,装逼的说法就是补充4个八位组。为什么规定是32,可能是CPU架构决定这个位数更加合理吧。
实际报文格式
拨开面纱,发现IPv4格式朴素至极,甚至说毫无亮点。
2. IP地址
IP地址类别
首先,我们的IP地址,一共32位,由两个部分组成:网络位+主机位,网络位标识所在链路,主机位标识链路上具体主机。
通过掩码区分网络位和主机位,如:
192.168.10.1 /24,网络地址为192.168.10.0/24;
同一网络的主机的网络地址相同
特别注意
- 常用IPv4地址书写格式,点分十进制,即:192.168.10.1
- 常用IPv6地址书写格式,冒号分十六进制,即,::1
- 机器读取地址,通过二进制格式,如:11000000 10101000 00001010 00000001(192.168.10.1,所以人还是看看十进制比较舒服)
- IP地址和掩码进行与操作,计算网络地址(与:1和1相与为1,其他为0,机器的操作都是基于二进制)
说了许多题外话,IP地址一共分为5类
快速记忆法,按头八位来看
- A类地址:0.0.0.1~127.255.255.255, (0xxxxxxx),掩码: /8
- B类地址:128.0.0.0~191.255.255.255,(10xxxxxx),掩码:/16
- C类地址:192.0.0.0~223.255.255.255,(110xxxxx),掩码:/24
- D类地址:224.0.0.0~239.255.255.255,(1110xxxx)
- E类地址:240.0.0.0~247.255.255.255(11110xxx)
首先对于我们而言,基本情况都是单播为主,因此A、B、C三类地址用的最广泛。通过掩码可以看出A类地址主机位最多,B类主机位中等,C类主机位置最少。
私有地址
IP地址划分类别之外,还为A、B、C三类地址划分了公有地址和私有地址
- 公有地址就是大家都可以访问到的IP地址,在Internet/公网上的地址,因此 IPv4地址枯竭,其实指的是公有地址,公网唯一标识,类似于身份证。
- 私有地址就是在私人区域内(局域网)的地址,类比于名字,在家里通过名字找你,放到城市里用身份证找你。因此,私有地址随意性较大,在范围内地址自行决定使用。
类别 | 私有地址范围 |
---|---|
A | 10.0.0.0~10.255.255.255 |
B | 172.16.0.0~172.31.255.255 |
C | 192.168.0.0~192.168.255.255 |
私有地址汇总
- A类地址:10.0.0.0 /8
- B类地址:172.16.0.0 /12
- C类地址:192.168.0.0 /16
3.VLSM/子网划分
为什么需要子网划分?为什么出现VLSM?一般课堂或者视频上是这么说的:
总结一下:通过牺牲主机位,换取更多网络位,保证网络的灵活性。网络的灵活性,大概是大部分人避而不谈的事情,可用IP地址一样,处于同一个网络地址和不同网络地址的区别在于,访问和控制权限的精细化,具体应用就是ACL。
举一个例子,顺便简单走一下划分子网的流程:
方案应该有多种,分享一下我的想法:
- 确定最大主机数,确定主机位 2^n - 2 >= 29,因此n为5
- 确定子网数量,2^(8-5) = 8,子网数为8,大于3因此可用
- 确定子网范围
- 192.168.100.1~192.168.100.30(网络地址和广播地址去掉,广播地址后面再说)
- 192.168.100.33~192.168.100.62
- 192.168.100.65~192.168.100.94
- 192.168.100.97~192.168.100.126
- 192.168.100.129~192.168.100.158
- 192.168.100.161~192.168.100.190
- 192.168.100.193~192.168.100.222
- 192.168.100.225.~192.168.100.224
然后,从中任取三个地址范围即可。这是我的惯用思路,如果有更快的方法,请各位大佬教教我。如果,大家处于面试阶段,还会问子网内的广播地址是多少,或者划分子网,或者求出网络地址,想要临危不惧,只能多练,练出惯性思维,最起码要把128、192、224、240、248转后的二进制位数记住。
4. CIDR
CIDR,即无类别域间路由,或者叫超网。CIDR是基于VLSM(可变长子网掩码)为基础,实现对路由跨类聚合。按照规定,A、B、C三类地址拥有固定掩码,但是随着网络规模的爆炸,实际应用特别麻烦。
这里针对公有地址,私有地址随便划分。按类划分出现以下两个问题:
- 主机地址数量相差太大。C类地址只拥有8个主机位,即256;B类地址拥有16位,65535。如果一个地区需求500个主机地址,那么就要重新申请一个B类地址,公有地址申请难上加难。
- 路由表规模爆炸。网络位数越多,路由条目数量更加庞大,以C类为例32*65535,大概是100w条,肯定要跨掩码聚合。
子网划分和CIDR区别在于网络位置的移动,向左移就是跨类聚合(主机位借网络位),向右移(网络位借主机位)。
5. 三种IP地址类型
讲了那么久的IP,介绍一下三种类型方式
- 单播,点对点
- 广播,一对多
- 组播,一对多
单播
单播就是一对一通信,IP提供一条逻辑上点对点的通信。利用A、B、C三类地址,完成单播(就是源目IP),实现方式——>路由——>路由条目(静态、动态、直连)。
广播
广播就是一对多,所有人都要收到。实际上,广播生效范围仅链路有效,说人话就是同一网段(网络或子网)下所有主机都需要接收并处理广播,因为路由器不转发广播,不会在其他链路生效,交换机则是通过VLAN隔离广播域。(说人话:市场部和销售部处于不同网络,市场部的广播,销售部收不到)
组播
组播就是一对多,组播成员都要收到。作用范围:处于组播组里,可跨链路生效,即在多个网络生效,可通过路由传播。
实现方式,以下两种缺一不可,除非组播源和组播成员处于同一网络可不用路由:
- 跨网段传播,即路由,通过PIM产生的组播树(具体内容这里不涉及)
- 同一网段内,通过IGMP实现。
总结
发现IPv4的内容也是错综复杂,作为入门基础课,也作为重要一课,需要从头到尾理顺,重新复习有了许多新的体会。不过像组播,属于后面学习的内容,学了作用也不是很大,抱着交流的态度,后面会试着写写。这次的内容也花了两三天来写,如有不对,敬请指正,下一章开始IPv6!