浅析TCP协议

上传人:l****6 文档编号:38060663 上传时间:2018-04-26 格式:DOC 页数:4 大小:29.50KB
返回 下载 相关 举报
浅析TCP协议_第1页
第1页 / 共4页
浅析TCP协议_第2页
第2页 / 共4页
浅析TCP协议_第3页
第3页 / 共4页
浅析TCP协议_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《浅析TCP协议》由会员分享,可在线阅读,更多相关《浅析TCP协议(4页珍藏版)》请在金锄头文库上搜索。

1、1浅析协议摘要本文主要讲述了 TCP 协议的功能、它的连接的建立与终止的过程,以及他本身安全问题上的缺陷和序列号攻击的防御措施。 关键词TCP 协议 网络安全 协议攻击 一、TCP 连接的建立与终止 1.概述 虽然 TCP 使用不可靠的 IP 服务,但它却提供一种可靠的运输层服务。 2.建立连接协议(三次“握手”) (1)客户端发送一个带 SYN 标志的 TCP 报文到服务器。这是三次握手过程中的报文 1. (2)服务器端回应客户端的,这是三次握手中的第 2 个报文,这个报文同时带ACK 标志和 SYN 标志。因此它表示对刚才客户端 SYN 报文的回应;同时又标志SYN 给客户端,询问客户端是

2、否准备好进行数据通讯。 (3)客户必须再次回应服务段一个 ACK 报文,这是报文段。 3.连接终止协议(四次握手) 由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个 FIN 来终止这个方向的连接。收到一个 FIN 只意味着这一方向上没有数据流动,一个 TCP 连接在收到一个 FIN 后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。 (1)TCP 客户端发送一个 FIN,用来关闭客户到服务器的数据传送(报文段 4)。 (2)服务器收到这个 FIN,它发回一个 ACK,确认序号为收到的序号加 1(报文2段 5)。

3、和 SYN 一样,一个 FIN 将占用一个序号。 (3)服务器关闭客户端的连接,发送一个 FIN 给客户端(报文段 6)。 (4)客户段发回 ACK 报文确认,并将确认序号设置为收到序号加 1(报文段 7)。 CLOSED:表示初始状态。 LISTEN:表示服务器端的某个 SOCKET 处于监听状态,可以接受连接了。 SYN_RCVD:这个状态表示接受到了 SYN 报文,在正常情况下,这个状态是服务器端的 SOCKET 在建立 TCP 连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用 netstat 你是很难看到这种状态的,因此这种状态时,当收到客户端的 ACK 报文后,它会进入到

4、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 状态时,它想主动关闭

5、连接,向对方发送了 FIN 报文,此时该SOCKET 即进入到 FIN_WAIT_1 状态。而当对方回应 ACK 报文后,则进入到FIN_WAIT_2 状态,当然在实际的正常情况下,无论对方何种情况下,都应该马上回应 ACK 报文,所以 FIN_WAIT_1 状态一般是比较难见到的,而 FIN_WAIT_2状态还有时常常可以用 netstat 看到。 FIN_WAIT_2:上面已经详细解释了这种状态,实际上 FIN_WAIT_2 状态下的3SOCKET,表示半连接,也即有一方要求 close 连接,但另外还告诉对方,我暂时还有点数据需要传送给你,稍后再关闭连接。 TIME_WAIT:表示收到了

6、对方的 FIN 报文,并发送出了 ACK 报文,就等2MSL 后即可回到 CLOSED 可用状态了。如果 FIN_WAIT_1 状态下,收到了对方同时带 FIN 标志和 ACK 标志的报文时,可以直接进入到 TIME_WAIT 状态,而无须经过 FIN_WAIT_2 状态。 CLOSING:这种状态比较特殊,属于一种比较罕见的例外状态。正常情况下,当你发送 FIN 报文后,按理来说是应该先收到(或同时收到)对方的 ACK 报文,再收到对方的 FIN 报文。但是 CLOSING 状态表示你发送 FIN 报文后,并没有收到对方的 ACK 报文,反而却也收到了对方的 FIN 报文。什么情况下会出现此

7、种情况呢?那就是如果双方几乎在同时 close 一个 SOCKET 的话,那么就出现了双方同时发送 FIN 报文的情况,也即会出现 CLOSING 状态,表示双方都正在关闭SOCKET 连接。 CLOSE_WAIT:这种状态的含义表示在等待关闭。怎么理解呢?当对方 close 一个 SOCKET 后发送 FIN 报文给自己,你系统毫无疑问地会回应一个 ACK 报文给对方,此时则进入到 CLOSE_WAIT 状态。接下来呢,实际上你真正需要考虑的事情是察看你是否还有数据发送给对方,如果没有的话,那么你也就可以 close 这个 SOCKET,发送 FIN 报文给对方,也即关闭连接。所以你在 CL

8、OSE_WAIT 状态下,需要完成的事情是等待你去关闭连接。 LAST_ACK:这个状态是被动关闭一方在发送 FIN 报文后,最后等待对方的ACK 报文。当收到 ACK 报文后,也即可以进入到 CLOSED 可用状态了。 二、TCP 协议安全问题 41.概述 TCP 协议现在用得非常广泛,但它本身也有一些安全上的缺陷。一些缺陷是由于主机使用 IP 源地址作为认证机制引起的;Berkeley 的 r 系列涮用就是一个明显的例子。其它的一些缺陷是由于网络控制机制,特别是路由协议,缺少认证机制引起的。 2.TCP 序列号预测攻击 TCP 序列号预测攻击最早是 1985 年由 Robort.Morri

9、s 对这一安全漏洞进行阐述的。他使用 TCP 序列号预测,即使是没有从服务器得到任何响应,来产生一个TCP 包序列。这使他能欺骗在本地网络上的主机。 (1)攻击方法。TCP 协议有一个非常令人着迷的漏洞,简单的说,就是通过预测初始序列号来伪造 TCP 包.并且不需要得到回应。这样就可以使攻击者伪装成一台和服务器在同一个局域网上的一台可信任的机器。通常建立 TCP 连接需要三次握手。客户机送一个初始序列号 ISNc,服务器应答它并送出它自己的序列号ISNs,客户机再发出一个应答包。这三个数据包发送以后,就可以传输数据了。这个过程可以用下图来表示: C 一S:SYN(ISNc) S 一C:SYN(

10、ISNs),ACK(ISNc) C 一S:ACK(ISNs) C 一S:data And/or S 一C:data 这就是说,要使一个连接建立起来,C 必须知道 ISNs,这个数多少有一些随机性,假没入侵者 X 有一种方法可以预测 ISNs。在这种情况下,他可以通过以下的步骤来模仿可信任的主机 T: X-S:SYN(ISNx),SRC=T S-T:SYN(ISNs),ACK(ISNx) X 一S:ACKfISNs),SRC=T 5X 一S:ACK(ISNs),SRC=T,nasty-data 即使 S 一T 的数据包不经过 X,X 也能知道它的内容,因此能发送数据。如果 x 在一个能够执行命令

11、的连接上实行这种攻击(例如 Berkeley rsh 服务),他就可以运行恶意的命令。那么怎样预测随机的 ISN 呢?在 Berkeley 系统中,初始序列号变量是以每秒固定的数目递增的,而每次连接的序列号就是这个变量的一半。因此,如果有人通过合法的连接观察 ISNs,他就有很大的机会通过计算得到下一次连接的 ISNS。 应该指出的是服务器的应答消息 S 一T:SYN(ISNs),ACK(ISNx)。并没有消除这种攻击;虽然真正的 T 主机将接收到它,并且会重设连接。这并不是一个严重的障碍,因为我们可以通过一些拒绝服务的攻击使 T 主机暂时失效,也可以在 T 主机关机或重起的时候攻击。还有一种

12、通过 netstat 服务对 TCP 序列号进行的攻击。在这种攻击中,入侵者模仿一台关闭的主机。如果在目标机上有 netstat 服务.它就会提供另一个端口必要的序列号信息:这样就根本不需要猜测了。 (2)防御。很明显,这种攻击的关键是 Berkeley 系统中初始序列号变量变化方式太简单了。TCP 标准要求这个变量必须以每秒钟将近 250,000 的速度增长:Berkerey 系统则使用了一个比它慢得多的速度然而关键的因素是间隔的大小而不是平均速度。从 4.2BSD 系统的每秒增加 128 到 4.3 BSD 的每秒增加 125,000的改变是没有意义的。下面让我们来看看以 250,000

13、的频率运行是否有用。为了简单起见,现忽略了其它连接产生的问题,仅仅考虑本计数器固定速度的改变:为了知道当前的序列号,必须发送一个 SYN 包,并接收它的回应。如下: X 一S:SYNfISNx1 S 一X:SYN(ISNs),ACK(ISNx)(1) 第一个使服务器产生下一序列号的伪造的数据包,可以紧跟在服务器对探测包的回应后送出: 6X 一S:SYN(ISNx),SRC=T (2) 序列号 ISNs 在应答中使用 S 一T:SYN(ISNs),ACK(ISNx) 它是由数据包(1)产生到服务器接收到数据包(1)之间的时间唯一确定的。但是这个时间是由 X 到 S 的来回时间确定的。因此如果攻击

14、者能够测量或预测到这个时间。即使使用一个能精确的 4 微秒的时钟也不能阻止这种攻击。对来回时间的测量能精确到什么程度呢?如果假设网络很稳定,我们可以精确到 10 毫秒左右。很明显,互联网不可能长期这么稳定.但是却有可能在一个较短的时间内稳定。因此我们有 2500 个 ISNs 的可能值。考虑到重新测量来回时间所需的时间,我们假设每次尝试需要花 5 秒,那么一个攻击者很可能在 7500 秒内获得成功。条件更好的网络或更精确的测量,能够提高成功的可能性。因此,仅仅是按 TCP 协议标准是不行的。在这里,我们默认的假设是目标机上不运行任何进程。实际上,当新的请求到达时,是会运行一些进程的。在一个 6MIPS 的机器上,一个时钟周期-4 秒大约可执行 25 条指令。高优先级的中断 TCB 分配顺序的不同,都对下一个序列号有相当大影响。这种随机的效果是被认为是主机的优点。 参考文献: 1于万国,陈日升.计算机网路安全与防范J.中国教育科研与探索,2007,(5).

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号