0. 介绍
本文源自《图解TCP/IP》第四、五章读书笔记。一篇文章让你了解IP协议。
阅读的时候,注意一般知识点结构分成以下四部分:
- 这个技术/协议产生的背景
- 定义
- 作用
- 应用的例子
个人感觉这样记录 有助于加深记忆和理解。
IP协议负责将数据包发送给最终目标计算机,能够让世界上任何两台计算机进行通信。
文章介绍IP的主要功能及其协议具体内容的知识点。
1. 定义
IP(Internet Protocol)即网络之间互连的协议。
IP相当于OSI参考模型的第三层——网络层。网络层的功能是基于IP地址进行不同网络系统间的路径选择。
IP作用:对不同数据链路的相异特性进行抽象化,在复杂的网络环境中将数据包发给最终的目标地址。
如果以上内容感觉有点不知所言,可以参考下OSI模型中 网络层与数据链路层的关系:
网络层的下一层——数据链路层的作用是在同一数据链路的节点之间进行数据传递。通过使用接收系统的MAC地址来寻址,将比特信息封装成数据帧Frame。
但是不同网络,如以太网、分组交换网等,由于它们所传送数据的基本单元(“帧”)的格式不同,它们相互之间不能互通。而IP协议把各种不同“帧”统一转换成“网协数据包”格式,使所有各种计算机都能在因特网上实现互通。
数据链路层提供直连同一网络下的两个设备之间的通信功能。网络层的IP则负责在两个不同网络网络之间进行通信传输。
例子:出去旅行。机票和火车票只在特定区间有效(数据链路)。为了到达目的地,你需要一个全程的行程表(网络层)。
2. IP基础知识
三大模块:IP寻址、路由、IP分包与组包。
2.1 IP的两大功能
- 路由控制
含义:指分组数据发送到最终目标地址的功能。
作用:即使网络非常复杂,通过路由控制就可以确定到达目标地址的通路。
例子:坐火车,每到一站再向车站工作人员打听接下来该坐什么车。“各跳之间无计划传输”。
火车-数据链路,旅客-IP数据包,车站工作人员-路由器。
路由控制表:所有主机都维护着一张路由控制表(Routing Table),记录了IP数据在下一步应该发给哪个路由器。IP包根据这个路由表在各个数据链路上传输。 - 数据链路的抽象化
IP对不同数据链路进行了抽象。那么不同数据链路之间最大的区别是:他们各自的最大传输单位(MTU,Maximum Transmission Unit)不同。
IP会进行分片处理(IP Fragmentation),将较大的IP包分成多个较小的IP包。
从网络层上看,可以忽略数据包在各个数据链路上的MTU,只需要按照原地址发送的长度接收数据包。
2.2 IP属于面向无连接型
无连接型含义:发包之前,不需要建立与对端目标地址之间的连接。上次如果有需要发送给IP的数据,该数据会立即被压缩成IP包发出去。
缺点:产生冗余的通信。
为什么IP要采用面向无连接?
- 简化
面向连接相对复杂,管理每个连接本身就是一个很繁琐的事情。 - 提速
每次通信之前都要事先建立连接,会降低处理速度。需要有连接时,可以委托上一层提供此项服务。
2.3 IP地址的基础知识
2.3.1 IP地址(IPv4地址)
定义:用32位二进制数来表示。以每8位为一组,分成4组,每组用“.”隔开,再将每组数转成十进制数。
规则:
- 最多允许43亿台(2^32)计算机连接到网络。
- 每一块网卡(NIC)都得设置IP地址。
- IP地址由网络和主机两部分标识而成。
- 网络标识在数据链路的每个段配置不同的值,同段内的主机的网络地址是相同的。
- 主机标识不允许在同一网段内重复出现。
- 通过设置网络地址和主机地址,保证了整个互联网中主机的IP地址都是*唯一的。
2.3.2 IP地址的分类
- A类地址
定义:首位0开头,后24位是主机标识
网络地址范围:0.0.0.0~127.0.0.0
一个网段内可以容纳的主机上限是2^24-2个 - B类地址
定义:前两位是10的地址,后16位是主机标识
网络地址范围:128.0.0.1~191.255.0.0
一个网段可以容纳的主机上限是2^16-2个 - C类地址
定义:前三位是110的地址,前24位是网络标识,后8位是主机标识。
网络地址范围:192.0.0.0~239.255.255.0
一个网段内可容纳的主机地址上限是2^8-2个(254个) - D类地址
定义:前四位是1110的地址,前32位是网络标识
网络地址范围:224.0.0.0~239.255.255.255
D类地址没有主机标识,常被用于多播 - 关于分配IP主机地址的注意事项:
主机地址不可以全部为0或全部为1。
全部为0标识对应的网络地址或IP地址不可获知。
全部为1的主机地址通常作为广播地址。
所以以上每个网段的主机数量上限是2^n-2个。
2.3.3 广播地址
广播地址定义:IP地址的主机标识全部设置为1.
广播定义:向某个网段的广播地址发送IP包,这个网段的所有主机都能收到这个包,由主机IP之上的一层去判断是否接收数据。
缺点:给毫无关系的网络或主机带来影响,造成不必要的流量。
2.4 子网掩码
作用
理论上B类网络一个链路允许65000多台计算机连接。然而实际网络架构中,一般不会有在同一连路上连接65000多台计算机的情况。
因此,直接使用A\B\C类地址,有点浪费资源,人们开始采用一种新的组合方式减少地址空间的浪费。
子网掩码可以通过子网网络地址细分出比A\B\C类更小粒度的网络。
定义
子网掩码用二进制方式表示,也是32位二进制数字,
规则
1表示IP地址的网络地址对应位。
0表示IP地址的主机地址对应位。
特点
子网掩码可以灵活指定网络标识的长度,从而网络粒度更细。
2.4.1 CIDR(Classless Inter-Domain Routing,无类型域间选路)
定义
是将好几个IP网络结合在一起,使用一种无类别的域际路由选择算法,可以减少由核心路由器运载的路由选择信息的数量。
“无类型”指不考虑IP地址所属的类别,路由的策略完全基于整个32bit IP地址的掩码来操作。
作用
A\B\C类地址的划分粒度太大,导致地址空间严重缺乏。根据CIDR可以把多个C类地址划分到一个较大的网络内,有效利用了当前IPv4地址,同时通过路由集中降低了路由器的负担。
2.4.2 VLSM(Variable Lenght Subnet Mast,可变长度子网掩码)
定义
可以随机修改组织内各个部门的子网掩码长度的机制。
背景
CIDR采用固定长度的子网掩码机制,在一个网络下,有些部门可能有500台主机,另一些部门可能只有50台主机,通过全部采用统一标准,就难以架构一个高效的网络结构,因此提出组织内要使用可变长度的的IP地址分配方式。
作用
VLSM是将大范围的IP网络划分成多个小范围的IP网络,为某一个单位或企业的不同部门对内可显示不同的网络,对外可显示同一个IP网络。
CIDR和VLSM技术相对缓解了全局IP地址不够用的问题。但是IP地址的绝对数本身有限的事实无法改变,因此后面出现了IPv6地址。
2.5 全局地址与私有地址
背景
起初互联网中任何一台主机或路由器都必须有一个唯一IP地址。随着互联网迅速普及,IP地址不足。于是出现了新技术:不要求每一台主机或路由器分配一个固定IP地址,而是在必要的时候为相应数量的设备分配唯一的IP地址。
规则
私有地址有规定一个范围:
A类:10/8
B类:172.16/12
C类:192.168.0.0~192.168.255.255
在此之外的IP地址称为全局IP。
例子
学校、家庭、公司内部的终端设置私有IP,而在路由器(宽带路由器)或必要的服务器上设置全局IP。全局IP在整个互联网范围内保持为宜,但私有地址不需要,只要在同一个域内保证唯一即可。
全局地址由谁决定
ICANN(Internet Corporation for Assigned Names and Numbers,互联网名称与数字地址分配机构)。负责管理全世界的IP地址和域名。
比如:对于FTTH和ADSL的服务,网络提供商直接给用户分配全局IP地址,并且用户每次重连时都可能法神个变化。这时IP地址由提供商维护,不需要用户亲自申请。
2.5 路由控制
作用:仅仅有IP地址不足以将数据发向目标地址,在数据发送过程中需要“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表(Routing Table)。该表是由一个“路由协议”(有别于IP协议)制作而成的。
2.5.1 路由控制与IP地址
- 默认路由
- 主机路由
- 环回地址
同一台计算机的程序之间进行网络通信,使用一个特殊IP地址 127.0.0.1作为环回地址,与该地址等价的是localhost主机名。使用这个IP或主机名,数据包不会发向网络。
2.5.2 路由控制表的聚合
又称路由汇总(Aggregation).
作用:路由表越大,管理它需要的内存和CPU也就越大,而且查找路由表的时间就越长,导致转发IP数据包的性能下降。如果要构建大规模、高性能网络,需要尽可能削减路由表的大小。
利用网络地址的比特分步进行分层配置。对内即使有多个子网掩码,对外呈现出的也是同一个网络地址。
2.6 IP对数据的处理
背景&作用
每种数据链路的MTU之所以不同,是因为每个不同类型的数据链路的使用目的不同,可承载的MTU也就不同。
IP数据传递到下一层数据链路层时,可能需要进行分片处理(IP Fragmentation)。
规则
按照路径中存在的所有数据链路中 最小的MTU发送,可以避免中途的路由器进行分片处理。
3. IPv6
定义
8个16位,共128比特,是IPv4长度的4倍。
作用
从根本上解决IPv4地址耗尽的问题。
特点
- 依旧适应互联网分层构造,路由控制上也尽可能避免路由表膨大
- 性能提升,简化首部,路由器不再分片,通过路径MTU只由发送端主机进行分片处理
- 即插即用
- 采用认证与加密功能
- 多播、Moblie IP比IPv4更顺利使用
规则
每16位比特为一组,用":"隔开。出现连续的0时可以省略,用"::"表示。一个IP地址只允许出现一次“::”。
4 IP包的具体内容
4.1 IPv4首部
IP首部包含着 用IP协议进行发包控制时 所有的必要信息。
首部以每32比特(8字节)为一个单位:
- 版本号:4比特,IPv4即值为4
- 首部长度(IHL:Internet Header Length):IP首部大小。4比特,单位是4字节。值为5时,IP首部长度为4*5=20字节。
- 区分服务(TOS:Type Of Service):表明服务质量。8比特,现已划分为DSCP和ECN两个字段。
- 总长度(Total Length):表示IP首部与数据部分的总字节数。该字段长16比特。因此IP包最大长度是65535字节。
- 标识(ID:Identification):用于分片重组,该字段长16比特。同一分片的标识值相同,不同分片的标识值不同。
- 标志(Flags):表示包被分片的相关信息,该字段长3比特。可以表示 是否使用分片、是否分片的最后一个包。
- 片偏移(FO:Fragment Offset):标识被分片的每一个分段相对于原始数据的位置。该字段长13比特。单位是8字节,因此最大可以表示8* 2^13 =65536字节的位置。
- 生存时间(TTL:Time To Live):指可以中转多少个路由器,没经过一个路由器,TTL会减1,该字段长度为8比特。因此一个包的中转路由次数不会超过2^8=256次。由此可以避免IP包在网络内无限传递的问题。
- 协议(Protocol):表示IP首部的下一个首部属于哪个协议(其实就是上层协议)。该字段长度8比特。
- 首部校验和(Header Checksum):按照一定算法校验数据报的首部,不校验数据部分,主要来确保IP数据报不被破坏。该字段长度16比特。
源地址(Source Address):32比特,表示发送端IP地址。
目标地址(Destination Address):32比特,表示接收端IP地址。
- 可选项(Options):
长度可变,通常只用于实验或诊断时使用。包含如下几点信息:
- 安全级别
- 源路径
- 路径记录
- 时间戳
- 填充(Padding):再有可选项的情况下,首部长度可能不是32比特的整数倍。为此,通过向该字段填充0,调整为32比特的整数倍。
4.2 IP包数据部分
OSI模型网络层之下 数据链路层的数据帧 就是IP包的数据部分。IP首部是对数据进行包装,增加了网络层的控制信息。
5 IP协议相关技术
IP协议除了让最终目标主机收到数据包,还要求能够解析主机名称和MAC地址,以及数据包在发送过程中异常情况处理的功能。
本章介绍了作为IP的辅助和扩展规范的DNS、ARP、ICMP以及DHCP等协议。
5.1 仅凭IP无法完成通信
需要将IP上层的应用层用到的地址映射为IP地址。
同时还需要知悉IP下层的数据链路层的MAC地址。
5.2 DNS
定义
Domian Name System,管理主机名和IP地址之间对应关系的系统,将网站地址转换成具体的IP地址。是一种通过主机名检索IP地址的系统。
背景
IP地址由一串数据序列组成,不好记忆。
规则
在应用中,当用户输入了域名,DNS会自动检索那个注册了主机名和IP地址的数据库,并迅速定位对应的IP地址。
命令行 nslookup 主机名可以返回对应的IP地址。
5.2.1 域名
域名定义:某一台计算机或计算机组的名称。域名用于各种网络环境和应用程序特定的命名和寻址目的。
5.2.2 DNS查询过程
- 客户端向域名服务器发起IP地址查询。
- 接收到这个查询请求的域名服务器首先在自己的数据库进行查找。如果有该域名对应的IP地址就返回。如果没有,则域名服务器再向上一层根域名服务器进行查询处理。
- 从根开始对这棵树按照顺序进行遍历,直到找到指定的域名服务器,并由这个域名服务器返回想要的数据。
5.2.3 其他功能
DNS所管理的信息除了主机名和IP地址的映射关系之外,还有众多其他信息。
例如:
PTR 从IP地址检索主机名
NS 上层或下层域名服务器IP地址的映射
MX 记录注册了邮件地址和邮件接收服务器的主机名
5.3 ARP
定义
解决地址问题的协议。根据目标IP地址,定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,通过ARP查找下一跳路由器的MAC地址。
机制
ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。
例子
主机A向同一链路上的主机B发送IP包,它们互相不知道对方的MAC地址。
- A为了获得B的MAC地址,首先通过广播发送给一个ARP请求包,包中包含想要了解其MAC地址的主机IP地址。
- 广播的包被同一链路上所有的主机和路由器接收,并被解析。
- 如果目标IP地址与自己的IP地址一致。那么这个节点就将自己的MAC地址塞进ARP响应包返回给主机A。
- 总之,ARP请求包是将自己的MAC地址告诉对方,而目标主机将自己的MAC地址填入ARP响应包告诉对方。通过ARP从IP地址获得MAC地址,实现链路内的IP通信。
- 不可能每次发送IP数据包都要进行一次ARP请求来确定MAC地址,通常是会把获取到的MAC地址缓存起来,即把ARP获取到的MAC地址作为IP对MAC的映射关系记录到一个ARP缓存表中。
arp -a 命令可以ARP表信息。
5.4 IP地址和MAC地址缺一不可?
既然知道了IP地址,即使不做ARP,只要在数据链路上发一个广播不就能发给主机B了吗?为什么既需要IP地址又需要MAC地址?
- 发送给其他数据链路中某一个主机的情况:
即使知道了目标主机的MAC地址,路由器会阻断两个网络,无法直接从主机A发送数据报到主机B。主机A必须把数据报发给路由器C的MAC地址。——IP层的路由机制行不通了。 - 假定MAC地址就用广播地址,路由器D也会收到广播消息。然后路由器D又转发给路由器C,导致数据包被重复发送两次。 P183
- 试想,不使用IP地址,通过MAC地址连接世界上所有主机和节点。仅仅一个MAC地址是无法知道及其所处的位置的。因为IP地址由一个网络标识,可以对地址进行集约。而MAC没有任何集约机制,网桥就不得不维护一张巨大的表格来维护所学到的所有MAC地址,一旦这些信息超出网桥承受极限,会导致网桥无法正常工作。而且对应的路由控制表会变得无比庞大,使得网络传输效率低下。
5.5 RARP
定义
Reverse Address Resolution Protocol,从MAC地址定位IP地址。
应用
打印机服务器等小型嵌入式设备接入网络。
5.6 ICMP
辅助IP的ICMP
背景
架构IP网络时需要注意:确认网络是否正常工作,以及遇到异常时进行问题诊断。
作用
- 确定IP包是否成功送达目标地址
- 通知发在发送过程中IP包被废弃的原因
- 改善网络设置
根据以上,就可以获得网路是否正常、设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断。
网络的设置可以包括很多内容:网线、IP地址和子网掩码的设置、路由表的和值、DNS服务器的设置、邮件服务器的设置以及代理服务器的设置等。而ICMP只负责与IP相关的设置。
定义
ICMP的包以明文的形式像TCP、UDP一样通过IP进行传输。然而,ICMP所承担的功能并非传输层的补充,而应该把它视为IP的一部分。
ICMP的消息分为两类:
- 通知出错原因的错误消息
- 用于诊断的查询消息
例子
- ICMP超时消息
IP包首部有一个字段TTL,每经过一个路由器就会减1,直到减到0时IP报就会被丢弃。此时,IP路由器将会发送一个ICMP超时的消息给发送端,通知该包已被丢弃。
traceroute命令,显示执行程序的主机到达特定主机之前经历了多少路由器。其原理就是利用IP包的生存期限从1开始按递增顺序的同时发送UDP包,同强制接受ICMP超时消息的一种方法,这样可以将所有路由器的IP地址逐一呈现。
Windows上:tracert www.baidu.com
- ICMP回送消息
用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息。
向对端主机发送 回送请求消息(ICMP Echo Request Message),接收对端主机发回来的 回送应答消息(ICMP Echo Reply Message)。
ping命令(Packet InterNetwork Groper) 就是利用这个消息实现的。
还有ICMP路由器探索消息用于发现与自己相连网络中的路由器、ICMP地址掩码消息获取子网掩码的信息。
5.7 ICMPv6
在IPv6中,ICMP作用被扩大,如果没有ICMPv6,IPv6就无法正常通信。
ICMPv6集成了IPv4的ARP、ICMP重定向以及ICMP路由器选择消息等功能。
5.8 DHCP
定义
Dynamic Host Configuration Protocol
作用
实现自动设置IP地址、统一管理IP地址分配。让即插即用变得可能。
机制
两个阶段:
- 为DHCP服务器设置好可分配的IP地址后,通知DHCP客户端可用的网络设置。
- 客户端发送DHCP请求包,通知想要使用某个设置。服务器返回DHCP提供保,允许设置。
- DHCP设置有一个限制时间,客户端在这个时限内可以发送DHCP请求包通知想要延长这个时限。
5.8.1 DHCP中继代理
企业、学校等大规模组织机构的网络环境中,一般有多个以太网(无线LAN)网段。将DHCP服务器分设到各个路由器上,不利于维护。DHCP中继代理可以对DHCP统一管理,对不同网段的IP地址分配由一个DHCP服务器统一进行管理和运维。
5.9 NAT
定义
Network Address Translation,网络地址转换, 是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。
背景
应对地址枯竭的IPv4。
机制
- 内网发送数据到外网,途中的NAT路由器 将IP首部的源地址转换成全局IP地址,再发送数据。
- 外网发送数据到内网,途中的NAT路由器将IP首部的目标地址转换成私有IP地址,再发送数据。
- NAT路由器内部有一张自动生成的用来转换地址的表。当10.0.0.10向外网主机163.221.120.9发送第一个包时生成这张表,并按照这张表的映射关系进行处理。
5.10 NAP-PT
背景
人们担心全局IP地址不够用,又采用了包含端口号一起转换的方式(NAPT)。
定义
Network Address Translator - Protocol Translation,用来翻译IP地址,即将IPv6的首部转换成IPv4首部的一种技术。
同理NAPT-PT则是用来翻译IP首部与端口号的。
NAT的潜在问题:
NAT依赖于自己的转换表,所以有以下限制:
- 无法从NAT外部向内部服务器建立连接。
- 转换表的生成与转换操作都会产生一定开销。
- 通信过程中一旦NAT出现异常需要重启,所有的TCP连接都会被重置。
- 即使准备两台NAT做容灾备份,TCP连接还是会被断开。
解决NAT的潜在问题与NAT穿越
解决以上问题有两种方法:
- 改用IPv6,公司和家庭中所有设备都可以配置一个全局IPv6,如果地址枯竭不存在,也没必要使用NAT了
- NAT穿越
NAT的缺点:
规范越来越复杂,应用的实现变得更耗时。
应用一旦运行在开发者未预想到的特殊网络环境中时,会出现无法正常工作、遇到状况时难以诊断等问题。
5.11 IP隧道
背景
夹着两个IPv4网络的两个IPv6网络之间的通信
作用
IP隧道将IPv6包追加一个IPv4的首部,传递给IPv4网络
定义:网络层首部后面继续追加网络层首部的通信方法就叫“IP隧道”。(一般IP首部后面紧接着是TCP/UDP的首部)
缺点
路由表的量可能会涨到平时的两倍,在路由器上进行两种协议都要支持的设置相当费劲。
例子
利用IP隧道转发多播消息:
很多路由器没有多播包的路由控制信息,多播消息就无法穿越路由器。
利用IP隧道,为多播IP包追加单播IP首部进行封装,就可以使路由器用单播的形式发包。
隧道另一端的路由器接收到数据后删除单播IP首部,再在所在连路上发多播消息。
以上就实现了向距离较远的链路转发多播消息。
5.12 其他IP相关技术
5.12.1 IP任播
定义
为那些提供同一种服务的服务器配置同一个IP地址,并与最近的服务器进行通信的一种方法。
机制
当发送一个请求包给DNS根域名服务器时,该区域的IP地址也将发送出去,从而可以从这个区域的服务器获得应答。
例子
110报警电话、119消防电话、DNS根域名服务器
缺点
无法保证将第一个包和第二个包发送给同一个主机。在面向连接的TCP通信或UDP中需要连续多个包进行通信,就显得力不从心了。
5.12.2 Moblie IP
背景
IP地址由网络地址和主机地址组成。
手机和笔记本电脑每连接到不同的子网,都会由DHCP或手动的方式分配到不同的IP地址。那么IP地址的变更会不会有什么问题呢?
子网一旦变化,TCP连接就会被断开。(TCP是面向连接的协议,自始至终需要发送端和接收端的主机IP地址不变)
作用
主机所连接的子网IP发生变化时,主机IP地址仍旧保持不变。应用不需要做任何改动,即使是在IP地址发生变化的环境下,通信也能继续。
例子
Mobile IP中的移动主机,在移动之前按照以往模式进行通信,移动之后就通过外部代理发送数据包向归属代理通知自己的地址。
从应用层看移动主机,会发现它永远是使用归属地址进行通信。然而实际上Mobile IP是使用转交地址转发数据包的。
5.12.3 通信质量控制
RSVP:
- IntServ
- DiffServ
5.12.4 显式拥塞通知
ECN