本文源自《图解 TCP/IP》第四、五章读书笔记。一篇文章让你了解 IP 协议。
阅读的时候,注意一般知识点结构分成以下四部分:
- 这个技术 / 协议产生的背景
- 定义
- 作用
- 应用的例子
个人感觉这样记录 有助于加深记忆和理解。
IP 协议负责将数据包发送给最终目标计算机,能够让世界上任何两台计算机进行通信。
文章介绍 IP 的主要功能及其协议具体内容的知识点。
IP(Internet Protocol)即网络之间互连的协议。
IP 相当于 OSI 参考模型的第三层——网络层。网络层的功能是基于 IP 地址进行不同网络系统间的路径选择。
IP 作用:对不同数据链路的相异特性进行抽象化,在复杂的网络环境中将数据包发给最终的目标地址。
如果以上内容感觉有点不知所言,可以参考下 OSI 模型中 网络层与数据链路层的关系:
网络层的下一层——数据链路层的作用是在同一数据链路的节点之间进行数据传递。通过使用接收系统的 MAC 地址来寻址,将比特信息封装成数据帧 Frame。
但是不同网络,如以太网、分组交换网等,由于它们所传送数据的基本单元("帧")的格式不同,它们相互之间不能互通。而 IP 协议把各种不同 "帧" 统一转换成 "网协数据包" 格式,使所有各种计算机都能在因特网上实现互通。
数据链路层提供直连同一网络下的两个设备之间的通信功能。网络层的 IP 则负责在两个不同网络网络之间进行通信传输。
例子:出去旅行。机票和火车票只在特定区间有效(数据链路)。为了到达目的地,你需要一个全程的行程表(网络层)。
三大模块:IP 寻址、路由、IP 分包与组包。
无连接型含义:发包之前,不需要建立与对端目标地址之间的连接。上次如果有需要发送给 IP 的数据,该数据会立即被压缩成 IP 包发出去。
缺点:产生冗余的通信。
为什么 IP 要采用面向无连接?
定义:用 32 位二进制数来表示。以每 8 位为一组,分成 4 组,每组用 "." 隔开,再将每组数转成十进制数。
规则:
广播地址定义:IP 地址的主机标识全部设置为 1.
广播定义:向某个网段的广播地址发送 IP 包,这个网段的所有主机都能收到这个包,由主机 IP 之上的一层去判断是否接收数据。
缺点:给毫无关系的网络或主机带来影响,造成不必要的流量。
理论上 B 类网络一个链路允许 65000 多台计算机连接。然而实际网络架构中,一般不会有在同一连路上连接 65000 多台计算机的情况。
因此,直接使用 A\B\C 类地址,有点浪费资源,人们开始采用一种新的组合方式减少地址空间的浪费。
子网掩码可以通过子网网络地址细分出比 A\B\C 类更小粒度的网络。
子网掩码用二进制方式表示,也是 32 位二进制数字,
1 表示 IP 地址的网络地址对应位。
0 表示 IP 地址的主机地址对应位。
子网掩码可以灵活指定网络标识的长度,从而网络粒度更细。
是将好几个 IP 网络结合在一起,使用一种无类别的域际路由选择算法,可以减少由核心路由器运载的路由选择信息的数量。
"无类型" 指不考虑 IP 地址所属的类别,路由的策略完全基于整个 32bit IP 地址的掩码来操作。
A\B\C 类地址的划分粒度太大,导致地址空间严重缺乏。根据 CIDR 可以把多个 C 类地址划分到一个较大的网络内,有效利用了当前 IPv4 地址,同时通过路由集中降低了路由器的负担。
可以随机修改组织内各个部门的子网掩码长度的机制。
CIDR 采用固定长度的子网掩码机制,在一个网络下,有些部门可能有 500 台主机,另一些部门可能只有 50 台主机,通过全部采用统一标准,就难以架构一个高效的网络结构,因此提出组织内要使用可变长度的的 IP 地址分配方式。
VLSM 是将大范围的 IP 网络划分成多个小范围的 IP 网络,为某一个单位或企业的不同部门对内可显示不同的网络,对外可显示同一个 IP 网络。
CIDR 和 VLSM 技术相对缓解了全局 IP 地址不够用的问题。但是 IP 地址的绝对数本身有限的事实无法改变,因此后面出现了 IPv6 地址。
起初互联网中任何一台主机或路由器都必须有一个唯一 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 地址由提供商维护,不需要用户亲自申请。
作用:仅仅有 IP 地址不足以将数据发向目标地址,在数据发送过程中需要 "指明路由器或主机" 的信息,以便真正发往目标地址。保存这种信息的就是路由控制表(Routing Table)。该表是由一个 "路由协议"(有别于 IP 协议)制作而成的。
又称路由汇总(Aggregation).
作用:路由表越大,管理它需要的内存和 CPU 也就越大,而且查找路由表的时间就越长,导致转发 IP 数据包的性能下降。如果要构建大规模、高性能网络,需要尽可能削减路由表的大小。
利用网络地址的比特分步进行分层配置。对内即使有多个子网掩码,对外呈现出的也是同一个网络地址。
每种数据链路的 MTU 之所以不同,是因为每个不同类型的数据链路的使用目的不同,可承载的 MTU 也就不同。
IP 数据传递到下一层数据链路层时,可能需要进行分片处理(IP Fragmentation)。
按照路径中存在的所有数据链路中 最小的 MTU 发送,可以避免中途的路由器进行分片处理。
8 个 16 位,共 128 比特,是 IPv4 长度的 4 倍。
从根本上解决 IPv4 地址耗尽的问题。
每 16 位比特为一组,用 ":" 隔开。出现连续的 0 时可以省略,用 "::" 表示。一个 IP 地址只允许出现一次 "::"。
IP 首部包含着 用 IP 协议进行发包控制时 所有的必要信息。
首部以每 32 比特(8 字节)为一个单位:
源地址(Source Address):32 比特,表示发送端 IP 地址。
目标地址(Destination Address):32 比特,表示接收端 IP 地址。
OSI 模型网络层之下 数据链路层的数据帧 就是 IP 包的数据部分。IP 首部是对数据进行包装,增加了网络层的控制信息。
IP 协议除了让最终目标主机收到数据包,还要求能够解析主机名称和 MAC 地址,以及数据包在发送过程中异常情况处理的功能。
本章介绍了作为 IP 的辅助和扩展规范的 DNS、ARP、ICMP 以及 DHCP 等协议。
需要将 IP 上层的应用层用到的地址映射为 IP 地址。
同时还需要知悉 IP 下层的数据链路层的 MAC 地址。
Domian Name System,管理主机名和 IP 地址之间对应关系的系统,将网站地址转换成具体的 IP 地址。是一种通过主机名检索 IP 地址的系统。
IP 地址由一串数据序列组成,不好记忆。
在应用中,当用户输入了域名,DNS 会自动检索那个注册了主机名和 IP 地址的数据库,并迅速定位对应的 IP 地址。
命令行 nslookup 主机名可以返回对应的 IP 地址。
域名定义:某一台计算机或计算机组的名称。域名用于各种网络环境和应用程序特定的命名和寻址目的。
DNS 所管理的信息除了主机名和 IP 地址的映射关系之外,还有众多其他信息。
例如:
PTR 从 IP 地址检索主机名
NS 上层或下层域名服务器 IP 地址的映射
MX 记录注册了邮件地址和邮件接收服务器的主机名
解决地址问题的协议。根据目标 IP 地址,定位下一个应该接收数据分包的网络设备对应的 MAC 地址。如果目标主机不在同一个链路上时,通过 ARP 查找下一跳路由器的 MAC 地址。
ARP 是借助 ARP 请求与 ARP 响应两种类型的包确定 MAC 地址的。
主机 A 向同一链路上的主机 B 发送 IP 包,它们互相不知道对方的 MAC 地址。
arp -a 命令可以 ARP 表信息。
既然知道了 IP 地址,即使不做 ARP,只要在数据链路上发一个广播不就能发给主机 B 了吗?为什么既需要 IP 地址又需要 MAC 地址?
Reverse Address Resolution Protocol,从 MAC 地址定位 IP 地址。
打印机服务器等小型嵌入式设备接入网络。
辅助 IP 的 ICMP
架构 IP 网络时需要注意:确认网络是否正常工作,以及遇到异常时进行问题诊断。
网络的设置可以包括很多内容:网线、IP 地址和子网掩码的设置、路由表的和值、DNS 服务器的设置、邮件服务器的设置以及代理服务器的设置等。而 ICMP 只负责与 IP 相关的设置。
ICMP 的包以明文的形式像 TCP、UDP 一样通过 IP 进行传输。然而,ICMP 所承担的功能并非传输层的补充,而应该把它视为 IP 的一部分。
ICMP 的消息分为两类:
traceroute 命令,显示执行程序的主机到达特定主机之前经历了多少路由器。其原理就是利用 IP 包的生存期限从 1 开始按递增顺序的同时发送 UDP 包,同强制接受 ICMP 超时消息的一种方法,这样可以将所有路由器的 IP 地址逐一呈现。
Windows 上:tracert www.baidu.com
ping 命令(Packet InterNetwork Groper) 就是利用这个消息实现的。
还有 ICMP 路由器探索消息用于发现与自己相连网络中的路由器、ICMP 地址掩码消息获取子网掩码的信息。
在 IPv6 中,ICMP 作用被扩大,如果没有 ICMPv6,IPv6 就无法正常通信。
ICMPv6 集成了 IPv4 的 ARP、ICMP 重定向以及 ICMP 路由器选择消息等功能。
Dynamic Host Configuration Protocol
实现自动设置 IP 地址、统一管理 IP 地址分配。让即插即用变得可能。
两个阶段:
企业、学校等大规模组织机构的网络环境中,一般有多个以太网(无线 LAN)网段。将 DHCP 服务器分设到各个路由器上,不利于维护。DHCP 中继代理可以对 DHCP 统一管理,对不同网段的 IP 地址分配由一个 DHCP 服务器统一进行管理和运维。
Network Address Translation,网络地址转换, 是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。
应对地址枯竭的 IPv4。
人们担心全局 IP 地址不够用,又采用了包含端口号一起转换的方式(NAPT)。
Network Address Translator - Protocol Translation,用来翻译 IP 地址,即将 IPv6 的首部转换成 IPv4 首部的一种技术。
同理 NAPT-PT 则是用来翻译 IP 首部与端口号的。
NAT 依赖于自己的转换表,所以有以下限制:
解决以上问题有两种方法:
NAT 的缺点:
规范越来越复杂,应用的实现变得更耗时。
应用一旦运行在开发者未预想到的特殊网络环境中时,会出现无法正常工作、遇到状况时难以诊断等问题。
夹着两个 IPv4 网络的两个 IPv6 网络之间的通信
IP 隧道将 IPv6 包追加一个 IPv4 的首部,传递给 IPv4 网络
定义:网络层首部后面继续追加网络层首部的通信方法就叫 "IP 隧道"。(一般 IP 首部后面紧接着是 TCP/UDP 的首部)
路由表的量可能会涨到平时的两倍,在路由器上进行两种协议都要支持的设置相当费劲。
利用 IP 隧道转发多播消息:
很多路由器没有多播包的路由控制信息,多播消息就无法穿越路由器。
利用 IP 隧道,为多播 IP 包追加单播 IP 首部进行封装,就可以使路由器用单播的形式发包。
隧道另一端的路由器接收到数据后删除单播 IP 首部,再在所在连路上发多播消息。
以上就实现了向距离较远的链路转发多播消息。
为那些提供同一种服务的服务器配置同一个 IP 地址,并与最近的服务器进行通信的一种方法。
当发送一个请求包给 DNS 根域名服务器时,该区域的 IP 地址也将发送出去,从而可以从这个区域的服务器获得应答。
110 报警电话、119 消防电话、DNS 根域名服务器
无法保证将第一个包和第二个包发送给同一个主机。在面向连接的 TCP 通信或 UDP 中需要连续多个包进行通信,就显得力不从心了。
IP 地址由网络地址和主机地址组成。
手机和笔记本电脑每连接到不同的子网,都会由 DHCP 或手动的方式分配到不同的 IP 地址。那么 IP 地址的变更会不会有什么问题呢?
子网一旦变化,TCP 连接就会被断开。(TCP 是面向连接的协议,自始至终需要发送端和接收端的主机 IP 地址不变)
主机所连接的子网 IP 发生变化时,主机 IP 地址仍旧保持不变。应用不需要做任何改动,即使是在 IP 地址发生变化的环境下,通信也能继续。
Mobile IP 中的移动主机,在移动之前按照以往模式进行通信,移动之后就通过外部代理发送数据包向归属代理通知自己的地址。
从应用层看移动主机,会发现它永远是使用归属地址进行通信。然而实际上 Mobile IP 是使用转交地址转发数据包的。
RSVP:
ECN
来源: http://www.jianshu.com/p/1183208dd5e3