再读斋

TCP/IP(三)IP协议相关技术

IP协议旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP是无法实现通信的。必须还有能够解析主机名称和MAC地址的功能,以及数据包在发送过程中异常情况处理的功能。本文主要介绍作为IP的辅助和扩展规范的DNS、ARP、ICMP、NAT等协议。

DNS

全称Domain Name System,域名系统

IP地址用于识别通信双方的地址,但它是一串长数字,比方便记忆,人们希望主机有自己的名字,这个名字是唯一的,而且容易记住,于是诞生了“域名”的概念。域名是一种为了识别主机名称和机构名的具有分层的名称,比如在域名neu.edu.cn中,neu是主机名,edu和cn是不同层次下的机构名。

域名和IP地址都可以唯一对应一台主机,DNS的作用就是将域名转换成不容易记住的IP地址。

域名是分层的,每层都有自己的DNS服务器用于处理DNS解析的请求,这样的好处在于每层的服务器不用关注过多的信息,它只要知道自己这一层下的域名服务器信息即可。以解析域名:www.itetf.org为例:

根服务器其实并不知道www.itetf.org的IP地址,但是它知道itetf.org域名服务器的地址,所有它把这条查询请求转发给itetf.org域名服务器。DNS请求被逐层下发,直到找到对应的IP地址为止。

ARP

全称Address Resolution Protocol,地址解析协议

ARP协议用于通用目标IP地址,定位下一个接收数据包的网络设备的MAC地址。如果目标主机处于同一个数据链路上,那么可以直接得到目标主机的MAC地址,否则会得到下一跳路由器的MAC地址。

ARP协议的工作原理可以分为两部分:ARP请求和ARP响应。首先,源主机会通过广播发送一个ARP请求包:“我要与IP地址为XX的主机通话,谁知道它的MAC地址?”。

下图表示ARP协议的工作机制:

ARP

根据ARP可以动态地进行地址解析,因此,在TCP/IP的网络构造中和网络通信中无需事先知道MAC地址究竟是什么,只要有IP地址即可。

如果每发送一个IP数据报都要进行一个ARP请求以确定MAC地址,那将会造成不必要的网络流量,因此通常的做法是把获取到的MAC地址缓存一段时间。一般来说,发送过一次IP数据包的主机,继续发送多次IP数据包的可能性比较高。因此这种缓存能够有效地减少ARP包的发送。当下一次发送ARP请求或超过一定时间后,缓存都会失效,这保证了即使MAC地址与IP地址对应的关系发送了变化,数据包依然能够被正确的发往目标地址。

MAC地址和IP地址看上起功能相似(都用于唯一区分主机),但是两者缺一不可。如果只有IP地址,虽然可以跳过ARP,直接在链路上发一个广播,但是这仅适应于通信双方处于同一个数据链路情况。如果双方处于不同的数据链路,数据报无法穿透中间的路由器。正因为MAC地址缺一不可,所以才产生了ARP这样的协议将两者关联起来。

ICMP

全称:Internet Control Message Protocol,Internet控制报文协议。

ICMP的主要功能:确认IP包是否成功送达目标地址,通知在发送过程中IP包被废弃的具体原因,改善网络等设置。有了这些功能以后,就可以获得网络是否正常、设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断。

NAT

全称:Network Address Traslator,网络地址转换

NAT是一种用于将局域网中的私有地址转换成全局IP地址的技术。

在连接上路由器的时候,如果检查一下设备的IP地址,你会发现都是类似于192.168.1.1这样局域网的IP地址。那不同网段中,IP地址都是192.168.1.1的主机该如何通信呢?

下图描述了NAT的工作原理:

nat

局域网中IP地址为10.0.0.10的主机向全局IP地址163.221.120.9发送数据。NAT路由器将数据包的源地址修改成自己的全局IP地址:202.244.174.37。同理,接收数据时,路由器把目标地址202.244.174.37翻译成内网地址:10.0.0.10。

路由器只有一个对外的全局IP地址,如果有多个内网主机都向外部通讯怎么办呢?这时就要使用NAPT技术,它和NAT从原理上类似,但它可以转换TCP和UDP端口号。

使用NAPT技术时,不同的内网IP被转换成同一个公共IP地址,也就是路由器对外显示的全局IP地址,但是被附加不同的端口号以示区分:如下图所示

napt

不管是NAT还是NAPT,都需要路由器内部维护一张自动生成的地址转换表。以TCP为例,建立TCP连接首次握手的SYN包发出时会生成这个表,关闭连接时会发生FIN包,收到这个包的应答时转换表被删除。

DHCP

全称:Dynamic Host Configuration Protocol,动态主机配置协议

DHCP的主要用途是实现自动设置IP地址、统一管理IP地址分配。

刘涤生 wechat