TCPSYNACKFINRSTPSHURG详解图文档格式.docx

上传人:b****6 文档编号:15925348 上传时间:2022-11-17 格式:DOCX 页数:11 大小:305.39KB
下载 相关 举报
TCPSYNACKFINRSTPSHURG详解图文档格式.docx_第1页
第1页 / 共11页
TCPSYNACKFINRSTPSHURG详解图文档格式.docx_第2页
第2页 / 共11页
TCPSYNACKFINRSTPSHURG详解图文档格式.docx_第3页
第3页 / 共11页
TCPSYNACKFINRSTPSHURG详解图文档格式.docx_第4页
第4页 / 共11页
TCPSYNACKFINRSTPSHURG详解图文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

TCPSYNACKFINRSTPSHURG详解图文档格式.docx

《TCPSYNACKFINRSTPSHURG详解图文档格式.docx》由会员分享,可在线阅读,更多相关《TCPSYNACKFINRSTPSHURG详解图文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

TCPSYNACKFINRSTPSHURG详解图文档格式.docx

--[SYN/ACK]<

--(A)

接着,A收到后会发一个对SYN包的确认包(SYN/ACK)回去,表示对第一个SYN包的确认,并继续握手操作.

SYN/ACK包是仅SYN和ACK标记为1的包.

3.(B)-->

[ACK]-->

B收到SYN/ACK包,B发一个确认包(ACK),通知A连接已建立。

至此,三次握手完成,一个TCP连接完成

Note:

ACK包就是仅ACK标记设为1的TCP包.需要注意的是当三此握手完成、连接建立以后,TCP连接的每个包都会设置ACK位

这就是为何连接跟踪很重要的原因了.没有连接跟踪,防火墙将无法判断收到的ACK包是否属于一个已经建立的连接.一般的包过滤(Ipchains)收到ACK包时,会让它通过(这绝对不是个好主意).而当状态型防火墙收到此种包时,它会先在连接表中查找是否属于哪个已建连接,否则丢弃该包

四次握手Four-wayHandshake

四次握手用来关闭已建立的TCP连接

ACK/FIN-->

--ACK<

--(A)

3.(B)<

--ACK/FIN<

4.(B)-->

ACK-->

由于TCP连接是双向连接,因此关闭连接需要在两个方向上做。

ACK/FIN包(ACK和FIN标记设为1)通常被认为是FIN(终结)包.然而,由于连接还没有关闭,FIN包总是打上ACK标记.没有ACK标记而仅有FIN标记的包不是合法的包,并且通常被认为是恶意的

连接复位Resettingaconnection

四次握手不是关闭TCP连接的唯一方法.有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST(Reset)包将被发送.注意在,由于RST包不是TCP连接中的必须部分,可以只发送RST包(即不带ACK标记).但在正常的TCP连接中RST包可以带ACK确认标记

请注意RST包是可以不要收到方确认的?

无效的TCP标记InvalidTCPFlags

到目前为止,你已经看到了SYN,ACK,FIN,和RST标记.另外,还有PSH(Push)和URG(Urgent)标记.

最常见的非法组合是SYN/FIN包.注意:

由于SYN包是用来初始化连接的,它不可能和FIN和RST标记一起出现.这也是一个恶意攻击.

由于现在大多数防火墙已知SYN/FIN包,别的一些组合,例如SYN/FIN/PSH,SYN/FIN/RST,SYN/FIN/RST/PSH。

很明显,当网络中出现这种包时,很你的网络肯定受到攻击了。

别的已知的非法包有FIN(无ACK标记)和"

NULL"

包。

如同早先讨论的,由于ACK/FIN包的出现是为了关闭一个TCP连接,那么正常的FIN包总是带有ACK标记。

"

包就是没有任何TCP标记的包(URG,ACK,PSH,RST,SYN,FIN都为0)。

到目前为止,正常的网络活动下,TCP协议栈不可能产生带有上面提到的任何一种标记组合的TCP包。

当你发现这些不正常的包时,肯定有人对你的网络不怀好意。

UDP(用户数据包协议UserDatagramProtocol)

TCP是面向连接的,而UDP是非连接的协议。

UDP没有对接受进行确认的标记和确认机制。

对丢包的处理是在应用层来完成的。

(oraccidentalarrival).

此处需要重点注意的事情是:

在正常情况下,当UDP包到达一个关闭的端口时,会返回一个UDP复位包。

由于UDP是非面向连接的,因此没有任何确认信息来确认包是否正确到达目的地。

因此如果你的防火墙丢弃UDP包,它会开放所有的UDP端口(?

)。

由于Internet上正常情况下一些包将被丢弃,甚至某些发往已关闭端口(非防火墙的)的UDP包将不会到达目的,它们将返回一个复位UDP包。

因为这个原因,UDP端口扫描总是不精确、不可靠的。

看起来大UDP包的碎片是常见的DOS(DenialofService)攻击的常见形式(这里有个DOS攻击的例子,).

ICMP(网间控制消息协议InternetControlMessageProtocol)

如同名字一样,ICMP用来在主机/路由器之间传递控制信息的协议。

ICMP包可以包含诊断信息(ping,traceroute-注意目前unix系统中的traceroute用UDP包而不是ICMP),错误信息(网络/主机/端口不可达network/host/portunreachable),信息(时间戳timestamp,地址掩码addressmaskrequest,etc.),或控制信息(sourcequench,redirect,etc.)。

你可以在http:

//www.iana.org/assignments/icmp-parameters中找到ICMP包的类型。

尽管ICMP通常是无害的,还是有些类型的ICMP信息需要丢弃。

Redirect(5),AlternateHostAddress(6),RouterAdvertisement(9)能用来转发通讯。

Echo(8),Timestamp(13)andAddressMaskRequest(17)能用来分别判断主机是否起来,本地时间和地址掩码。

注意它们是和返回的信息类别有关的。

它们自己本身是不能被利用的,但它们泄露出的信息对攻击者是有用的。

ICMP消息有时也被用来作为DOS攻击的一部分(例如:

洪水pingfloodping,死ping?

呵呵,有趣pingofdeath)?

/p>

包碎片注意ANoteAboutPacketFragmentation

如果一个包的大小超过了TCP的最大段长度MSS(MaximumSegmentSize)或MTU(MaximumTransmissionUnit),能够把此包发往目的的唯一方法是把此包分片。

由于包分片是正常的,它可以被利用来做恶意的攻击。

因为分片的包的第一个分片包含一个包头,若没有包分片的重组功能,包过滤器不可能检测附加的包分片。

典型的攻击Typicalattacksinvolveinoverlappingthepacketdatainwhichpacketheaderis典型的攻击TypicalattacksinvolveinoverlappingthepacketdatainwhichpacketheaderisnormaluntilisitoverwrittenwithdifferentdestinationIP(orport)therebybypassingfirewallrules。

包分片能作为DOS攻击的一部分,它可以crasholderIPstacks或涨死CPU连接能力。

Netfilter/Iptables中的连接跟踪代码能自动做分片重组。

它仍有弱点,可能受到饱和连接攻击,可以把CPU资源耗光。

握手阶段:

序号方向seqack

1  A->

B100000

2B->

A2000010000+1=10001

3A->

B1000120000+1=20001

解释:

1:

A向B发起连接请求,以一个随机数初始化A的seq,这里假设为10000,此时ACK=0

2:

B收到A的连接请求后,也以一个随机数初始化B的seq,这里假设为20000,意思是:

你的请求我已收到,我这方的数据流就从这个数开始。

B的ACK是A的seq加1,即10000+1=10001

3:

A收到B的回复后,它的seq是它的上个请求的seq加1,即10000+1=10001,意思也是:

你的回复我收到了,我这方的数据流就从这个数开始。

A此时的ACK是B的seq加1,即20000+1=20001

数据传输阶段:

序号  方向      seqacksize

23A->

B40000700001514

24B->

A7000040000+1514-54=4146054

25A->

B4146070000+54-54=700001514

26B->

A7000041460+1514-54=4292054

23:

B接收到A发来的seq=40000,ack=70000,size=1514的数据包

24:

于是B向A也发一个数据包,告诉B,你的上个包我收到了。

B的seq就以它收到的数据包的ACK填充,ACK是它收到的数据包的SEQ加上数据包的大小(不包括以太网协议头,IP头,TCP头),以证实B发过来的数据全收到了。

25:

A在收到B发过来的ack为41460的数据包时,一看到41460,正好是它的上个数据包的seq加上包的大小,就明白,上次发送的数据包已安全到达。

于是它再发一个数据包给B。

这个正在发送的数据包的seq也以它收到的数据包的ACK填充,ACK就以它收到的数据包的seq(70000)加上包的size(54)填充,即ack=70000+54-54(全是头长,没数据项)。

其实在握手和结束时确认号应该是对方序列号加1,传输数据时则是对方序列号加上对方携带应用层数据的长度.如果从以太网包返回来计算所加的长度,就嫌走弯路了.

另外,如果对方没有数据过来,则自己的确认号不变,序列号为上次的序列号加上本次应用层数据发送长度.

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。

(1)第一次握手:

建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。

(2)第二次握手:

服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。

(3)第三次握手:

客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

图1TCP三次握手建立连接

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。

这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。

收到一个FIN只意味着这一方向

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 军事政治

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1