本文内容为《图解TCP/IP》一书学习笔记。本文主要概述四到五章内容。
第四章 IP即网络协议
4.1 IP相当于OSI参考模型中的第3层
IP相当于OSI参考模型中的第3层——网络层。网络层主要实现“点对点”(end-to-end)通信。数据链路层的作用是在互连同一种数据链路之间的节点进行包传递。而一旦跨越多种数据链路,就需要借助网络层。
IP的主要作用就是在复杂的网络环境中将数据包发送给最终地址。
主机:配置有IP地址,但不进行路由控制的设备。
路由器:既配有IP地址又具有路由控制能力的设备。
网络层与数据链路层的关系如下图:
类比现实生活中的旅行,到达目的地可能需要先后乘坐飞机、火车、公交车。
4.2 IP基础知识
IP三大作用模块:IP寻址、路由(最终节点为止的转发)以及IP分包与组包。以下对这三点逐一介绍。
4.2.1 IP寻址
在计算机通信中,为了识别通信段,必须要有一个类似于地址的识别码进行标识。而在数据链路层,使用MAC地址来标识同一个链路中不同计算机的一种识别码。在网络层,则叫做IP地址。
在网桥或交换集线器等物理层或数据链路层数据包转发设备中,不需要设置IP地址。因为这些设备只负责将IP转化为0、1比特流转发或对数据链路帧的数据部分进行转发,不需要应对IP协议。
4.2.2 路由控制
路由控制(Routing)是指将分组数据发送到最终目标地址的功能。即使网络非常复杂,也可以通过路由控制确定到达目标地址的通路。因此,一个数据包之所以能够成功地到达最终的目标地址,全靠路由控制。
Hop中文叫“跳”,它是指网络中的一个区间,IP包正是在网络中一个跳间被转发。
数据链路实现某一个区间(一跳)内的通信,而IP实现直至最终目标地址的通信(点对点)。
一跳的范围:利用数据链路层以下分层的功能传输数据帧的一个区间;即从源MAC地址到目标MAC地址之间传输帧的区间;也即主机或路由器网卡不经其他路由器而能直接到达的相邻主机或路由器网卡之间的一个区间。
多跳路由:路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将到最终目标为止的所有通路指定出来。每个区间(跳)在转发IP数据包时会分别指定下一跳的操作,直至包到达目标地址。
为了将数据包发送给目标主机,所有主机都维护者一张路由控制表(Routing Table),该表记录IP数据在下一步应该发给哪一个路由器。IP包将根据这个路由表在各个数据链路上传输。
IP面向无连接,即在发包之前,不需要建立与对端目标地址之间的连接。上层如果遇到需要发送给IP的数据,该数据会被立即压缩成IP包发送出去。
4.2.3 IP分包与组包
IP是实现多个数据链路之间通信的协议。不同的数据链路各自的最大传输单位(MTU:Maximum Transmission Unit)不同。为了解决这个问题,IP进行分片处理(IP Fragmentation),即将较大的IP包分成多个较小的IP包。分片的包到了对端目标地址以后再被组合起来传给上一层。有关分片处理详见4.5
4.2.4 IP为什么面向无连接
两个原因:
- 简化:面向连接比起面向无连接处理相对复杂
- 提速:每次通信之前都需要建立连接,会降低处理速度
需要有连接时,可以委托上一层(传输层)提供此项服务,因此,IP为了实现简单化与高速化采用面向无连接方式。(补充:面向无连接的情况下,一台主机对于自己会何时从哪里收到数据也是不得而知的,通常会网络监控,让主机只接收发给自己的数据包;若没有做好准备很有可能错过一些包,因此无连接的方式下可能会有很多冗余的通信)
IP与TCP关系:
IP提供尽力服务,即“为了把数据包发送到目标地址,尽最大努力”,然而并不做最终收到与否的验证。上一层的TCP就用来提高通信的可靠性。IP负责将数据发给目标主机,TCP则负责保证对端主机确实接收到数据。
为什么不让IP具有可靠传输的功能,合并这两种协议?
- 如果让一种协议规定所有的功能和作用,那么该协议的具体实施和编程会变得非常复杂
- 反之,如果能进行有效分层,可以明确TCP与IP各自协议的最终目的,也有利于后续对这些协议进行扩展和性能上的优化。
4.3 IP地址
略
4.4 路由控制
路由控制表用于在数据发送过程中指明路由器或主机,在实现IP通信的主机和路由器中都有,路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
IP协议认为路由表是正确的,但IP本身没有定义制作路由控制表的协议。该表是由路由协议制作而成的,见第七章。
4.4.1 IP地址与路由控制
下图是发送IP包的实例:
如果路由控制表中存在多条相同网络地址的记录,就选择相同位数最多的网络地址。例如172.20.100.52与172.20.16和172.20.100/24都匹配,应选择匹配度最长的172.20.100/24
- 默认路由:路由表中任何一个地址都能与之匹配的记录。(如果一张路由表中包含所有的网络及其子网的信息,会造成无端浪费)默认路由一般标记为0.0.0.0/0或default。0.0.0.0/0后面是/0,所以并没有标识IP地址,而是为了避免人们误以为0.0.0.0是IP地址。
- 主机路由:“IP地址/32”也被称为主机路由(Host Route)。例如192.168.153.15/32。意味着要基于主机上网卡上配置的IP地址本身,而不是基于该地址的网络地址部分进行路由。
主机路由多被用于不希望通过网络地址路由的情况。 - 环回地址:环回地址是同一台计算机上的程序之间进行网络通信所使用的一个默认地址。一般使用IP地址127.0.0.1或者主机名localhost。
4.4.2 路由控制的聚合
利用网络地址的比特分布可以有效的进行分层配置。对内即使有多个子网掩码,对外呈现出的也是同一个网络地址。
路由聚合一能够缩小路由表的大小,二能将已知的路由信息传送给周围的其他路由器,以达到控制路由信息的目的。
4.5 IP分割处理与再构成处理
4.5.1 数据链路不同,MTU则相异
每种数据链路的最大传输单元(MTU)都不尽相同。
4.5.2 IP报文的分片与重组
分片处理只要认为路由器有必要,会周而复始地进行。
经过分片之后的IP数据报在被重组的时候,只能由目标主机进行,路由器虽然做分片但不会进行重组。
4.5.3 路径MTU发现
路径路径MTU发现技术出现原因:
- 路由器要做的其他处理越来越多,例如网络过滤。所以允许的话,不希望由路由器进行IP数据包的分片处理。
- 分片处理中,一旦某个分片丢失,会造成整个IP数据报作废。TCP设计初期曾使用过更小的分片进行传输,结果网路的利用率明显下降。
路径路径MTU发现技术是什么:
路径MTU(Path MTU)是指从发送端主机到接收端主机之间不需要分片时最大MTU的大小,即路径中存在的所有数据链路中最小的MTU。这样可以避免在中途的路由器上进行分片处理,也可以在TCP中发送更大的包。
路径路径MTU实现原理:
- 发送端发送IP数据报时将其首部的分片禁止标志位设置为1,这样途中的路由器会直接丢弃需要分片处理的大包,随后通过一个ICMP的不可达信息将数据链路上的MTU值给发送主机。
- 将上一步ICMP通知的MTU值设置为当前MTU,发送主机根据这个MTU对数据报进行分片处理。
- 如此反复直到数据报被发送到目标主机为止没再收到任何ICMP,认为最后一次ICMP通知的MTU是一个合适的MTU值。
前面是UDP的例子。TCP情况下,根据路径MTU的大小计算出最大段长度 (MSS),然后根据这些信息进行数据报的发送。因此如果在TCP中采用MTU路径发现,IP层不会再进行分片处理。
路径MTU发现机制(TCP)4.6 IPV6
略
4.7 IPV4首部
略
4.8 IPV6首部格式
略
第五章 IP协议相关技术
5.1 仅凭IP无法完成通信
- 人们上往时往往直接输入Web网站的地址或电子邮件地址等应用层地址,而不是使用IP地址,所以需要实现将应用中使用的地址映射为IP地址。
- 数据链路层也不使用IP地址,在以太网的情况下只使用MAC地址传输数据包。
5.2 DNS
DNS产生原因:通信直接使用IP地址不方便,IP地址不好记 -> 使用主机识别码来唯一标识计算机,这样通信时可以使用主机名称而无需输入IP地址 -> 系统需要实现将主机名转换为具体的IP地址,即使用hosts数据库文件 -> 最初是由互联网信息中心整体管理一份hosts文件,这样每次新加入机器时信息中心的hosts文件就需要变更,其他计算机需要定期下载最新的hosts文件;这种集中管理的方式可行性很低 -> DNS产生
DNS是什么:一种有效管理主机名和IP地址之间的对应关系的系统,即DNS系统。在应用中,用户输入主机名(域名)时,DNS会自动检索那个注册了主机名和IP地址的数据库,并迅速定位对应的IP地址。
域名是什么:识别主机名称和组织机构名称的一种具有分层的名称。例如仓敷艺术科学大学的域名:kusa.ac.jp 。kuaa表示仓敷艺术科学大学,ac表示大学,jp代表日本。
使用域名时可以在主机名后追加上组织机构的域名。例如主机pepper可以表示为pepper.kusa.ac.jp。
域名服务器:管理域名的主机和对应的软件,用于管理所在分层的域的相关信息。
域名服务器
解析器:进行DNS查询的主机和软件,例如用户的PC。一个解析器至少包括组织内部的域名服务器的IP地址。
DNS查询:
DNS查询解析器和域名服务器会将最新了解到的信息暂时保存在缓存里,这样可以减少每次查询时的性能消耗。
5.3 ARP
ARP是什么:一种解决地址问题的协议。以目标IP地址为线索,定位下一个应该接收数据分包的网络设备对应的MAC地址。ARP只适用于IPv4,IPv6中使用ICMPv6替代ARP。
ARP工作机制:借助ARP请求与ARP响应两种类型的包确定MAC地址。
总之,从一个IP地址发送ARP请求包以了解这个IP地址的MAC地址,目标地址将自己的MAC地址填入其中的ARP响应包返回给发出请求的IP地址。由此通过ARP从IP地址获得MAC地址,实现链路内的IP通信。
如果每发送一次IP数据报就进行一次ARP请求来确定MAC地址,会造成不必要的网络流量。通常的做法是将获取到的IP对MAC的映射关系缓存到发送端ARP缓存表中。接收主机端同样可以缓存MAC地址,以提高效率。
为什么IP地址和MAC地址缺一不可?
-
疑问1:数据链路上知道接收端主机B的MAC地址就行了,为什么需要知道主机B的IP?
-
解答1:如下图所示, 主机A给主机B发送数据报必须经过路由器C。即使知道了主机B的MAC地址,由于路由器会隔断两个网络,还是无法实现直接从主机A发送数据报给主机B。主机A必须先将数据报发送给路由器C的MAC地址C1。
-
疑问2:只要知道了主机B的IP地址,不做ARP,在数据链路上广播,不也可以发给主机B?
-
解答2:还是看上图,假定MAC地址就用广播地址,那么路由器D也将会收到该广播消息。于是路由器D又将该消息转发给l路由器C,导致数据包被重复发送两次。
5.3.4 RARP
RARP(Reverse Address Resolution Protocol) 则是将ARP反过来,从MAC地址定位IP地址的一种协议。
5.4 ICMP
ICMP(Internet Control Message Protocol)主要功能包括:确认IP包是否成功送达目标地址,通知在发送过程中IP包被废弃的具体原因,改善网络设置等等。综合来讲,即验证网络的设置是否正确,网络出现问题时能立刻制止问题的蔓延。ping命令就是ICMP的具体应用之一。
ICMP的通知信息会使用IP进行发送。
ICMP的消息大致分为两类,一类是通知出错原因的错误信息;另一类是用于诊断的查询信息。
5.4.2 主要的ICMP消息
- ICMP目标不可达信息:IP路由器无法将IP数据包发送给目标地址时,会给发送端主机返回一个目标不可达(Destination Unreachable Message)的ICMP信息。
- ICMP重定向消息:如果路由器发现发送端主机使用了次优的路径发送数据,它会返回一个ICMP重定向(ICMP Redirect Message)的消息给这个主机。这个消息中包含了最合适的路由信息和源数据。不过多种情况下这种重定向信息成为引发问题的原因,所以往往不进行设置。
- ICMP超时信息:IP包中有一个字段叫做TTL(Time To Live,生存周期),它的值每经过一次路由器会减1,减到0时该IP包会被丢弃。此时IP路由器会发送一个ICMP超时的信息(ICMP Time Exceeded Message)给发送端主机,并通知该包已被丢弃。设置TTL的目的是为了在路由控制遇到问题发生循环状况时,避免IP包无休止的在网络上被转发。
- ICMP回送消息:在进行通信的主机或路由器之间,判断所发生的数据包是否已经到达对端的一种消息。可以向对端主机发送回送请求的消息(ICMP Echo Request Message),也可以接收对端主机发回来的回送应答消息(ICMP Echo Reply Message)。常用的ping命令就是利用这个消息实现的。
5.5 DHCP
如果逐一地为每一台主机设置IP地址会非常繁琐,于是为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP(Dynamic Host Configuration Protocol)协议。有了DHCP,计算机只要连接到网络,就可以进行TCP/IP通信。
5.5.2 DHCP的工作机制
使用DHCP之前,要先架设一台DHCP服务器。然后将DHCP所要分配的IP地址设置到服务器上。此外,还需要相应的子网掩码、路由控制信息以及DNS服务器的地址等设置到服务器上。
5.6 NAT
NAT(Network Address Translator)用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。NAT实际上是为正在面临地址枯竭的IPv4而开发的技术。
5.6.2 NAT的工作机制
NAT当私有网络内的多台机器同时都要与外部通信时,仅仅转换IP地址,可能会出现全局IP地址不够用。可以采用下图所示的包含端口号一起转换的方式(NAPT)来解决这个问题。
NAPT
现在很多互联网服务都基于IPv4,为了保证这些服务也能在IPv6中正常使用,产生了NAT-PT规范,NAT-PT将IPv6首部转换为IPv4首部,从而保证只有IPv6地址的主机也能够与IPv4地址的其他主机通信。
NAT-PT
5.7 IP隧道
IP隧道产生原因:在一个如下图所示的网络环境中,假如网络A、B使用IPv6,中间位置的网络C支持使用IPv4的话,网络A与网络B之间无法直接进行通信。为了让他们之间正常通信,这时需要采用IP隧道的功能。
IP隧道中可以将那些从网络A发过来的IPv6的包统和为一个数据,再为之追加一个IPv4的首部以后转发给网络C。
一般情况下,紧接着IP首部的是TCP首部或者UDP的首部,现在“IP首部后面还是IP首部”或“IP首部的后面是IPv6的首部”等情况越来越多。这种在网络层的首部后面继续追加网络层首部的通信方法就叫做“IP隧道”。
IP隧道
网友评论