[摘要]本文主要讲述了tcp协议的功能、它的连接的建立与终止的过程,以及他本身安全问题上的缺陷和序列号攻击的防御措施。
[关键词]tcp协议 网络安全 协议攻击
一、tcp连接的建立与终止
1.概述
虽然tcp使用不可靠的ip服务,但它却提供一种可靠的运输层服务。
2.建立连接协议(三次“握手”)
(1)客户端发送一个带syn标志的tcp报文到服务器。这是三次握手过程中的报文1.
(2)服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ack标志和syn标志。因此它表示对刚才客户端syn报文的回应;同时又标志syn给客户端,询问客户端是否准备好进行数据通讯。
(3)客户必须再次回应服务段一个ack报文,这是报文段。
3.连接终止协议(四次握手)
由于tcp连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个fin来终止这个方向的连接。收到一个 fin只意味着这一方向上没有数据流动,一个tcp连接在收到一个fin后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1)tcp客户端发送一个fin,用来关闭客户到服务器的数据传送(报文段4)。
(2)服务器收到这个fin,它发回一个ack,确认序号为收到的序号加1(报文段5)。和syn一样,一个fin将占用一个序号。loCALHOsT
(3)服务器关闭客户端的连接,发送一个fin给客户端(报文段6)。
(4)客户段发回ack报文确认,并将确认序号设置为收到序号加1(报文段7)。
closed:表示初始状态。
listen:表示服务器端的某个socket处于监听状态,可以接受连接了。
syn_rcvd:这个状态表示接受到了syn报文,在正常情况下,这个状态是服务器端的socket在建立tcp连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat你是很难看到这种状态的,因此这种状态时,当收到客户端的ack报文后,它会进入到established状态。
syn_sent:这个状态与syn_rcvd遥相呼应,当客户端socket执行connect连接时,它首先发送syn报文,因此也随即它会进入到了syn_sent状态,并等待服务端的发送三次握手中的第2个报文。syn_sent状态表示客户端已发送syn报文。
established:表示连接已经建立了。
fin_wait_1:fin_wait_1和fin_wait_2状态的真正含义都是表示等待对方的fin报文。而这两种状态的区别是:fin_wait_1状态实际上是当socket在established状态时,它想主动关闭连接,向对方发送了fin报文,此时该socket即进入到fin_wait_1状态。而当对方回应ack报文后,则进入到fin_wait_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应ack报文,所以fin_wait_1状态一般是比较难见到的,而fin_wait_2状态还有时常常可以用netstat看到。
fin_wait_2:上面已经详细解释了这种状态,实际上fin_wait_2状态下的socket,表示半连接,也即有一方要求close连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。
time_wait:表示收到了对方的fin报文,并发送出了ack报文,就等2msl后即可回到closed可用状态了。如果fin_wait_1状态下,收到了对方同时带fin标志和ack标志的报文时,可以直接进入到time_wait状态,而无须经过fin_wait_2状态。
closing:这种状态比较特殊,属于一种比较罕见的例外状态。正常情况下,当你发送fin报文后,按理来说是应该先收到(或同时收到)对方的ack报文,再收到对方的fin报文。但是closing状态表示你发送fin报文后,并没有收到对方的ack报文,反而却也收到了对方的fin报文。什么情况下会出现此种情况呢?那就是如果双方几乎在同时close一个socket的话,那么就出现了双方同时发送fin报文的情况,也即会出现closing状态,表示双方都正在关闭socket连接。
close_wait:这种状态的含义表示在等待关闭。怎么理解呢?当对方close一个socket后发送fin报文给自己,你系统毫无疑问地会回应一个ack报文给对方,此时则进入到close_wait状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以close这个socket,发送fin报文给对方,也即关闭连接。所以你在close_wait状态下,需要完成的事情是等待你去关闭连接。
last_ack:这个状态是被动关闭一方在发送fin报文后,最后等待对方的ack报文。当收到ack报文后,也即可以进入到closed可用状态了。
二、tcp协议安全问题
1.概述
tcp协议现在用得非常广泛,但它本身也有一些安全上的缺陷。一些缺陷是由于主机使用ip源地址作为认证机制引起的;berkeley的r系列涮用就是一个明显的例子。其它的一些缺陷是由于网络控制机制,特别是路由协议,缺少认证机制引起的。
2.tcp序列号预测攻击
tcp序列号预测攻击最早是1985年由robort.morris对这一安全漏洞进行阐述的。他使用tcp序列号预测,即使是没有从服务器得到任何响应,来产生一个tcp包序列。这使他能欺骗在本地网络上的
[1] [2] 下一页