图解TCP/IP:IP协议相关技术

IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP是无法实现通信的。必须还有能够解析主机名称和MAC地址的功能,以及数据包在发送过程中异常情况处理的功能。

仅凭IP无法完成通信

为了让主机根据实际的IP包进行通信,就有必要实现一种功能——将应用中使用的地址映射为IP地址。此外,在数据链路层也不使用IP地址,在以太网的情况下只使用MAC地址传输数据包,而实际上将众多IP数据包在网络上进行传送的就是数据链路本身,因此必须了解发送端MAC地址。

DNS

DNS(Domain Name System)可以将访问网站的一串由罗马字和点号组成的字符串自动转换为具体的IP地址。这种DNS不仅适用于IPv4,还适用于IPv6。

IP地址不便记忆

主机识别码是指为每台计算机赋以唯一的主机名,在进行网络通信时可以直接使用主机名称而无需输入一大长串的IP地址,并且此时,系统必须自动将主机名转换为具体的IP地址。为了实现这样的功能,主机往往会利用一个叫做hosts的数据库文件。

DNS的产生

DNS系统是一个可以有效管理主机名和IP地址之间对应关系的系统,在这个系统中主机的管理机构可以对数据进行变更和设定,也就是说,它可以维护一个用来组织内部主机名和IP地址之间对应关系的数据库。

在应用中,当用户输入主机名(域名)时,DNS会自动检索那个注册了主机名和IP地址的。而且,如果主机名和IP地址需要进行变更时,也只需要在组织机构内部进行处理即可,而没必要再向其他机构进行申请或报告。

域名的构成

域名是指为了识别主机名称和组织机构名称的一种具有分层的名称,域名由几个英文字母(或英文字符序列)用点号连接构成。在启用域名功能之前,单凭主机名还无法完全管理IP地址,因为在不同的组织机构中不允许有同名的主机。然而,当出现了带有层次结构的域名之后,每一个组织机构就可以自由地为主机命名了。

# 域名的分层结构
顶级域名(TLD, Top Level Domain)
国别顶级域名(ccTLD, country code TLD)
通用顶级域名(gTLD, generic TLD)

域名服务器是指管理域名的主机和相应的软件,它可以管理所在分层的域的相关信息。其所管理的分层叫做ZONE。

各个域的分层上都有设有各自的域名服务器
各层域名服务器都了解该层以下分层中所有域名服务器的IP地址。因此它们从根域名服务器开始呈树状结构相互连接。
由于所有域名服务器都了解根域名服务器的IP地址,所以若从根开始按照顺序追踪,可以访问世界上所有域名服务器的地址。

DNS解析器是进行DNS查询的主机和软件。用户所使用的工作站或个人电脑都属于解析器,一个解析器至少注册一个以上域名服务器的IP地址,通常它至少包括组织内部的域名服务器的IP地址。

DNS查询

解析器为了调查IP地址,向域名服务器进行查询处理。接收这个查询请求的域名服务器首先会在自己的数据库进行查找,如果有该域名所对应的IP地址就返回;如果没有,则域名服务器再向上一层根域名服务器进行查询处理。因此,从根开始对这棵树按照顺序进行遍历,直到找到指定的域名服务器,并由这个域名服务器返回想要的数据。解析器和域名服务器将最新了解的信息暂时保存在缓存里,这样可以减少每次查询时的性能消耗。

DNS如同互联网中的分布式数据库

DNS所管理的信息不仅仅是主机名跟IP地址的映射关系,还要管理众多其他信息。

A记录 主机名与IP地址的对应关系
PTR   从IP地址检索主机名称的信息
NS记录  上层或下层域名服务器IP地址的映射
MX记录  邮件地址与邮件对应服务器的主机名

ARP

ARP(Address Resolution Protocol)是一种解决地址问题的协议,以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只适用于IPv4,不能用于IPv6,IPv6可以用ICMPv6替代ARP发送邻居探索消息。

ARP的工作机制

ARP是借助ARP请求与ARP响应两种类型的包确定MAC地址的。

希望与172.20.1.2进行通信。
发送ARP请求包:目标IP地址=172.20.1.2、MAC地址=?
让我来告诉你我的MAC地址。
发送ARP响应包:172.20.1.2的MAC地址为08:00:20:74:CE:EC。

从一个IP地址发送ARP请求包以了解其MAC地址,目标地址将自己的MAC地址填入其中的ARP响应包返回到IP地址。由此,可以通过ARP从IP地址获得MAC地址,实现链路内的IP通信。

如果每发送一个IP数据报都要进行一次ARP请求以此确定MAC地址,那将会造成不必要的网络流量。通常的做法有:

  • 把获取到的MAC地址缓存一段时间

  • 在接受主机端缓存MAC地址

IP地址和MAC地址缺一不可?
虽然IP地址直至到达目标主机时都没有发生变化,但是数据链路的目标地址却根据每个链路的不同而发生着变化。

IP地址和MAC地址缺一不可。

RARP

RARP(Reverse Address Resolution Protocol)是将ARP反过来,从MAC地址定位IP地址的一种协议。

我的IP地址是什么?
RARP请求包:MAC地址=08:00:2B:94:4C:F8、IP地址=?
RARP服务器!
RARP响应包:你的IP地址是172.16.1.3
代理ARP

通常ARP包会被路由器隔离,但是采用代理APR(Proxy ARP)的路由器可以将ARP请求转发给邻近的网段。由此,两个以上网段的节点之间可以像在同一个网段中一样进行通信。

ICMP

辅助IP的ICMP

架构IP网络时需要特别注意两点:确认网络是否正常工作,以及遇到异常时进行问题诊断。

ICMP的主要功能包括:确认IP包是否成功送达目标地址、通知在发送过程当中IP包被废弃的具体原因、改善网络设置等。

# ICMP无法到达的消息
发送包。
路由器2为了知道主机B的MAC地址而发送ARP包。
ARP请求包。
再次发送ARP请求包(然而主机B电源关闭)
再次发送ARP请求包
多次发送ARP请求包以后
由于始终无法到达主机B,路由器2返回一个ICMP Destination Unreachable的包给主机A。

ICMP的消息大致可以分为两类:一类是通知出错原因的错误消息,另一类是用于诊断的查询消息。

# ICMP消息类型
0 回送应答(Echo Reply)
3 目标不可达(Destination Unreadable)
4 原点抑制(Source Quench)
5 重定向或改变路由(Redirect)
8 回送请求(Echo Request)
9 路由器公告(Router Advertisement)
10 路由器请求(Router Solicitation)
11 超时(Time Exceeded)
17 地址子网请求(Address Mask Request)
18 地址子网应答(Address Mask Reply)
主要的ICMP消息
ICMP目标不可达消息(类型3)

IP路由器无法将IP数据报发送给目标地址时,会给发送端返回一个目标不可达(Destination Unreachable Message)的ICMP消息,并在这个消息显示不可达的具体原因。

# ICMP不可达消息
0 Network Unreachable
1 Host Unreachable
2 Protocol Unreachable
3 Port Unreachable
4 Fragmentation Needed and Don't Fragment was Set
5 Source Route Failed
6 Destination Network Unknown
7 Destination Host Unknown
8 Source Host Isolated
9 Communication with Destination Network is Administratively
10 Communication with Destination Host is Administratively
11 Destination Network Unreachable for Type of Service
12 Destination Host Unreachable for Type of Service
ICMP重定向消息(类型5)
主机A要与主机C进行通信,此时主机A的路由控制表中没有192.168.2.0/24的记录,因此采用默认的路由发往路由器1。
路由器1知道192.168.2.0/24的子网在路由器2的后面,因此将包转发给路由器2。
由于给192.168.2.1的包直接发送给路由器2效率会更高,因此路由器1发送一个ICMP重定向的包给主机A。
主机A将这个路由信息追加到自己的路由控制表中,以备再次发送数据给主机C时使用路由器2而不是路由器1。

不过多数情况下由于这种重定向消息成为引发问题的原因,所以往往不进行这种设置。

ICMP超时消息(类型11)

IP包中有一个字段叫做TTL,它的值随着每经过一个路由器就会减1,直到减到0时该IP包会被丢弃。此时,IP路由器将会发送一个ICMP超时的消息给发送端主机,并通知该包已被丢弃。

路由器3的控制表中发生异常,导致路由上出现循环。
TTL降到0时返回ICMP Time Exceeded消息

设置IP包生存周期的主要目的是为了在路由控制遇到问题发生循环状况时避免IP包无休止地在网络上被转发。

ICMP回送消息(类型0、8)

用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端的一种消息。可以向对端主机发送回送请求的消息(ICMP Echo Request Message, 类型8),也可以接收对端主机发回来的回送应答消息(ICMP Echo Reply Message, 类型0)。网络上最常用的ping命令就是利用这个消息实现的。

ICMPv6

ICMPv6中将ICMP大致分为两类:一类是错误消息(类型0~127),另一类是信息消息(类型128~255)。

在IPv6中,从IP地址定位MAC地址的协议从ARP转为ICMP邻居探索消息(Neighbor Discovery)。这种邻居探索消息融合了IPv4的ARP、ICMP重定向以及ICMP路由器选择消息等功能于一体,甚至还提供自动设置IP地址的功能。

ICMPv6中从类型133到类型137的消息叫做邻居探索消息。邻居探索消息用于查询IPv6的地址与MAC地址的对应关系,并由邻居宣告消息得知MAC地址。邻居请求消息利用IPv6的多播地址实现传输。

# IPv6中查询MAC地址

以主机D为目标用多播发送邻居探索请求消息,查询主机D的MAC地址。
主机D通过邻居探索宣告消息将自己的MAC地址通知给主机A。

由于IPv6中实现了即插即用的功能,所以在没有DHCP服务器的环境下也能实现IP地址的自动获取。

# IP地址的自动设置
通过路由器请求消息查询IP地址前面部分的内容。
通过路由器宣告消息通知IP地址后面部分的内容。

DHCP

DHCP实现即插即用

为了实现自动设置IP地址、统一管理IP地址分配,就产生了DHCP(Dynamic Host Configuration Protocol)协议。DHCP让即插即用变得可能,DHCP不仅在IPv4中,也可以在IPv6使用。

只要接入到网络,就可以自动获取TCP/IP通信所必须的设置。
管理员只要在DHCP服务器上做一些必要的设置即可,DHCP服务器会保证IP地址的唯一性。
DHCP的工作机制
# 管理员在DHCP服务器上设置可分配的IP地址、子网掩码以及默认路由。
DHCP发现包:要求设置IP地址和子网掩码
DHCP提供包:通知可以使用的网络设置。

# DHCP的确认之所以分成这样两个阶段,是为了保证即使在DHCP服务器上重复设置也能正常工作。
DHCP请求包:通知想要使用在(2)中通知的设置。
DHCP提供包:通知允许(3)的设置。

# 由此DHCP的网络设置结束,可以进行TCP/IP通信。
# 不需要IP地址时,可以发送DHCP解除包。

# DHCP的设置中通常都会有一个限制时间的设定。DHCP客户端在这个时限之前可以发送DHCP请求包通知想要延长这个时限。

为了检查所要分配的IP地址以及已经分配了的IP地址是否可用,DHCP服务器或DHCP客户端必须具备以下功能:

  • DHCP服务器:在分配IP地址前发送ICMP回送请求包,确保没有返回应答。

  • DHCP客户端:针对从DHCP那里获得的IP地址发送ARP请求包,确保没有返回应答。

DHCP中继代理

使用DHCP中继代理实现将DHCP统一管理。有了DHCP中继代理以后,对不同网段的IP地址分配也可以由一个DHCP服务器统一进行管理和运维。这种方法使得在每个网段架设一个DHCP服务器被取代,只需在每个网段设置一个DHCP中继代理即可。它可以设置DHCP服务器的IP地址,从而可以在DHCP服务器上为每个网段注册IP地址的分配范围。

DHCP客户端会向DHCP中继代理发送DHCP请求包,而DHCP中继代理在收到这个广播包以后再以单播的形式发给DHCP服务器。服务器收到该包以后再向DHCP中继代理返回应答,并由DHCP中继代理将此包转发给DHCP客户端。由此,DHCP服务器即使不在同一个链路上也可以实现统一分配和管理IP地址。

NAT

NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。除转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT(Network Address Port Translator)技术。

NAT的工作机制
# NAT
私有IP地址的世界:目标地址163.221.120.9  源地址10.0.0.10

NAT路由器:转换IP首部中的目标地址         转换IP首部中的源地址

全局IP地址的世界:目标地址163.221.120.9  源地址202.244.174.37

# 局域网内设置为私有IP地址,在与外部通信时被替换成全局IP地址。

当私有网络内的多台机器同时都要与外部进行通信时,仅仅转换IP地址,人们不免担心全局IP地址是否不够用。这时采用包含端口号一起转换的方式(NAPT)可以解决这个问题。

# NAPT
私有IP地址的世界: 


转换表:


全局IP地址的世界:


在使用TCP或UDP的通信当中,只有目标地址、源地址、目标端口、源端口以及协议类型(TCP/UDP)五项内容都一致时才被认为是同一个通信连接。NATP路由器的转换表可以正确地转换地址跟端口的组合,令客户端A、B能同时与服务器之间进行通信。

这种转换表在NAT路由器上自动生成。例如,在TCP的情况下,建立TCP连接首次握手时的SYN包一经发出,就会生成这个表。而后又随着收到关闭连接时发出FIN包的确认应答从表中被删除。

NAT-PT(NAPT-PT)

NAT-PT是将IPv6的首部转换为IPv4的首部的一种技术。有了这种技术,那些只有IPv6地址的主机也就能够与IPv4地址的其他主机进行通信了。PT是Protocol Translation的缩写,严格来讲NAT-PT用来翻译IP地址,而NAPT-PT则是用来翻译IP首部与端口号的。

在局域网内设定成IPv6地址,与外部通信时改成IPv4地址。
NAT的潜在问题

由于NAT(NAPT)都依赖于自己的转换表,因此会有如下几点限制:

  • 无法从NAT的外部向内部服务器建立连接

  • 转换表的生成与转换操作都会产生一定的开销

  • 通信过程中一旦NAT遇到异常需要重新启动时,所有的TCP连接都将被重置

  • 即使备置两台NAT做容灾备份,TCP连接还是会被断开

解决NAT的潜在问题与NAT穿越

解决NAT上述潜在的问题有两种方法:

  • 改用IPv6

  • 即使在一个没有NAT的环境里,根据所制作的应用,用户可以完全忽略NAT的存在而进行通信。在NAT内侧主机上运行的应用为了生成NAT转换表,需要先发送一个虚拟的网络包给NAT外侧。而NAT并不知道这个虚拟的包究竟是什么,还是会照样读取包首部中的内容并自动生成一个转换表。这时如果转换表构造合理,那么还能实现NAT外侧的主机与内侧的主机建立连接进行通信。

NAT外侧与内侧可以进行通信,这种现象叫做NAT穿越

IP隧道

夹着IPv4网络的两个IPv6网络

IP隧道中可以将那些从网络A发过来的IPv6的包统和为一个数据,再为之追加一个IPv4的首部以后转发给网络C。这种在网络层的首部后面继续追加网络层首部的通信方法就叫做IP隧道

通过隧道封装的IP包:数据  TCP首部  IP首部  IP首部


通过隧道封装的IPv6包:数据  TCP首部  IPv6首部  IP首部

那些不支持的路由器可以擦用IP隧道的技术转发数据包,而对应的IP地址也可以在一旁进行统一管理。

其他IP相关技术

IP多播相关技术

在多播通信中,确认接收端是否存在非常重要。如果没有接收端,发送多播消息将会造成网络流量的浪费。而确认是否有接收端,要通过MLD(Multicast Listener Discovery)实现。它是IPv4中IGMP和IPv6中ICMPv6的重要功能之一。

IGMP(MLD)主要有两大作用:

  • 向路由器表明想要接收多播消息(并通知想接收多播的地址)

  • 向交换集线器通知想要接收多播的地址

# 基于IGMP(MLD)的多播实现

通过IGMP/MLD通知接收多播
通过IGMP/MLD探听获知接收多播消息
通过多播路由协议转发多播包

将多播包转发给拥有接收端的子网
只发送给有接收端的端口
IP任播

IP任播主要用于报警电话110与消防电话119系统。IP任播是指那些提供同一种服务的服务器配置同一个IP地址,并与最近的服务器进行通信的一种方法,它可适用于IPv4和IPv6。

在IP任播的应用当中最为有名的当属DNS根域名服务器。

IP任播中多个服务器设有同一个IP地址。当客户端发出请求时,可以由一个离客户端最近的服务器进行处理。
通信质量控制

为了控制通信质量,提出了RSVP(Resolution Reservation Protocol)技术,它包括两个内容:

  • 提供点对点的详细优先控制(IntServ)

  • 提供相对较粗粒度的优先控制(DiffServ)

IntServ是针对特定应用之间的通信进行质量控制的一种机制。这里的"特定应用"是指源IP地址、目标IP地址、源端口、目标端口以及协议号五项完成内容一致。IntServ所涉及的通信并非一致进行,只是在必要的时候进行。

基于RSVP的流量设置   ->   包的流动

DiffServ是针对特定网络进行较粗粒度的通信质量控制。进行DiffServ质量控制的网络叫做DiffServ域,在DiffServ域中的路由器会对所有进入该域IP包首部中的DSCP字段进行替换。

根据客户需求给IP首部的DiffServ字段赋值   ->   根据DiffServ地段的设定值进行优先控制
显式拥塞通知

为了解决在数据包损坏之前减少数据包的发送量,在IP层新增了一种使用ECN(Explicit Congestion Notification, 显式拥塞通知)的机制。ECN为实现拥塞通知的功能,将IP首部的TOS字段置换为ENC字段,并在TCP首部的保留位中追加CWR标志和ECE标志。ECN的机制概括起来就是在发送包的IP首部中记录路由器是否遇到拥塞,并在返回包的TCP首部中通知是否发生过拥塞。拥塞检查在网络层进行,而拥塞通知则在传输层进行,这两层的互相协助实现了拥塞通知的功能。

IP头中的ECT标志设为1发送
在转发IP头中ECT标志为1的包时,设置IP头的CE标志为1。
如果收到IP头中CE标志为1的数据,说明网络中途遇到了拥塞。TCP在发送应答回执时,将TCP头中ECE标志设为1后在发送。
TCP发现收到的应答回执中ECE标志为1,就能得知网络当中遇到了拥塞。于是可以降低包的发送的速度,并设置CWR标志为1。

(最近更新:2019年09月18日)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值