<<返回
1.1 TCP/IP的体系结构
 
 
1.1 TCP/IP的体系结构
TCP/IP并不是仅仅包括TCP(Transfer Control Protocol)和IP(Internet Protocol)协议,它是一系列协议的集合,是一种体系结构。相对于ISO/OSI制定的七层参考模型而言,TCP/IP的体系结构一般分为五层(也有定义为七层,即包括了会话层和表示层)。TCP/IP的体系结构可以用图1.1来表示。

图1.1 TCP/IP体系结构模型
数据链路层和物理层采用现有的IEEE802局域网协议,TCP/IP真正定义的层次主要包括三层,即网络层、传输层和应用层。
1.1.1 网络层协议
网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的路由选择。在TCP/IP协议组中,网络层协议包括IP协议(网际协议)、ICMP协议(Internet网际控制报文协议)、ARP协议(地址解析协议)和RARP(反向地址解析协议)。
1.网际协议IP
网际协议IP(Internet Protocol)主要实现网络层的功能,即屏蔽不同子网技术的差异,向上层提供一致的服务,具体功能包括:
l 路由选择和转发
l 通过网络连接在主机之间提供分组交换功能
l 分组的分段与成块,差错控制、顺序化、流量控制
IP协议是TCP/IP网络层的主要协议。IP协议定义了一种高效、不可靠和无连接的传输方式。传输层将报文分成若干数据报,每个数据报最长不超过64K字节。在传输过程中,网络层可能将数据报分成更小的单位,当数据报全部到达目的地后,传输层将它们重新组装成原来的报文。数据报在网络层传输时无需连接和确认,所以不能保证传输的可靠性。一个数据报可能丢失,或延时,或发生传输顺序错误。传输设备并不检测这些情况,也不通知通信双方。同时,每个数据报的传递与其他数据报是相互独立的,到达顺序与发送顺序不一定相同。这些差错控制和流量控制由上层(传输层)来完成。
IP协议定义了通过TCP/IP网络传输的数据的格式。IP数据报由报头和数据两部分组成。报头部分包含了目的地址和源地址,数据的类型等信息。IP报头格式如图1.2所示。

图1.2 IP报头格式
下面解释各字段的含义:
(1) 版本字段:记录数据报文符合协议的哪一个版本协议。版本号表示发送者、接收者和路由器对该数据的处理都要按所示的版本进行。现在的版本号是4。
(2) 首部长度:指明报头的长度。
(3) 服务类型:一共8个比特,前3个比特表示优先级,第4个比特表示要求有更低的时延,第5个比特表示要求有更高的吞吐量,第6个比特表示要求更高的可靠性,第7个比特表示选择价格更低廉的路由,最后一个比特未用。
(4) 总长度包括报头长度和数据长度,最大长度=216 = 65536字节。
(5) 标识符:用于数据分段,一个数据报在传输过程中可能分成若干段,标识符可以区分某分段属于某报文,一个数据报的所有分段具有相同的标识符。
(6) DF:该位置1时表示不分段,置0时允许分段。
(7) MF:表示后面还有一分段,除了最后一个分段,所有分段的MF置为1。
(8) 段偏移:指明此分段在当前数据报中的位置。
(9) 生存周期:限定分段生存期的计数器,当它为0时该分段被抛弃,时间单位为秒。
(10) 协议:指明此数据报属于哪一种传送过程,如TCP、UDP等。
(11) 报头校验和:只校验报头。
(12) 源端地址和目的端地址:指明源和目的方的网络编号与主机号,即IP地址。
(13) 可选字段:用于协商设定服务参数。
2.地址解析协议ARP和反向地址解析协议RARP
地址解析协议ARP(Address Resolution Protocol)的目的是将IP地址映射成物理地址。
反向地址解析协议RARP(Reverse Address Resolution Protocol)将物理地址映射为IP地址。
地址解析协议信息通过网络时特别重要。在网络层的分组中,包括了发送方和接收方的IP地址。在这个分组离开发送计算机之前,必须要找到目标的硬件地址(按照网络分层思想,最终通信都是在最底层完成的,因此,必须知道硬件地址)。发送方发出一个ARP请求,该消息在网上广播,并最终由一个进程接收,它回复物理地址。这个回复消息由原先的那台发送广播消息的计算机接收,传输过程就开始了。
每一个主机都有一个ARP高速缓存(ARP Cache),存储IP地址到物理地址的映射表,这些都是该主机目前所知道的地址。例如,当主机A欲向本局域网上的主机B发送一个IP数据报时,就先在ARP高速缓存中查看有无主机B的IP地址。如果存在,就可以查出其对应的物理地址,然后将该数据报发往此物理地址;如果不存在,主机A就运行ARP,按照下列步骤查找主机B的物理地址:
(1) ARP进程在本局域网上广播发送一个ARP请求分组,目的地址为主机B的IP地址;
(2) 本局域网上的所有主机上运行的ARP进程都接收到此ARP请求分组;
(3) 主机B在ARP请求分组中见到自己的IP地址,就向主机A发送一个ARP响应分组,并写入自己的物理地址;
(4) 主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到物理地址的映射。
3.Internet控制消息协议ICMP
尽管网络层IP数据报的传送不保证不丢失,差错控制由传输层完成,但是网络层对数据报的传送还是有一定的质量保证功能,那就是使用Internet控制报文协议ICMP(Internet Control Message Protocol)。ICMP是用来诊断网络问题的重要工具。通过ICMP收集的诊断信息包括:一台主机关机、一个网关堵塞和工作不正常、网络中其他的故障等。ICMP的报文可以分为ICMP差错报文和ICMP询问报文。
最著名的ICMP实现是网络工具Ping。Ping通常用来判断一台远程机器是否开着,数据报从用户的计算机发到远程计算机。这些报文通常返回用户的计算机。如果没有返回数据报到用户计算机,Ping程序就产生一个表示远程计算机关机的消息。关于Ping命令的使用将在3.4.1节中详细介绍。
1.1.2 传输层协议
传输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议组中,有两个互不相同的传输协议:TCP(Transfer Control Protocol传输控制协议)和UDP(User DataGram Protocol用户数据报协议)。
TCP为两台主机提供高可靠性的数据通信。它提供面向连接的服务,在传输之前,双方首先建立连接,然后传输有序的字节流,传输完毕后再关闭连接。
UDP提供了一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。UDP传输的数据单位是报文,且不需要双方建立连接。任何必需的可靠性必须由应用层来提供。
下面对TCP协议做一个说明。
TCP协议在IP协议之上。与IP协议提供不可靠传输服务不同的是,TCP协议为其上的应用层提供了一种可靠传输服务。这种服务的特点是:可靠、全双工、流式和无结构传输。
TCP协议使用了一个叫积极确认和重发送(Positive Acknowledgement with Retransmission)的技术来实现数据的可靠传送。
接收者在收到发送者发送的数据后,必须发送一个相应的确认(ACK)消息,表示它已经收到了数据。发送者保存发送的数据的记录,在发送下一个数据之前,等待这个数据的确认消息。在它发送这个数据的同时,还启动了一个计时器。如果在一定时间之内,没有接收到确认消息,就认为是这个数据在传送时丢失了,接着,发送方就会重新发送这个数据。
但这种方法产生了一个问题,就是包的重复。如果网络传输速度比较低,在等待时间结束后,确认消息才返回到发送者,那么,由于发送者采用的发送方法,就会出现重复的数据了。一种解决的办法是给每个数据一个序列号,并需要发送者记住哪个序列号的数据已经确认了。为了防止由于延时或重复确认,规定确认消息里也要包含确认序列号,这样发送者就能知道哪个包已经确认了。
1.TCP连接
TCP协议使用三次握手来建立一个TCP连接。
握手过程的第一个报文的代码位设置为SYN,序列号为x,表示开始一次握手。接收方收到后,向发送者回发一个确认报文。代码位设置为SYN和ACK,序列号设置为y,确认序列号设置为x+1。发送者在收到确认报文后,知道可以发送TCP数据了,于是,它又向接收者发送一个ACK报文,表示双方的连接已经建立。
在完成握手之后,就开始正式的数据传输。
上面握手报文中的序列号都是随机产生的。
从上述过程可以看出,连接至少需要三个分组,因此称为三次握手(Three-Way Handshake)。
2.TCP连接终止
TCP的连接需要用三个分组才能建立,而终止一个连接则需要四个分组!具体流程如下:
(1) 某个应用进程首先调用close,称为主动关闭(Active Close)。这一端的TCP于是发送一个FIN分组,表示数据发送完毕;
(2) 接收到FIN的另一端执行被动关闭(Passive Close)。这个FIN由TCP确认,并作为文件结束符传送给接收方应用进程,因为FIN意味着应用进程在此连接上再也接收不到额外的数据;
(3) 一段时间后,接收到文件结束符的应用进程调用close,关闭其套接口。这导致它的TCP也发送一个FIN。
(4) 接收到这个FIN的原发送方TCP对它进行确认。
因此,每个方向都需要有一个FIN和ACK,所以终止TCP连接一般需要四个分组。
3.TCP/SYN攻击
上面介绍了TCP连接和关闭的过程,尤其要掌握三次握手的过程,这是SYN攻击的原理。
TCP/SYN作为一种拒绝服务攻击存在的时间已经有20多年了。其原理是:当一台黑客机器A要与另外一台ISP(Internet Service Provider 网际服务提供者)的主机B建立连接时,它的通信方式是先发一个SYN包告诉对方主机B说"我要和你通信了",当B收到时,就回复一个ACK/SYN确认请求包给A主机。如果A是合法地址,就会再回复一个ACK包给B主机,然后两台主机就可以建立一个通信渠道了。可是黑客机器A发出的包的源地址是一个虚假的IP地址,或者可以说是实际上不存在的一个地址,ISP主机B发出的那个ACK/SYN包当然就找不到目标地址了。如果这个ACK/SYN包一直没有找到目标地址,那么也就是目标主机无法获得对方回复的ACK包。而在缺省超时的时间范围以内,主机的一部分资源要花在等待这个ACK包的响应上,假如短时间内主机A接到大量来自虚假IP地址的SYN包,它就要占用大量的资源来处理这些错误的等待,最后的结果就是系统资源耗尽以至瘫痪。
1.1.3 应用层协议
应用层协议是专门为用户提供应用服务的。这里主要介绍下列三种应用层协议。
1.仿真终端协议Telnet
Telnet在RFC 854中有详细的描述,Telnet协议的目的就是提供一个通用、双向、面向八位字节的通信机制。它的最初目的是允许终端和面向终端的进程之间的交互。
Telnet不仅允许用户登录到一个远程主机,还允许用户在那台计算机上执行命令。要使用Telnet,用户要指定启动Telnet客户的命令,并在后面指定目标主机名字。如在Linux中:
$Telnet www.nuaa.edu.cn
这个命令启动Telnet过程,连接到www.nuaa.edu.cn。这个连接可能被接受或拒绝,这与目标主机的配置有关。由于Telnet存在一些漏洞,所以一般的服务器都不开放Telnet服务。
2.文件传输协议FTP
文件传输协议FTP(File Transfer Protocol)实际上是一个全球免费拷贝工具的协议。
FTP是从一个系统向另一个系统传递文件的标准方法。RFC 765定义了FTP的协议。FTP的目标是:
(1) 促进文件和程序的共享。
(2) 鼓励间接和含蓄的使用远程计算机。
(3) 使用户不必面对主机间使用的不同的文件存储系统。
(4) 有效和可靠地传输文件。
FTP文件传输应用在客户/服务环境。请求机器启动一个FTP客户端软件,这就给目标文件服务器发出一个请求。通常,这个请求被送到端口21。连接建立起来后,客户端和服务器之间可以进行文件传递(下载、上传)等操作。
3.简单邮件传输协议SMTP
简单邮件传输协议SMTP(Simple Mail Transfer Protocol)使得邮件传输可靠和高效。
SMTP是一个相当小而有效的协议。用户给SMTP服务器发出请求,随之建立双向的连接。客户发MAIL指令,指示它想给Internet上的某处的一个收件人发信。如果SMTP允许这个操作,就发回客户机一个肯定的确认。随后,会话开始。客户可以告知收件人的名称和地址,以及要发送的消息。
<<返回