TCP标志位文档格式.docx

上传人:b****8 文档编号:22129485 上传时间:2023-02-02 格式:DOCX 页数:5 大小:20.79KB
下载 相关 举报
TCP标志位文档格式.docx_第1页
第1页 / 共5页
TCP标志位文档格式.docx_第2页
第2页 / 共5页
TCP标志位文档格式.docx_第3页
第3页 / 共5页
TCP标志位文档格式.docx_第4页
第4页 / 共5页
TCP标志位文档格式.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

TCP标志位文档格式.docx

《TCP标志位文档格式.docx》由会员分享,可在线阅读,更多相关《TCP标志位文档格式.docx(5页珍藏版)》请在冰豆网上搜索。

TCP标志位文档格式.docx

这个标志的数据包经常被用来进行端口扫描。

扫描者发送一个只有SYN的数据包,如果对方主机响应了一个数据包回来,就表明这台主机存在这个端口;

但是由于这种扫描方式只是进行TCP三次握手的第一次握手,因此这种扫描的成功表示被扫描的机器不很安全,一台安全的主机将会强制要求一个连接严格的进行TCP的三次握手;

FIN:

表示发送端已经达到数据末尾,也就是说双方的数据传送完成,没有数据可以传送了,发送

FIN标志位的TCP数据包后,连接将被断开。

这个标志的数据包也经常被用于进行端口扫描。

当一个FIN标志的TCP数据包发送到一台计算机的特定端口,如果这台计算机响应了这个数据,并且反馈回来一个RST标志的TCP包,就表明这台计算机上没有打开这个端口,但是这台计算机是存在的;

如果这台计算机没有反馈回来任何数据包,这就表明,这台被扫描的计算机存在这个端口。

*SYN:

同步标志同步序列编号(SynchronizeSequenceNumbers)栏有效。

该标志仅在三次握手建立TCP连接时有效。

它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。

在这里,可以把TCP序列编

号看作是一个范围从0到4,294,967,295的32位计数器。

通过TCP连接交换的数据中每一个字节都经过序列编号。

在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

*ACK:

确认标志确认编号(AcknowledgementNumber)栏有效。

大多数情况下该标志位是置位的。

TCP报头内的确认编号栏内包含的确认编号(w+1,Figure-1)为下一个预期的序列编号,同时提示

远端系统已经成功接收所有数据。

*RST:

复位标志复位标志有效。

用于复位相应的TCP连接。

*URG:

紧急标

紧急(Theurgentpointer)标志有效。

紧急标志置位,*PSH:

推标志该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。

在处理telnet或rlogin等交互模式的连接时,该标志总是置位的。

*FIN:

结束标志带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

.TCP的几个状态对于我们分析所起的作用。

在TCP层,有个FLAGS字段,这个字段有以下几个标识:

SYN,FIN,ACK,PSH,RST,URG.其中,对于我们日常的分析有用的就是前面的五个字段。

它们的含义是:

SYN表示建立连接,FIN表示关闭连接,ACK表示响应,PSH表示有DATA数据传输,RST表示连接重置。

其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应,如果只是单个的一个SYN,它表示的只是建立连接。

TCP的几次握手就是通过这样的ACK表现出来的。

但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。

RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。

一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;

而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。

PSH为1的情况,一般只出现在DATA内容不为0的包中,也就是说PSH为1表示

的是有真正的TCP数据包内容被传递。

TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。

了解到了TCP标志位的含义,就可以了解TCP的三次握手是怎么进行的了:

发送端发送一个SYN=1,ACK=0标志的数据包给接收端,请求进行连接,这是第一次握手;

接收端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的

数据包给发送端,告诉它,可以通讯了,并且让发送端发送一个确认数据包,这是第二次握手;

最后,发送端发送一个SYN=0,ACK=1的数据包给接收端,告诉它连接已被确认,这就是第三次握手。

之后,一个TCP连接建立,开始通讯。

简述TCP协议连接建立时3次握手的过程。

根据TCP头部,说明下列3个包在连接建立过程中的次序,为什么?

该连接访问的服务是什么服务?

0020005083aa4649

3edd339637a3a012...P..FI&

gt;

.3.7...003016a0

c4c00000020405b40402080ad7

9b004062b700564a2a01030302

b..VJ*

(1)002083aa0050339637a200

000000a002P3.7003016d0841d0000

020405b40402080a0056V00404a2a

0000000001030300J*

(2)002083aa0050339637a346493ede80

10P3.7.FI&

...003016d0f34b0000010108

b.(3)解:

在TCP/IP协议中,TCP协议提供可靠的连

接服务,采用三次握手建立一个连接。

第一次握手:

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

第二次握手:

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

第三次握手:

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

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

(2)是第一次握手,flags位上为02,二进制是00000010,即表示有syn没有ack。

(1)是第二次握手,flags位上为12,二进制是00010010,即表示有syn和ack。

(3)是第三次握手,flags位上为10,二进制是00010000,即表示有ack没有syn。

该连接访问的是80端口,是为HTTP(HyperTextTransportProtocol,超文本传输协议)开放的TCP拦截即TCPintercept,大多数的路由器平台都引用了该功能,其主要作用就是防止SYN泛洪攻击。

SYN攻击利用的是TCP的三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求,而被攻击端发出的响应报文将永远发送不到目的地,那么被攻击端在等待关闭这个连接的过程中消

耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,

从而达到攻击的目的。

我们可以利用路由器的TCP拦截功能,使网络上的主机受到保护(以Cisco路由器为例)。

启TCP拦截分为三个步骤:

1.设置TCP拦截的工作模式TCP拦截的工作模式分为拦截和监视。

在拦截模式下,路由器审核所有的TCP连接,自身的负担加重,所以我们一般让路由器工作在监视模式,监视TCP连接的时间和数目,超出预定值则关闭连接。

格式:

iptcpinterceptmode

(intercept|watch)缺省为intercept2.设置访问表,以开启需要保护的主机格式:

access-list[100-199][deny|permit]tcpsourcesource-wildcarddestination

destination-wildcard举例:

要保护219.148.150.126这台主机access-list101permittcpanyhost219.148.150.1263.开启TCP拦截iptcpintercept

listaccess-list-number示例:

我们有两台服务器219.148.150.126和219.148.150.125需要进行保护,可以

这样配置:

iptcpinterceptlist101iptcpintercept

modewatchipaccess-list101permittcpany

host219.148.150.125ipaccess-list101permittcpany

host219.148.150.126经过这样的配置后,我们的主机

就在一定程度上受到了保护。

TCP(TransmissionControlProtocol)传输控制协议

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,有6种标示:

SYN(synchronous建立联机)ACK(acknowledgement确认)

PSH(push传送)FIN(finish结束)RST(reset重置)URG(urgent紧急)

Sequencenumber(顺序号码)Acknowledgenumber(确认号码)

主机A发送位码为syn=1,随机产生seq

number=1234567的数据包到服务器,主

机B由SYN=1知道,A要求建立联机;

主机B收到请求后要确认联机信息,向A发送acknumber=(主机A的

seq+1),syn=1,ack=1,随机产生seq=7654321的包第三次握手:

主机A收到后检查acknumber是否正确,即第一次发送的seqnumber+1,以及位

码ack是否为1,若正确,主机A会再发送acknumber=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。

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

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

第二次握手:

服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN

包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:

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

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

实例:

IP192.168.1.116.3337&

192.168.1.123.7788:

S3626544836:

3626544836

IP192.168.1.123.7788&

192.168.1.116.3337:

S1739326486:

1739326486ack3626544837

ack1739326487,ack1

192.168.1.116发送位码syn=1,随机产生seqnumber=3626544836的数据包到192.168.1.123,192.168.1.123由SYN=1知道192.168.1.116要求建立联机;

192.168.1.123收到请求后要确认联机信息,向192.168.1.116发送acknumber=3626544837,syn=1,ack=1,随机产生seq=1739326486的包;

第三次握手:

192.168.1.116收到后检查acknumber是否正确,即第一次发送的seqnumber+1,

以及位码ack是否为1,若正确,192.168.1.116会再发送acknumber=1739326487,ack=1,

192.168.1.123收到后确认seq=seq+1,ack=1则连接建立成功。

图解:

一个三次握手的过程(图1,图2)(图1)

(图2)第一次握手的标志位(图3)我们可以看到标志位

里面只有个同步位,也就是在做请求(SYN)(图3)第二次握手的标志位(图4)我们可以看到标志位里面有个确认位和同步位,也就是在做应答(SYN+ACK)(图4)第三次握手的标志位(图5)

我们可以看到标志位里面只有个确认位,也就是再做再次确认(ACK)(图5)一个完整的三次握手也就是请求---应答---再次确认

四次分手:

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

行关闭。

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

收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。

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

(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。

和SYN一样,一个FIN将占用一个序号。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)。

1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。

但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;

但未必你所有的数据都全部发

送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之

后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以

直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);

但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于

LAST_ACK状态下的SOCKET可能会因为超时未收到

ACK报文,而重发FIN报文,所以这个

TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

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

当前位置:首页 > 高中教育 > 理化生

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

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