TCP连接的建立与终止的知识点巩固-网络协议

TCP是一个面向连接的协议。无论哪一方想另一方发送数据之前,都必须现在双方之间建立一条连接。这种两端间连接的建立与无连接协议如UDP不同。一端使用UDP想另一端发送数据报时,无需任何预先的握手。

连接建立与终止的时间系列

发送第一个SYN的一端将执行主动打开(active open)。接收这个SYN并发回下个一SYN的另一端执行被动打开(passive open)

建立一个连接需要三次握手,而终止一个连接要经过四次握手。这由TCP的半关闭(half-close)造成的。既然一个TCP连接时全双工,因此每个方向必须单独的进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向连接。当一端收到一个FIN,它必须通知应用层另一端已经终止了那个方向的数据传送。发送FIN通常是应用层进行关闭的结果。

收到一个FIN只意味着在这一方向上没有数据流动,一个TCP连接在收到一个FIN后任能发送数据。而这对利用半关闭的应用来说是可能的,尽管在实际应用中只有很少的TCP应用程序这样做。

首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。通常一方完成主动关闭而另一方完成被动关闭。

发送FIN将导致应用程序关闭它们的连接,这些FIN的ACK是由TCP软件自动产生的。

当一端为建立连接发送它的SYN时,它为连接选择一个初始序号。ISN随时间而变化,因此每个连接都将具有不同的ISN。RFC 793 【Postel 1981c】指出ISN可看作时一个32比特的计数器,每4ms加1.这样选择序号的目的在于防止网络中被延迟的分组在以后又被传送,而导致某个连接的一方对它作错误的解释。

初始化序列号(ISN),在开机的时候,它就有一个函数,每个操作系统不一样,来不断的增加初始序列号的值。因为它的最大值为2的32次方,所以当达到最大值后,会又从0开始计数。

当在T1时间客户端要向服务器建立TCP,发送三次握手,就需要发一个SYN包。这时客户端就会截取T1时间的ISN作为SYN包的序列号,当服务器收到SYN包,在T2时间要回送SYN,ACK的时候,它就会截取T2时间的ISN作为SYN的序列号。ACK序列号为T1时间的ISN+1.

ASA的一个功能,随机初始化序列号扰乱。为什么需要扰乱初始化序列号,

1.一台PC它的ISN有自己的增长规律,如果它在ASA里面,有些攻击者他会不断的去连接PC,PC这时候就会不断的回复SYN,ACK。攻击者就能得到不同节点时间段的ISN,然后用这些不同时间段的ISN来计算出PC的ISN增长规律,通过判断ISN增长规律,攻击者就有可能判断出你的操作系统。

2.一台PC和某个主机已经建立了TCP连接,攻击者想做一个会话劫持,它需要伪装PC的IP地址、端口号、协议号。这些伪装了还是不行,还得知道你的序列号在什么范围。所以攻击者这时候也会通过多次探测来猜测ISN的增长规律,当得到ISN的增长规律会就会把PC干掉,攻击者自己连接到相应的主机。

所以ASA就要防止这些攻击者通过多次试探来获取PC的ISN增长规律,因为一旦PC的ISN增长规律被获取后,攻击者就可以对我的操作系统进行判断,而且还有可能造成更严重的会话劫持。所以ASA会对初始化序列号进行扰乱。

当PC在T1时刻发送SYN的时候,经过ASA,ASA会把T1时刻的ISN随机加一个数发走,在T2时刻发送SYN的时候,经过ASA,ASA又会把T2时刻的ISN随机加一个会减去一个数发走。由于ASA总是会在ISN的数上随机加上一个或者减去一个数,这样的话,攻击者在看你的ISN的时候就会觉得没有规律可寻。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注