TCP标志位.docx

上传人:b****5 文档编号:3434636 上传时间:2022-11-23 格式:DOCX 页数:6 大小:19.17KB
下载 相关 举报
TCP标志位.docx_第1页
第1页 / 共6页
TCP标志位.docx_第2页
第2页 / 共6页
TCP标志位.docx_第3页
第3页 / 共6页
TCP标志位.docx_第4页
第4页 / 共6页
TCP标志位.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

TCP标志位.docx

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

TCP标志位.docx

TCP标志位

TCP标志位

TCP标志位

URG:

此标志表示TCP包的紧急指针域(后面马上就要说到)有效,用来保证TCP连接不被中断,并且督促中间层设备要尽快处理这些数据;ACK:

此标志表示应答域有效,就是说前面所说的TCP应答号将会包含在TCP数据包中;有两个取值:

0和1,为1的时候表示应答域有效,反之为0;PSH:

这个标志位表示Push操作。

所谓Push操作就是指在数据包到达接收端以后,立即传送给应用程序,而不是在缓冲区中排队;RST:

这个标志表示连接复位请求。

用来复位那些产生错误的连接,也被用来拒绝错误和非法的数据包;SYN:

表示同步序号,用来建立连接。

SYN标志位和ACK标志位搭配使用,当连接请求的时候,SYN=1,ACK=0;连接被相应的时候,SYN=1,ACK=1;这个标志的数据包经常被用来进行端口扫描。

扫描者发送一个只有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个包在连接建立过程中的次序,为什么?

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

0020005083aa46493edd339637a3a012...P..FI>.3.7...003016a0c4c00000020405b40402080ad79b................004062b700564a2a01030302b..VJ*....

(1)002083aa0050339637a200000000a002.....P3.7.......003016d0841d0000020405b40402080a0056...............V00404a2a0000000001030300J*........

(2)002083aa0050339637a346493ede8010.....P3.7.FI>...003016d0f34b00000101080a00564a36d79b...K.......VJ6..004062b7b.(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)  缺省为intercept  2.设置访问表,以开启需要保护的主机  格式:

access-list[100-199][deny|permit]tcpsourcesource-wildcard  destinationdestination-wildcard  举例:

要保护219.148.150.126这台主机  access-list101permittcpanyhost219.148.150.126  3.开启TCP拦截  iptcpinterceptlistaccess-list-number  示例:

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

  iptcpinterceptlist101  iptcpinterceptmodewatch  ........  ipaccess-list101permittcpanyhost219.148.150.125  ipaccess-list101permittcpanyhost219.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,随机产生seqnumber=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

IP192.168.1.116.3337>192.168.1.123.7788:

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发送ack

number=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