TCP三次握手四次挥手详解

合集下载

TCP IP三次握手、四次挥手详解

TCP IP三次握手、四次挥手详解

TCP(Transmission Control Protocol) 传输控制协议TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:位码即tcp标志位,有6种标示:SYN(synchronous建立联机)ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码)第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A 的seq+1),syn=1,ack=1,随机产生seq=7654321的包第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机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状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据.实例:IP 192.168.1.116.3337 > 192.168.1.123.7788: S 3626544836:3626544836 IP 192.168.1.123.7788 > 192.168.1.116.3337: S 1739326486:1739326486 ack 3626544837IP 192.168.1.116.3337 > 192.168.1.123.7788: ack 1739326487,ack 1第一次握手:192.168.1.116发送位码syn=1,随机产生seq number=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收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,192.168.1.116会再发送ack number=1739326487,ack=1,192.168.1.123收到后确认seq=seq+1,ack=1则连接建立成功。

TCP三次握手四次挥手

TCP三次握手四次挥手

TCP三次握手/四次挥手详解1、建立连接协议(三次握手)(1)客户端发送一个带SYN标志的TCP报文到服务器。

这是三次握手过程中的报文1。

(2)服务器端回应客户端的,这是三次握手中的第2个报文,这个报文同时带ACK标志和SYN标志。

因此它表示对刚才客户端SYN报文的回应;同时又标志SYN给客户端,询问客户端是否准备好进行数据通讯。

(3)客户必须再次回应服务段一个ACK报文,这是报文段3。

2、连接终止协议(四次挥手)由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。

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

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

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

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

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

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

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

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

CLOSED: 这个没什么好说的了,表示初始状态。

LISTEN: 这个也是非常容易理解的一个状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了。

SYN_RCVD: 这个状态表示接受到了SYN报文,在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat 你是很难看到这种状态的,除非你特意写了一个客户端测试程序,故意将三次TCP握手过程中最后一个ACK报文不予发送。

因此这种状态时,当收到客户端的ACK报文后,它会进入到ESTABLISHED状态。

SYN_SENT:这个状态与SYN_RCVD遥想呼应,当客户端SOCKET执行CONNECT连接时,它首先发送SYN报文,因此也随即它会进入到了SYN_SENT状态,并等待服务端的发送三次握手中的第2个报文。

浅探网络1---tcp协议详解(三次握手和四次挥手)

浅探网络1---tcp协议详解(三次握手和四次挥手)

浅探⽹络1---tcp协议详解(三次握⼿和四次挥⼿)TCP协议是⽹络多层协议中运输层的最重要的协议之⼀,运输层是两台主机的进程之间的通信。

除了TCP还有⼀个是UDP协议(⽤户数据包协议)TCP全称是Transmission Control Protocol,意思是传输控制协议⼀、TCP简介1.TCP协议两个对等运输实体之间进⾏传送的数据单位是:TCP报⽂段2.TCP提供的是⾯向连接的服务,在传送数据之前必须建⽴连接,数据传送完成之后需要关闭连接,TCP只可点对点,不可⼴播或多播,TCP连接是可靠的运输服务。

3.TCP的⼯作⽅式类似于打电话,打电话之前需要先拨号(号码就是连接的IP+端⼝号)连接,通话结束之后关闭连接4.TCP提供可靠交付,即TCP传输的数据⽆差错、不丢失、不重复且有序5.TCP⽀持全双⼯通信,即通信双⽅可随时发送数据,发送⽅发送完数据会先放到发送缓存中,发送⽅发送完毕就可以⼲别的事去了,TCP 会在合适的时机将数据发送给接受⽅,接收⽅接收到数据会先把数据放到接收缓存中,应⽤程序会在合适的时机在缓存中获取数据。

6.TCP是⾯向字节流的,流⼊到进程或从进程中流出的是字节序列。

⽽发送时和接收时除了传输的业务数据,可能还会额外加⼀些字节数据,⽤于发送⽅和接收⽅处理。

⽐如在微信聊天中需要提醒接收⽅会添加@XXX,⽽接收⽅只需要接收有⽤信息,@信息是和业务⽆关的。

7.TCP连接的双⽅不是两个主机、不是两个IP地址、不是两个应⽤程序、⽽是两个套接字,每个套接字socket=(IP地址:端⼝号),每⼀个TCP连接必须有唯⼀的两个套接字,即TCP连接={套接字1,套接字2}={(IP1,port1),(IP2,port2)}⼆、TCP三次握⼿和四次挥⼿TCP是⾯向连接的协议,所以协议的基础就是需要有连接,⽽发起连接的⼀⽅可以称为客户端,等待连接的⼀⽅可以称为服务端。

⽽TCP建⽴连接的过程称为握⼿,每次握⼿客户端和服务器之前需要交换三个报⽂段,因此也叫做“三次握⼿”。

计算机网络三次握手与四次挥手

计算机网络三次握手与四次挥手

三次握手过程详解TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道上图主要包括三部分:建立连接、传输数据、断开连接。

1.建立TCP连接很简单,通过三次握手便可建立连接。

2.建立好连接后,开始传输数据。

TCP数据传输牵涉到的概念很多:超时重传、快速重传、流量控制、拥塞控制等等。

3.断开连接的过程也很简单,通过四次握手完成断开连接的过程三次握手建立连接:第一次握手:客户端发送syn包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。

理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

传输数据过程:a.超时重传超时重传机制用来保证TCP传输的可靠性。

每次发送数据包时,发送的数据报都有seq号,接收端收到数据后,会回复ack进行确认,表示某一seq 号数据已经收到。

发送方在发送了某个seq包后,等待一段时间,如果没有收到对应的ack回复,就会认为报文丢失,会重传这个数据包。

b.快速重传接受数据一方发现有数据包丢掉了。

就会发送ack报文告诉发送端重传丢失的报文。

如果发送端连续收到标号相同的ack包,则会触发客户端的快速重传。

比较超时重传和快速重传,可以发现超时重传是发送端在傻等超时,然后触发重传;而快速重传则是接收端主动告诉发送端数据没收到,然后触发发送端重传。

c.流量控制这里主要说TCP滑动窗流量控制。

描述tcp三次握手和4次挥手的过程

描述tcp三次握手和4次挥手的过程

TCP三次握手和四次挥手是计算机网络中非常重要的概念,它们是建立和断开TCP连接时所遵循的标准流程。

本文将对TCP三次握手和四次挥手的过程进行详细描述,帮助读者深入了解这两个过程的原理和流程。

一、TCP三次握手的过程TCP三次握手是在客户端和服务器之间建立连接时所执行的步骤,具体过程如下:1. 客户端发送SYN包给服务器:当客户端希望发起一个TCP连接时,它会向服务器发送一个SYN(同步)包,其中包含了客户端的初始序列号。

2. 服务器收到SYN包并回复ACK+SYN包:服务器在接收到客户端的SYN包后,会回复一个ACK(确认)和SYN包,其中ACK用于确认收到客户端的SYN包,而SYN用于告知客户端服务器的初始序列号。

3. 客户端收到ACK+SYN包并回复ACK包:客户端在接收到服务器的ACK+SYN包后,会回复一个ACK包,用于确认服务器收到了客户端的SYN包。

这样,TCP连接就建立起来了,客户端和服务器可以开始进行数据传输了。

以上就是TCP三次握手的完整过程,通过这个过程,客户端和服务器成功建立了TCP连接,可以进行数据交换。

二、TCP四次挥手的过程TCP四次挥手是在客户端和服务器断开连接时所执行的步骤,具体过程如下:1. 客户端发送FIN包给服务器:当客户端希望断开与服务器的TCP连接时,它会向服务器发送一个FIN(结束)包,表示客户端不再发送数据了。

2. 服务器收到FIN包并回复ACK包:服务器在接收到客户端的FIN 包后,会回复一个ACK包,用于确认收到客户端的FIN包。

此时,服务器仍然可以向客户端发送数据。

3. 服务器发送FIN包给客户端:当服务器不再需要连接时,它会向客户端发送一个FIN包,表示服务器不再发送数据了。

4. 客户端收到FIN包并回复ACK包:客户端在接收到服务器的FIN 包后,会回复一个ACK包,用于确认收到服务器的FIN包。

此时,TCP连接就完全释放了,客户端和服务器之间的连接彻底断开。

TCP协议的三次握手四次挥手简单理解

TCP协议的三次握手四次挥手简单理解

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状态,完成三次握手。

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

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

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

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

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

CP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。

客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

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

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

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

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

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

TCP采用四次挥手关闭连接如图2所示2、深入理解TCP连接的释放:由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。

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

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

tcp三次握手与四次挥手

tcp三次握手与四次挥手

TCP三次握手四次挥手症结字: tcp三次握手四次挥手1.TCP握手协定(简略清楚明了)在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状况,完成三次握手.完成三次握手,客户端与办事器开端传送数据,在上述进程中,还有一些主要的概念:未衔接队列:在三次握手协定中,办事器保护一个未衔接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目标明办事器已收到 SYN包,并向客户发出确认,正在等待客户的确认包.这些条目所标识的衔接在办事器处于Syn_RECV状况,当办事器收到客户的确认包时,删除该条目,办事器进入ESTABLISHED状况. Backlog参数:暗示未衔接队列的最大容纳数量.SYNACK 重传次数办事器发送完SYN-ACK包,假如未收到客户确认包,办事器进行初次重传,等待一段时光仍未收到客户确认包,进行第二次重传,假如重传次数超出体系划定的最大重传次数,体系将该衔接信息从半衔接队列中删除.留意,每次重传等待的时光不必定雷同.半衔接存活时光:是指半衔接队列的条目存活的最长时光,也即办事从收到SYN包到确认这个报文无效的最长时光,该时光值是所有重传要求包的最长等待时光总和.有时我们也称半衔接存活时光为Timeout时光.SYN_RECV存活时光.2.TCP握手协定(具体)TCP/IP 是许多的不合的协定构成,现实上是一个协定组,TCP用户数据报表协定(也称作TCP传输掌握协定,Transport Control Protocol.靠得住的主机到主机层协定.这里要先强调一下,传输掌握协定是OSI收集的第四层的叫法,TCP传输掌握协定是TCP/IP 传输的6个根本协定的一种.两个TCP意思非雷同. ).TCP是一种靠得住的面向衔接的传送办事.它在传送数据时是分段进行的,主机交流数据必须树立一个会话.它用比特流畅信,即数据被作为无构造的字撙节.经由过程每个TCP传输的字段指定次序号,以获得靠得住性.是在OSI参考模子中的第四层,TCP是运用IP的网间互联功效而供给靠得住的数据传输,IP不断的把报文放到收集上,而TCP是负责确信报文到达.在协同IP的操纵中TCP负责:握手进程.报文治理.流量掌握.错误检测和处理(掌握),可以依据必定的编号次序对非正常次序的报文赐与从新分列次序.关于TCP的RFC文档有RFC793.RFC791.RFC1700.在TCP会话初期,有所谓的“三握手”:对每次发送的数据量是如何跟踪进行协商使数据段的发送和吸收同步,依据所吸收到的数据量而肯定的数据确认数及数据发送.吸收完毕后何时裁撤接洽,并树立虚衔接.为了供给靠得住的传送,TCP在发送新的数据之前,以特定的次序将数据包的序号,并须要这些包传送给目标机之后的确认新闻. TCP老是用来发送大批量的数据.当运用程序在收到数据后要做出确认时也要用到TCP.因为TCP须要时刻跟踪,这须要额外开销,使得TCP的格局有些显得庞杂.下面就让我们看一个TCP的经典案例,这是后来被称为MITNICK进击中KEVIN首创了两种进击技巧:TCP会话劫持SYN FLOOD(同步大水)在这里我们评论辩论的时TCP会话劫持的问题.先让我们明确TCP树立衔接的根本简略的进程.为了扶植一个小型的模拟情形我们假设有3台接入互联网的机械.A为进击者把持的进击机.B为中介跳板机械(受信赖的办事器).C为受害者运用的机械(多是办事器),这里把C机械锁定为目标机械.A机械向B机械发送SYN包,要求树立衔接,这时已经响应要求的B机械会向A机械回应SYN/ACK标明赞成树立衔接,当A机械接收到B机械发送的SYN/ACK回应时,发送应答ACK树立A机械与B机械的收集衔接.如许一个两台机械之间的TCP通话信道就树立成功了.B终端受信赖的办事器向C机械提议TCP衔接,A机械对办事器提议SYN信息,使C机械不克不及响应B机械.在同时A机械也向B机械发送虚伪的C机械回应的SYN数据包,吸收到SYN数据包的B 机械(被C机械信赖)开端发送应答衔接树立的 SYN/ACK数据包,这时C机械正在忙于响应以前发送的SYN数据而无暇回应B机械,而A机械的进击者猜测出B机械包的序列号(如今的TCP序列号猜测难度有所加大)冒充C机械向B机械发送应答ACK这时进击者骗取B 机械的信赖,冒充C机械与B机械树立起TCP协定的对话衔接.这个时刻的C机械照样在响应进击者A机械发送的SYN数据.TCP协定栈的弱点:TCP衔接的资本消费,个中包含:数据包信息.前提状况.序列号等.经由过程有意不完成树立衔接所须要的三次握手进程,造成衔接一方的资本耗尽.经由过程进击者有意的不完成树立衔接所须要的三次握手的全进程,从而造成了C机械的资本耗尽.序列号的可猜测性,目标主机应答衔接要求时返回的SYN/ACK的序列号时可猜测的.(早期TCP协定栈,具体的可以拜见1981年出的关于TCP雏形的RFC793文档)TCP头构造TCP协定头起码20个字节,包含以下的区域(因为翻译不由雷同,文章中给出响应的英文单词):TCP源端口(Source Port):16位的源端口个中包含初始化通讯的端口.源端口和源IP地址的感化是标示报问的返回地址.TCP目标端口(Destination port):16位的目标端口域界说传输的目标.这个端口指明报文吸收盘算机上的运用程序地址接口.TCP序列号(序列码,Sequence Number):32位的序列号由吸收端盘算机运用,从新分段的报文成最初情势.当SYN消失,序列码现实上是初始序列码(ISN),而第一个数据字节是ISN+1.这个序列号(序列码)是可以抵偿传输中的不一致.TCP应答号(Acknowledgment Number):32位的序列号由吸收端盘算机运用,重组分段的报文成最初情势.,假如设置了ACK掌握位,这个值暗示一个预备吸收的包的序列码.数据偏移量(HLEN):4位包含TCP头大小,指导何处数据开端.保存(Reserved):6位值域,这些位必须是0.为了未来界说新的用处所保存.标记(Code Bits):6位标记域.暗示为:紧迫标记.有意义的应答标记.推.重置衔接标记.同步序列号标记.完成发送数据标记.按照次序分列是:URG.ACK.PSH.RST.SYN.FIN.窗口(Window):16位,用来暗示想收到的每个TCP数据段的大小.校验位(Checksum):16位TCP头.源机械基于数据内容盘算一个数值,收信息机要与源机械数值成果完整一样,从而证实数据的有用性.优先指针(紧迫,Urgent Pointer):16位,指向后面是优先数据的字节,在URG标记设置了时才有用.假如URG标记没有被设置,紧迫域作为填充.加速处理标示为紧迫的数据段.选项(Option):长度不定,但长度必须以字节.假如没有选项就暗示这个一字节的域等于0.填充:不定长,填充的内容必须为0,它是为了数学目标而消失.目标是确保空间的可猜测性.包管包头的联合和数据的开端处偏移量可以或许被32整除,一般额外的零以包管TCP头是32位的整数倍. 标记掌握功效URG:紧迫标记紧迫(The urgent pointer) 标记有用.紧迫标记置位,ACK:确认标记确认编号(Acknowledgement Number)栏有用.大多半情形下该标记位是置位的.TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提醒远端体系已经成功吸收所稀有据.PSH:推标记该标记置位时,吸收端不将该数据进行队列处理,而是尽可能快将数据转由运用处理.在处理 telnet 或 rlogin 等交互模式的衔接时,该标记老是置位的.RST:复位标记复位标记有用.用于复位响应的TCP衔接.SYN:同步标记同步序列编号(Synchronize Sequence Numbers)栏有用.该标记仅在三次握手树立TCP衔接时有用.它提醒TCP衔接的办事端检讨序列编号,该序列编号为TCP衔接初始端(一般是客户端)的初始序列编号.在这里,可以把TCP序列编号看作是一个规模从0到4,294,967,295的32位计数器.经由过程TCP衔接交流的数据中每一个字节都经由序列编号.在TCP报头中的序列编号栏包含了TCP分段中第一个字节的序列编号.FIN:停止标记带有该标记置位的数据包用来停止一个TCP回话,但对应端口仍处于凋谢状况,预备吸收后续数据.办事端处于监听状况,客户端用于树立衔接要求的数据包(IP packet)按照TCP/IP协定客栈组合成为TCP处理的分段(segment).剖析报头信息: TCP层吸收到响应的TCP和IP报头,将这些信息存储到内存中.检讨TCP校验和(checksum):尺度的校验和位于分段之中(Figure:2).假如磨练掉败,不返回确认,该分段丢弃,并等待客户端进行重传.查找协定掌握块(PCB{}):TCP查找与该衔接相接洽关系的协定掌握块.假如没有找到,TCP将该分段丢弃并返回RST.(这就是TCP处理没有端口监听情形下的机制) 假如该协定掌握块消失,但状况为封闭,办事端不挪用connect()或listen().该分段丢弃,但不返回RST.客户端会测验测验从新树立衔接要求.树立新的socket:当处于监听状况的socket收到该分段时,会树立一个子socket,同时还有socket{},tcpcb{}和 pub{}树立.这时假如有错误产生,会经由过程标记位来裁撤响应的socket和释放内存,TCP衔接掉败.假如缓存队列处于填满状况,TCP以为有错误产生,所有的后续衔接要求会被谢绝.这里可以看出SYNFlood进击是若何起感化的.丢弃:假如该分段中的标记为RST或ACK,或者没有SYN标记,则该分段丢弃.并释放响应的内存.发送序列变量SND.UNA :发送未确认SND.NXT :发送下一个SND.WND :发送窗口SND.UP :发送优先指针SND.WL1 :用于最后窗口更新的段序列号SND.WL2 :用于最后窗口更新的段确认号ISS :初始发送序列号吸收序列号RCV.NXT :吸收下一个RCV.WND :吸收下一个RCV.UP :吸收优先指针IRS :初始吸收序列号当前段变量SEG.SEQ :段序列号SEG.ACK :段确认标识表记标帜SEG.LEN :段长SEG.WND :段窗口SEG.UP :段紧迫指针SEG.PRC :段优先级CLOSED暗示没有衔接,各个状况的意义如下:LISTEN :监听来自远方TCP端口的衔接要求.SYNSENT :在发送衔接要求后等待匹配的衔接要求. SYNRECEIVED :在收到和发送一个衔接要求后等待对衔接要求的确认.ESTABLISHED :代表一个打开的衔接,数据可以传送给用户.FINWAIT1 :等待长途TCP的衔接中止要求,或先前的衔接中止要求的确认.FINWAIT2 :从长途TCP等待衔接中止要求.CLOSEWAIT :等待从当地用户发来的衔接中止要求. CLOSING :等待长途TCP对衔接中止的确认.LASTACK :等待本来发向长途TCP的衔接中止要求的确认.TIMEWAIT :等待足够的时光以确保长途TCP吸收到衔接中止要求的确认.CLOSED :没有任何衔接状况.TCP衔接进程是状况的转换,促使产生状况转换的是用户挪用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS.传送过来的数据段,特殊那些包含以下标识表记标帜的数据段SYN,ACK,RST和FIN.还有超时,上面所说的都邑时TCP状况产生变更.序列号请留意,我们在TCP衔接中发送的字节都有一个序列号.因为编了号,所以可以确认它们的收到.对序列号的确认是累积性的.TCP必须进行的序列号比较操纵种类包含以下几种:①决议一些发送了的但未确认的序列号.②决议所有的序列号都已经收到了.③决议下一个段中应当包含的序列号.对于发送的数据TCP要吸收确认,确认时必须进行的:SND.UNA = 最老的确认了的序列号.SND.NXT = 下一个要发送的序列号.SEG.ACK = 吸收TCP的确认,吸收TCP等待的下一个序列号.SEG.SEQ = 一个数据段的第一个序列号.SEG.LEN = 数据段中包含的字节数.SEG.SEQ+SEG.LEN1 = 数据段的最后一个序列号.假如一个数据段的序列号小于等于确认号的值,那么全部数据段就被确认了.而在吸收数据时下面的比较操纵是必须的:RCV.NXT = 等待的序列号和吸收窗口的最低沿.RCV.NXT+RCV.WND:1 = 最后一个序列号和吸收窗口的最高沿.SEG.SEQ = 吸收到的第一个序列号.SEG.SEQ+SEG.LEN:1 = 吸收到的最后一个序列号.。

tcp三次握手和四次挥手的全过程

tcp三次握手和四次挥手的全过程

tcp三次握⼿和四次挥⼿的全过程1、三次握⼿(1)三次握⼿的详述⾸先Client端发送连接请求报⽂,Server段接受连接后回复ACK报⽂,并为这次连接分配资源。

Client端接收到ACK报⽂后也向Server段发⽣ACK报⽂,并分配资源,这样TCP连接就建⽴了。

最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,⽽B被动打开连接。

(A、B关闭状态CLOSED——B收听状态LISTEN ——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建⽴状态ESTABLISHED)B的TCP服务器进程先创建传输控制块TCB,准备接受客户进程的连接请求。

然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。

若有,则作出响应。

1)第⼀次握⼿:A的TCP客户进程也是⾸先创建传输控制块TCB,然后向B发出连接请求报⽂段,(⾸部的同步位SYN=1,初始序号seq=x),(SYN=1的报⽂段不能携带数据)但要消耗掉⼀个序号,此时TCP客户进程进⼊SYN-SENT(同步已发送)状态。

2)第⼆次握⼿:B收到连接请求报⽂段后,如同意建⽴连接,则向A发送确认,在确认报⽂段中(SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y),测试TCP服务器进程进⼊SYN-RCVD(同步收到)状态;3)第三次握⼿:TCP客户进程收到B的确认后,要向B给出确认报⽂段(ACK=1,确认号ack=y+1,序号seq=x+1)(初始为seq=x,第⼆个报⽂段所以要+1),ACK报⽂段可以携带数据,不携带数据则不消耗序号。

TCP连接已经建⽴,A进⼊ESTABLISHED(已建⽴连接)。

当B收到A的确认后,也进⼊ESTABLISHED状态。

(2)总结三次握⼿过程:第⼀次握⼿:起初两端都处于CLOSED关闭状态,Client将标志位SYN置为1,随机产⽣⼀个值seq=x,并将该数据包发送给Server,Client进⼊SYN-SENT状态,等待Server确认;第⼆次握⼿:Server收到数据包后由标志位SYN=1得知Client请求建⽴连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产⽣⼀个值seq=y,并将该数据包发送给Client以确认连接请求,Server进⼊SYN-RCVD状态,此时操作系统为该TCP连接分配TCP缓存和变量;第三次握⼿:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建⽴成功,Client和Server进⼊ESTABLISHED状态,完成三次握⼿,随后Client和Server就可以开始传输数据。

TCP三次握手

TCP三次握手

TCP三次握手/四次挥手详解[转]一、Linux服务器上11种网络连接状态:图:TCP的状态机通常情况下:一个正常的TCP连接,都会有三个阶段:1、TCP三次握手;2、数据传送;3、TCP四次挥手注:以下说明最好能结合”图:TCP的状态机”来理解。

SYN: (同步序列编号,Synchronize Sequence Numbers)该标志仅在三次握手建立TCP连接时有效。

表示一个新的TCP连接请求。

ACK: (确认编号,Acknowledgem ent Number)是对TCP请求的确认标志,同时提示对端系统已经成功接收所有数据。

FIN: (结束标志,FINish)用来结束一个TCP回话.但对应端口仍处于开放状态,准备接收后续数据。

1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN. /* The socket is listening for incoming connections. 侦听来自远方TCP端口的连接请求*/2)、SYN_SENT:客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT. /*The socket is actively attempting to establish a connection. 在发送连接请求后等待匹配的连接请求*/3)、SYN_RECV:服务端应发出ACK确认客户端的SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV /* A connection request has been received from the network. 在收到和发送一个连他套接字。

尤其是试图使用该端口创建新的Socket实例时,将抛出IOException异常。

TCP三次握手/四次挥手详解1、建立连接协议(三次握手)(1)客户端发送一个带SY N标志的TCP报文到服务器。

三次握手四次挥手

三次握手四次挥手

TCP的三次握手和四次挥手:三次握手:第一次握手:客户端向服务器发送连接请求包,标志位SYN(同步序号)置为 seq = X;第二次握手:服务器收到客户端发过来报文,由 SYN = X 知道客户端要求建立联机。

向客户端发送一个包含SYN和ACK的TCP报文,其中服务器向客户端发送连接请求包,标志位SYN(同步序号)置为 Y=1;将确认序号(ACK)设置为客户的序列号加1,即 X+1 ,第三次握手:客户端收到服务器发来的包后检查确认序号(ACK)是否正确,即第一次发送的序号加1(X+1);若正确,服务器再次发送确认序号(ACK) = Y+1;服务器收到确认序号值 ACK=2 则连接建立成功,可以传送数据了。

四次挥手:第一次挥手:客户端给服务器发送TCP包,用来关闭客户端到服务器的数据传送。

将标志位FIN 置为 X 和ACK置为 Y;第二次挥手:服务器收到FIN后,发回一个ACK(标志位ACK=1),确认序号为收到的序号加1,即 X+1 ;第三次挥手:服务器关闭与客户端的连接,发送一个FIN,标志位FIN和ACK置为1,序号为 Y;第四次挥手:客户端收到服务器发送的FIN之后,发回ACK确认,确认序号为收到的序号加1,即Y+1,服务器收到ACK为Y+1后关闭。

为什么是三次握手:三次握手可以简单看做是客户发送请求,服务器对客户的请求进行确认,客户对服务器的确认再进行确认。

如果采用两次握手,假设下面这种情况,客户向服务器发送请求,服务器没有对客户的请求进行确认(因为网络的延迟他可能没有收到这个请求)。

客户收不到这个确认于是过一段时间他在向服务器发起连接请求并顺利完成数据传输,但是过了一段时间这个请求到达了服务器而服务器误以为这是一个新的连接请求,于是对这个请求进行确认并发送确认给客户,但是客户没有发起过连接请求因此它不会理会服务器的确认,服务器以为这个连接已经建立好了于是一直等待客户发送数据,这样就会造成服务器的资源浪费。

tcp三次握手与四次挥手

tcp三次握手与四次挥手

TCP三次握手四次挥手关键字: tcp三次握手四次挥手1.TCP握手协议(简单明了)在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状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到 SYN包,并向客户发出确认,正在等待客户的确认包。

这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。

Backlog参数:表示未连接队列的最大容纳数目。

SYN-ACK 重传次数服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。

注意,每次重传等待的时间不一定相同。

半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN 包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。

有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。

2.TCP握手协议(详细)TCP/IP 是很多的不同的协议组成,实际上是一个协议组,TCP用户数据报表协议(也称作TCP传输控制协议,Transport Control Protocol。

三次握手四次挥手的理解

三次握手四次挥手的理解

三次握手四次挥手的理解
三次握手和四次挥手是TCP通信中建立和断开连接的两个重要步骤。

三次握手是为了建立可靠的连接。

第一次握手,客户端向服务器发送一个SYN包,询问是否可以建立连接。

第二次握手,服务器收到SYN包后,向客户端发送一个SYN-ACK包,表示客户端的请求已被接受,并等待客户端的确认。

第三次握手,客户端收到SYN-ACK包后,向服务器发送一个ACK包,表示已确认服务器的状态,从而建立了可靠的连接。

四次挥手是为了断开一个已经建立的连接。

第一次挥手,客户端向服务器发送一个FIN包,表示客户端要断开连接。

第二次挥手,服务器收到FIN包后,向客户端发送一个ACK包,表示已确认客户端的请求。

第三次挥手,服务器向客户端发送一个FIN包,表示服务器也要断开连接。

第四次挥手,客户端收到FIN包后,向服务器发送一个ACK包,表示已确认服务器的状态,从而断开了连接。

三次挥手四次握手原理

三次挥手四次握手原理

三次挥手四次握手原理摘要:一、三次挥手原理1.用户设备与服务器建立连接2.用户设备发送请求3.服务器响应请求并返回数据4.用户设备接收数据并关闭连接5.服务器检测到连接关闭,再次发送确认6.用户设备收到确认,完成三次挥手二、四次握手原理1.用户设备与服务器建立连接2.用户设备发送请求3.服务器响应请求并返回数据4.用户设备接收数据并释放连接资源5.服务器检测到连接释放,发送确认6.用户设备收到确认,完成四次握手正文:在计算机网络通信中,三次挥手和四次握手是两个重要的协议机制,它们负责管理TCP连接的建立和断开。

以下将详细介绍这两种机制的原理。

一、三次挥手原理三次挥手(Three-way Handshake)是TCP协议中建立连接的过程。

具体步骤如下:1.用户设备(客户端)与服务器(服务器端)建立连接。

在这个过程中,客户端会随机生成一个序列号seq(A),作为第一个数据包发送给服务器。

2.服务器收到客户端的连接请求后,会向客户端发送确认,确认号是seq (B),同时服务器也会随机生成一个序列号seq(C)作为下一个数据包的序列号。

3.客户端收到服务器的确认后,需要再次确认,确认号是seq(A+1),此时客户端已经知道服务器的初始序列号seq(C)。

4.服务器收到客户端的确认后,会发送最后一个确认,确认号是seq(B+1)。

此时,三次挥手过程完成。

5.客户端收到服务器的最后一个确认后,关闭连接。

6.服务器检测到连接关闭,会再次发送确认,确认号是seq(C+1)。

7.客户端收到服务器的确认后,完成三次挥手。

二、四次握手原理四次握手(Four-way Handshake)是TCP协议中断开连接的过程。

具体步骤如下:1.用户设备(客户端)与服务器(服务器端)建立连接,客户端发送一个FIN(结束)包给服务器,序列号为seq(A)。

2.服务器收到客户端的结束请求后,向客户端发送一个确认,确认号为seq(B),同时服务器也会发送一个FIN包给客户端,序列号为seq(C)。

三次握手和四次挥手的原理(一)

三次握手和四次挥手的原理(一)

三次握手和四次挥手的原理(一)三次握手和四次挥手的原理三次握手1.第一次握手:客户端向服务器发出连接请求报文。

2.第二次握手:服务器向客户端回送一个确认报文,并要求客户端发送确认报文。

3.第三次握手:客户端再次向服务器发送确认报文。

三次握手的目的是确保客户端和服务器双方都知道对方的存在,多次确认能确认双方的可靠性。

四次挥手1.第一次挥手:客户端向服务器发出结束连接请求报文。

2.第二次挥手:服务器收到结束连接请求报文后,向客户端回送确认报文,并告知客户端已经准备好关闭连接。

3.第三次挥手:服务器向客户端发送结束连接请求报文。

4.第四次挥手:客户端向服务器回送确认报文。

四次挥手的目的是告知对方连接即将断开,断开前释放双方的资源,并确认双方都收到了断开连接请求报文。

总结:三次握手和四次挥手在TCP协议中是非常重要的步骤,它们能确保双方的可靠性,并且在连接断开后,能够及时释放资源。

要深入理解三次握手和四次挥手对于网络程序员而言非常重要。

三次握手的流程1.客户端向服务器发送一个SYN(J)报文,其中的J是一个随机生成的序列号。

2.服务器收到客户端发送的SYN(J)报文,回送一个SYN(K)和ACK(J+1)报文,其中K也是一个随机生成的序列号,ACK(J+1)表示确认客户端发送的SYN(J)报文已经收到。

3.客户端收到服务器回送的SYN(K)和ACK(J+1)报文后,向服务器发送一个ACK(K+1)报文,其中ACK(K+1)表示确认服务器发送的SYN(K)报文已经收到。

四次挥手的流程1.客户端向服务器发出结束连接请求报文(FIN标志位为1)。

2.服务器收到结束连接请求报文后,向客户端回送确认报文(ACK标志位为1),告知客户端已经准备好关闭连接。

3.服务器向客户端发送结束连接请求报文(FIN标志位为1)。

4.客户端收到结束连接请求报文后,向服务器回送确认报文(ACK标志位为1)。

三次握手和四次挥手的意义三次握手和四次挥手在TCP协议中是非常重要的步骤,它们能确保双方的可靠性,并且在连接断开后,能够及时释放资源。

TCP三次握手与四次挥手深入探究(大图解)

TCP三次握手与四次挥手深入探究(大图解)

TCP三次握手与四次挥手深入探究(大图解)文章目录••oo▪▪▪▪▪▪▪▪oo▪▪▪▪▪▪▪▪▪▪▪▪▪▪oo▪▪▪▪▪▪▪▪▪▪▪▪▪▪oo▪TCP 三次握手与四次挥手深入探究TCP基础知识TCP 头格式有哪些TCP首部包括20字节的固定首部部分及长度可变的其他选项,所以TCP首部长度可变。

20个字节又分为5部分,每部分4个字节32位,如图中的前5行,每行表示32位。

TCP 头格式图如下所示:源端口和目的端口字段:各占 2 字节(16位)。

端口是运输层与应用层的服务接口。

运输层的复用和分用功能都要通过端口才能实现。

序列号:在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。

用来解决网络包乱序问题。

确认应答号:指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。

用来解决丢包的问题。

控制位:•ACK:该位为 1 时,「确认应答」的字段变为有效,TCP 规定除了最初建立连接时的 SYN 包之外该位必须设置为 1 。

•RST:该位为1 时,表示TCP 连接中出现异常必须强制断开连接。

•SYN:该位为 1 时,表示希望建立连接,并在其「序列号」的字段进行序列号初始值的设定。

•FIN:该位为1 时,表示今后不会再有数据发送,希望断开连接。

当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN 位为 1 的 TCP 段。

•紧急 URG ——当 URG = 1 时,表明紧急指针字段有效。

它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

即URG=1的数据包不用排队直接优先传输。

数据偏移(即首部长度):占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远,也就是TCP首部的长度。

“数据偏移”的单位是 32 位字(以 4 字节为计算单位),最大1111表示15x4=60个字节,即表示TCP首部最大长度为60个字节,因此“选项”部分最多40个字节。

三次握手四次挥手简易理解

三次握手四次挥手简易理解

三次握⼿四次挥⼿简易理解摘:⼯作过程TCP标志位:TCP共有6个标志位,分别是:SYN(synchronous),建⽴联机。

ACK(acknowledgement),确认。

PSH(push),传输。

FIN(finish),结束。

RST(reset),重置。

URG(urgent),紧急。

图解三次握⼿和四次挥⼿的过程:三次握⼿理解图四次挥⼿理解图三次握⼿建⽴连接阐述:第⼀次握⼿:客户端要和服务端进⾏通信,⾸先要告知服务端⼀声,遂发出⼀个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。

第⼆次握⼿:当服务端接收到客户端的连接请求,此时要给客户端⼀个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。

第三次握⼿:当客户端收到了服务端的确认连接信息后,要礼貌的告知⼀下服务端,“好的,咱们开始联通吧(ACK)”。

到此整个建⽴连接的过程已经结束,接下来就是双⽅你⼀句我⼀句甚⾄同时交流传递信息的过程了。

四次挥⼿断开连接阐述:第⼀次挥⼿:双⽅交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时⾃⾝形成等待结束连接的状态。

第⼆次挥⼿:服务端知道客户端已经没话说了,服务端此时还有两句⼼⾥话要给客户端说,“我知道你说完了(ACK),我再给你说两句,&*……%¥”。

第三次挥⼿:此时客户端洗⽿恭听继续处于等待结束的状态,服务器端也说完了,⾃⾝此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。

第四次挥⼿:客户端收知道服务端也说完了,也要告诉服务端⼀声(ACK),因为连接和断开要双⽅都按下关闭操作才能断开,客户端同时⼜为⾃⼰定义⼀个定时器,因为不知道刚才说的这句话能不能准确到达服务端(⽹络不稳定或者其他因素引起的⽹络原因),默认时间定为两个通信的最⼤时间之和,超出这个时间就默认服务器端已经接收到了⾃⼰的确认信息,此时客户端就关闭⾃⾝连接,服务器端⼀旦接收到客户端发来的确定通知就⽴刻关闭服务器端的连接。

tcp三次握手与四次挥手

tcp三次握手与四次挥手

TCP三次握手四次挥手之马矢奏春创作关键字: tcp三次握手四次挥手1.TCP握手协议(简单明了)在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状态,完成三次握手.完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户真个SYN包(syn=j)开设一个条目,该条目标明服务器已收到 SYN包,并向客户发出确认,正在等候客户简直认包.这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户简直认包时,删除该条目,服务器进入ESTABLISHED状态. Backlog参数:暗示未连接队列的最年夜容纳数目.SYNACK 重传次数服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等候一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超越系统规定的最年夜重传次数,系统将该连接信息从半连接队列中删除.注意,每次重传等候的时间纷歧定相同.半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等候时间总和.有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间.2.TCP握手协议(详细)TCP/IP 是很多的分歧的协议组成,实际上是一个协议组,TCP用户数据报表协议(也称作TCP传输控制协议,Transport Control Protocol.可靠的主机到主机层协议.这里要先强调一下,传输控制协议是OSI网络的第四层的叫法,TCP传输控制协议是TCP/IP传输的6个基本协议的一种.两个TCP意思非相同. ).TCP是一种可靠的面向连接的传送服务.它在传送数据时是分段进行的,主机交换数据必需建立一个会话.它用比特流通信,即数据被作为无结构的字节流.通过每个TCP传输的字段指定顺序号,以获得可靠性.是在OSI参考模型中的第四层,TCP是使用IP的网间互联功能而提供可靠的数据传输,IP不竭的把报文放到网络上,而TCP是负责确信报文达到.在协同IP的把持中TCP负责:握手过程、报文管理、流量控制、毛病检测和处置(控制),可以根据一定的编号顺序对非正常顺序的报文给予重新排列顺序.关于TCP的RFC文档有RFC793、RFC791、RFC1700.在TCP会话早期,有所谓的“三握手”:对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时裁撤联系,并建立虚连接.为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后简直认消息. TCP总是用来发送年夜批量的数据.当应用法式在收到数据后要做出确认时也要用到TCP.由于TCP需要时刻跟踪,这需要额外开销,使得TCP的格式有些显得复杂.下面就让我们看一个TCP 的经典案例,这是后来被称为MITNICK攻击中KEVIN开创了两种攻击技术:TCP会话劫持SYN FLOOD(同步洪流)在这里我们讨论的时TCP会话劫持的问题.先让我们明白TCP建立连接的基本简单的过程.为了建设一个小型的模仿环境我们假设有3台接入互联网的机器.A为攻击者把持的攻击机.B为中介跳板机器(受信任的服务器).C为受害者使用的机器(多是服务器),这里把C机器锁定为目标机器.A机器向B 机器发送SYN包,请求建立连接,这时已经响应请求的B机器会向A机器回应SYN/ACK标明同意建立连接,当A机器接受到B机器发送的SYN/ACK回应时,发送应答ACK建立A机器与B机器的网络连接.这样一个两台机器之间的TCP通话信道就建立胜利了.B终端受信任的服务器向C机器发起TCP连接,A机器对服务器发起SYN信息,使C机器不能响应B机器.在同时A机器也向B机器发送虚假的C机器回应的SYN数据包,接收到SYN数据包的B机器(被C机器信任)开始发送应答连接建立的 SYN/ACK数据包,这时C机器正在忙于响应以前发送的SYN数据而无暇回应B机器,而A机器的攻击者预测出B机器包的序列号(现在的TCP序列号预测难度有所加年夜)假冒C机器向B机器发送应答ACK这时攻击者骗取B 机器的信任,假冒C机器与B机器建立起TCP协议的对话连接.这个时候的C机器还是在响应攻击者A机器发送的SYN数据.TCP协议栈的弱点:TCP连接的资源消耗,其中包括:数据包信息、条件状态、序列号等.通过故意不完成建立连接所需要的三次握手过程,造成连接一方的资源耗尽.通过攻击者有意的不完成建立连接所需要的三次握手的全过程,从而造成了C机器的资源耗尽.序列号的可预测性,目标主机应答连接请求时返回的SYN/ACK的序列号时可预测的.(早期TCP协议栈,具体的可以拜会1981年出的关于TCP雏形的RFC793文档)TCP头结构TCP协议头最少20个字节,包括以下的区域(由于翻译不由相同,文章中给出相应的英文单词):TCP源端口(Source Port):16位的源端口其中包括初始化通信的端口.源端口和源IP地址的作用是标示报问的返回地址.TCP目的端口(Destination port):16位的目的端口域界说传输的目的.这个端口指明报文接收计算机上的应用法式地址接口.TCP序列号(序列码,Sequence Number):32位的序列号由接收端计算机使用,重新分段的报文成最初形式.当SYN呈现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1.这个序列号(序列码)是可以赔偿传输中的纷歧致.TCP应答号(Acknowledgment Number):32位的序列号由接收端计算机使用,重组分段的报文成最初形式.,如果设置了ACK控制位,这个值暗示一个准备接收的包的序列码.数据偏移量(HLEN):4位包括TCP头年夜小,指示何处数据开始.保管(Reserved):6位值域,这些位必需是0.为了将来界说新的用途所保管.标识表记标帜(Code Bits):6位标识表记标帜域.暗示为:紧急标识表记标帜、有意义的应答标识表记标帜、推、重置连接标识表记标帜、同步序列号标识表记标帜、完成发送数据标识表记标帜.依照顺序排列是:URG、ACK、PSH、RST、SYN、FIN.窗口(Window):16位,用来暗示想收到的每个TCP数据段的年夜小.校验位(Checksum):16位TCP头.源机器基于数据内容计算一个数值,收信息机要与源机器数值结果完全一样,从而证明数据的有效性.优先指针(紧急,Urgent Pointer):16位,指向后面是优先数据的字节,在URG标识表记标帜设置了时才有效.如果URG标识表记标帜没有被设置,紧急域作为填充.加快处置标示为紧急的数据段.选项(Option):长度不定,但长度必需以字节.如果没有选项就暗示这个一字节的域即是0.填充:不定长,填充的内容必需为0,它是为了数学目的而存在.目的是确保空间的可预测性.保证包头的结合和数据的开始处偏移量能够被32整除,一般额外的零以保证TCP头是32位的整数倍.标识表记标帜控制功能URG:紧急标识表记标帜紧急(The urgent pointer) 标识表记标帜有效.紧急标识表记标帜置位,ACK:确认标识表记标帜确认编号(Acknowledgement Number)栏有效.年夜大都情况下该标识表记标帜位是置位的.TCP报头内简直认编号栏内包括简直认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经胜利接收所有数据.PSH:推标识表记标帜该标识表记标帜置位时,接收端不将该数据进行队列处置,而是尽可能快将数据转由应用处置.在处置 telnet 或 rlogin 等交互模式的连接时,该标识表记标帜总是置位的.RST:复位标识表记标帜复位标识表记标帜有效.用于复位相应的TCP连接.SYN:同步标识表记标帜同步序列编号(Synchronize Sequence Numbers)栏有效.该标识表记标帜仅在三次握手建立TCP连接时有效.它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号.在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器.通过TCP连接交换的数据中每一个字节都经过序列编号.在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号.FIN:结束标识表记标帜带有该标识表记标帜置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据.服务端处于监听状态,客户端用于建立连接请求的数据包(IP packet)依照TCP/IP协议仓库组合成为TCP处置的分段(segment).分析报头信息: TCP层接收到相应的TCP和IP报头,将这些信息存储到内存中.检查TCP校验和(checksum):标准的校验和位于分段之中(Figure:2).如果检验失败,不返回确认,该分段抛弃,并等候客户端进行重传.查找协议控制块(PCB{}):TCP查找与该连接相关联的协议控制块.如果没有找到,TCP将该分段抛弃并返回RST.(这就是TCP处置没有端口监听情况下的机制) 如果该协议控制块存在,但状态为关闭,服务端不调用connect()或listen().该分段抛弃,但不返回RST.客户端会检验考试重新建立连接请求.建立新的socket:当处于监听状态的socket收到该分段时,会建立一个子socket,同时还有socket{},tcpcb{}和 pub{}建立.这时如果有毛病发生,会通过标识表记标帜位来裁撤相应的socket和释放内存,TCP连接失败.如果缓存队列处于填满状态,TCP认为有毛病发生,所有的后续连接请求会被拒绝.这里可以看出SYN Flood攻击是如何起作用的.抛弃:如果该分段中的标识表记标帜为RST或ACK,或者没有SYN标识表记标帜,则该分段抛弃.并释放相应的内存.发送序列变量SND.UNA :发送未确认SND.NXT :发送下一个SND.WND :发送窗口SND.UP :发送优先指针SND.WL1 :用于最后窗口更新的段序列号SND.WL2 :用于最后窗口更新的段确认号ISS :初始发送序列号接收序列号RCV.NXT :接收下一个RCV.WND :接收下一个RCV.UP :接收优先指针IRS :初始接收序列号以后段变量SEG.SEQ :段序列号SEG.ACK :段确认标识表记标帜SEG.LEN :段长SEG.WND :段窗口SEG.UP :段紧急指针SEG.PRC :段优先级CLOSED暗示没有连接,各个状态的意义如下:LISTEN :监听来自远方TCP端口的连接请求.SYNSENT :在发送连接请求后等候匹配的连接请求.SYNRECEIVED :在收到和发送一个连接请求后等候对连接请求简直认.ESTABLISHED :代表一个翻开的连接,数据可以传送给用户.FINWAIT1 :等候远程TCP的连接中断请求,或先前的连接中断请求简直认.FINWAIT2 :从远程TCP等候连接中断请求.CLOSEWAIT :等候从本地用户发来的连接中断请求. CLOSING :等候远程TCP对连接中断简直认.LASTACK :等候原来发向远程TCP的连接中断请求简直认.TIMEWAIT :等候足够的时间以确保远程TCP接收到连接中断请求简直认.CLOSED :没有任何连接状态.TCP连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS.传送过来的数据段,特别那些包括以下标识表记标帜的数据段SYN,ACK,RST和FIN.还有超时,上面所说的城市时TCP状态发生变动.序列号请注意,我们在TCP连接中发送的字节都有一个序列号.因为编了号,所以可以确认它们的收到.对序列号简直认是累积性的.TCP必需进行的序列号比力把持种类包括以下几种:①决定一些发送了的但未确认的序列号.②决定所有的序列号都已经收到了.③决定下一个段中应该包括的序列号.对发送的数据TCP要接收确认,确认时必需进行的:SND.UNA = 最老简直认了的序列号.SND.NXT = 下一个要发送的序列号.SEG.ACK = 接收TCP简直认,接收TCP期待的下一个序列号.SEG.SEQ = 一个数据段的第一个序列号.SEG.LEN = 数据段中包括的字节数.SEG.SEQ+SEG.LEN1 = 数据段的最后一个序列号.如果一个数据段的序列号小于即是确认号的值,那么整个数据段就被确认了.而在接收数据时下面的比力把持是必需的:RCV.NXT = 期待的序列号和接收窗口的最低沿.RCV.NXT+RCV.WND:1 = 最后一个序列号和接收窗口的最高沿.SEG.SEQ = 接收到的第一个序列号.SEG.SEQ+SEG.LEN:1 = 接收到的最后一个序列号.。

TCP协议中的三次握手和四次挥手(图解)

TCP协议中的三次握手和四次挥手(图解)

TCP协议中的三次握手和四次挥手(图解)各位读友大家好,此文档由网络收集而来,欢迎您下载,谢谢TCP协议中的三次握手和四次挥手(图解)建立TCP需要三次握手才能建立,而断开连接则需要四次握手。

整个过程如下图所示:先来看看如何建立连接的。

首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。

Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

那如何断开连接呢?简单的过程如下:【注意】中断连接端可以是Client 端,也可以是Server端。

假设Client端发起中断连接请求,也就是发送FIN报文。

Server端接到FIN 报文后,意思是说”我Client端没有数据要发给你了”,但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。

所以你先发送ACK,”告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息”。

这个时候Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。

当Server端确定数据已发送完成,则向Client端发送FIN报文,”告诉Client端,好了,我这边数据发完了,准备好关闭连接了”。

Client端收到FIN 报文后,”就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。

“,Server端收到ACK后,”就知道可以断开连接了”。

Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。

Ok,TCP连接就这样关闭了!整个过程Client端所经历的状态如下:而Server端所经历的过程如下:【注意】在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK 丢失了,它将重新发送。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

TCP(Transmission Control Protocol)传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
位码即tcp标志位,有6种标示:SYN(synchronous建立联机)ACK(acknowledgement确认) PSH(push传送)FIN(finish结束)RST(reset重置)URG(urgent紧急)
Sequence number(顺序号码)Acknowledge number(确认号码)
第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求建立联机;
第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的
seq+1),syn=1,ack=1,随机产生seq=7654321的包
第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机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,随机产生seq number=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收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,192.168.1.116会再发送ack number=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报文。

相关文档
最新文档