TCP三次握手及原理讲解

合集下载

tcp三次握手四次挥手大白话理解

tcp三次握手四次挥手大白话理解

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

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

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

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

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

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

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

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

到此为⽌双⽅整个通信过程就此终结。

这⾥要声明⼀下:断开链接不⼀定就是客户端,谁都可以先发起断开指令,另外客户端和服务端是没有固定标准的,谁先发起请求谁就是客户端。

TCP三次握手四次挥手过程及原理

TCP三次握手四次挥手过程及原理

TCP三次握手四次挥手过程及原理TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输控制协议。

在一个TCP连接的建立和断开过程中,都需要进行三次握手和四次挥手。

1. TCP三次握手(Three-Way Handshake)过程三次握手的目的是在发送和接收数据之前,确保双方都能正常地建立起连接。

握手过程如下:第一步:客户端发送请求连接的SYN(Synchronize)报文段,其中的SYN标志位被置为1,随机选择一个序号seq=x,并将该报文段发送给服务端。

第二步:服务端接收到SYN报文段后,会发送一个SYN+ACK报文段作为确认,其中SYN和ACK标志位都被置为1,服务端还会随机选择一个序号seq=y和一个确认号ack=x+1,并将该报文段发送给客户端。

第三步:客户端接收到SYN+ACK报文段后,会再次发送一个ACK报文段作为最终确认,其中ACK标志位被置为1,确认号ack=y+1,序号seq=x+1,并将该报文段发送给服务端。

当服务端接收到该最终ACK报文段后,整个三次握手过程完成,TCP 连接建立成功,双方可以开始进行数据的传输。

三次握手的原理是通过双方的一系列报文段交互,确保双方都具备接收和发送数据的能力。

这样可以防止服务端收到重复连接请求和客户端无法接收服务端的响应。

2. TCP四次挥手(Four-Way Handshake)过程四次挥手的目的是在断开连接时,客户端和服务端都能正常地结束连接。

挥手过程如下:第一步:客户端发送一个FIN(Finish)报文段,其中的FIN标志位被置为1,并且带有一个序号seq=u,发送给服务端。

第二步:服务端接收到客户端的FIN报文段后,会发送一个ACK报文段作为确认,ACK标志位被置为1,确认号ack=u+1,并将该报文段发送给客户端。

第三步:在服务端接收到客户端的FIN报文段后,服务端还需要等待一段时间,将所有的数据都发送给客户端。

TCP三次握手及原理

TCP三次握手及原理

TCP三次握手及原理TCP是一种面向连接的协议,它建立在IP协议之上。

在用TCP协议进行通信之前,客户端和服务器需要先进行连接的建立。

TCP连接的建立需要通过三次握手来完成。

第一次握手:客户端向服务器发送一个SYN(同步)包,指明客户端的初始化序列号(sequence number)并置SYN标志位为1、初始化序列号是一个随机数,用于确保数据能够按正确的顺序接收。

第二次握手:服务器接收到客户端的SYN包后,会发送一个SYN+ACK包作为回应。

该包里的SYN标志位置为1,ACK标志位(确认)置为1,确认序列号(acknowledge number)是客户端初始化序列号加1,并发送自己的初始化序列号。

服务器也会随机生成一个初始化序列号。

第三次握手:客户端接收到服务器的SYN+ACK包后,会向服务器发送一个ACK(确认)包作为回应。

该包的ACK标志位置为1,确认序列号设置为服务器的初始化序列号加1,而自己的序列号设置为刚刚收到的SYN包中的初始化序列号加1最后,服务器收到客户端发送的ACK包后,连接建立成功。

此时,客户端和服务器之间的TCP连接已经建立起来,双方可以开始进行数据的交互。

1.可靠性:通过三次握手,客户端和服务器能够确认对方的存在以及双方所使用的初始化序列号。

这样,在后续的数据传输过程中可以确认数据包的发送与接收情况,从而提供可靠的数据传输。

2.防止失效的连接请求建立:假设客户端发送的SYN包丢失了,服务器没有收到。

如果TCP是两次握手的话,服务器会认为客户端并没有发起连接请求,而关闭连接。

而通过三次握手,服务器需要收到两个正确的序列号后才会确认连接建立,从而避免了这样的情况发生。

3.防止已失效的连接请求被服务器接受:假设服务器发送的SYN+ACK包丢失了,客户端没有收到。

如果TCP是两次握手的话,客户端认为已经建立了连接,但实际上服务器却并没有接受该连接请求。

而通过三次握手,客户端需要再次发送ACK包,从而确保服务器正确地接受了连接请求。

简述三次握手和四次挥手的流程

简述三次握手和四次挥手的流程

一、三次握手的流程1. 客户端向服务器发起连接请求在进行三次握手的第一步,客户端会向服务器发送一个特殊的SYN(同步)包,来请求建立连接。

这个包中会包含一个随机生成的序列号,作为本次连接的起始值。

2. 服务器确认客户端的请求收到客户端的SYN包之后,服务器会向客户端发送一个ACK (确认)包作为应答,并且也会包含一个随机生成的序列号,作为本次连接的起始值。

此时,服务器也会发送一个SYN包给客户端,表示自己也同意连接。

3. 客户端确认服务器的应答客户端收到服务器的ACK包之后,同样会发送一个ACK包作为应答,表示客户端也同意建立连接。

此时,双方的连接就正式建立起来了。

二、四次挥手的流程1. 客户端告知服务器自己要断开连接在进行四次挥手的第一步,客户端会向服务器发送一个FIN(结束)包,表示自己要断开连接。

2. 服务器收到客户端的请求,确认可以断开连接服务器收到客户端的FIN包之后,会向客户端发送一个ACK包作为应答,表示自己已经收到了客户端的断开连接请求,并且同意断开连接。

3. 服务器也告知客户端自己要断开连接在进行四次挥手的第三步,服务器会向客户端发送一个FIN包,表示自己也要断开连接。

4. 客户端确认服务器的应答,断开连接客户端收到服务器的FIN包之后,会向服务器发送一个ACK包作为应答,表示自己已经收到了服务器的断开连接请求,并且同意断开连接。

此时,连接就正式断开了。

总结:三次握手和四次挥手是TCP协议中用于建立和断开连接的过程,通过以上流程的描述,我们可以清晰地了解到建立连接和断开连接的详细步骤。

这对于网络通信的稳定性和安全性有着重要的意义。

在网络通信中,TCP协议的三次握手和四次挥手是非常重要的过程,它们保证了数据的可靠传输和连接的安全关闭。

接下来,我们将对三次握手和四次挥手的过程进行更深入的探讨。

我们来看三次握手的过程。

在这个过程中,客户端和服务器需要经历一系列步骤来建立可靠的连接。

客户端向服务器发送一个特殊的SYN (同步)包,其中包含一个随机生成的序列号,用于标识本次连接的起始值。

三次握手和四次挥手的原理

三次握手和四次挥手的原理

三次握手和四次挥手的原理三次握手是指在建立TCP连接时,客户端和服务器之间需要进行三次通信确认。

第一次握手:客户端发送一个SYN(同步序列号)包给服务器,请求建立连接。

该包包含随机的初始序列号。

第二次握手:服务器收到客户端的SYN包后,向客户端发送一个SYN+ACK(确认同步序列号)包。

该包中将确认客户端的初始序列号,并在该确认序列号的基础上增加1第三次握手:客户端收到服务器的SYN+ACK包后,向服务器发送一个ACK(确认)包。

该包中确认服务器的初始序列号,并在该确认序列号的基础上增加1,建立连接。

原理:1.客户端发送的SYN包使服务器知道客户端的存在,并向客户端发送SYN+ACK包确认对方的存在。

2.客户端收到服务器的SYN+ACK包后,向服务器发送确认包ACK,表示接收到了服务器的确认,并建立连接。

3.服务器收到客户端的ACK包后,也确认了客户端的存在,并完成连接的建立。

四次挥手是指在断开TCP连接时,客户端和服务器之间需要进行四次通信确认。

第一次挥手:客户端发送一个FIN(结束)包给服务器,请求断开连接。

第二次挥手:服务器收到客户端的FIN包后,向客户端发送一个ACK 包,表示已经接收到了客户端的请求,并还没有准备好断开连接。

第三次挥手:服务器发送一个FIN包给客户端,表示服务器准备好断开连接。

第四次挥手:客户端收到服务器发送的FIN包后,向服务器发送一个ACK包,表示已经接收到了服务器的请求,并确认断开连接。

原理:1.客户端发送的FIN包表示客户端不再发送数据,但仍然可以接收来自服务器的数据。

2.服务器收到客户端的FIN包后,向客户端发送一个ACK包,表示已经接收到了客户端的断开请求,但服务器可能还有数据需要发送给客户端。

3.服务器完成数据发送后,发送一个FIN包给客户端,表示服务器已经准备好断开连接。

4.客户端收到服务器的FIN包后,向服务器发送一个ACK包,确认接收到了服务器的请求,并断开连接。

tcp扫描的原理

tcp扫描的原理

tcp扫描的原理
TCP扫描也被称为状态探测扫描,是对主机进行安全漏洞扫描时最常
用的扫描方式之一、TCP扫描可以扫描出端口打开和关闭的状态,以及计
算机上可以运行的应用程序及其版本。

TCP扫描的原理:
1)分析TCP三次握手:TCP扫描是建立在三次握手的基础上的,三
次握手包含四个步骤:(1)发起方向接收方发送syn(同步)报文;(2)接收方向发起方发送syn/ack(同步/确认)报文;(3)发起方发送ack (确认)报文;(4)双方建立TCP连接。

2)发送TCP数据包到特定端口:在扫描过程中,扫描器会向目标主
机上所有端口发送特定类型的数据包,如SYN(同步)数据包,当发送数
据包的端口处于開放状态时,主机会发生ACK(确认)报文,从而建立
TCP连接。

3)分析收到的响应:当发送数据包到其中一特定端口,扫描器收到
来自目标系统的包,分析收到的响应,确定端口是否处于打开状态。

4)根据端口状态,查询特定服务:如果端口处于打开状态,扫描器
会向该端口发送特定格式的数据包,来查询运行在该端口上的服务类型、
版本、参数等。

由于可以分析收到响应,因而TCP扫描这种扫描方式准确率较高,但
是由于要发送大量数据包,耗时较久。

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包(header+data),此外,TCP报。。。

TCP报文格式和三次握手——三次握手三个tcp包(header+data),此外,TCP报。。。

TCP报⽂格式和三次握⼿——三次握⼿三个tcp包(header+data),此外,TCP报。

TCP报⽂是TCP层传输的数据单元,也叫报⽂段。

1、端⼝号:⽤来标识同⼀台计算机的不同的应⽤进程。

1)源端⼝:源端⼝和IP地址的作⽤是标识报⽂的返回地址。

2)⽬的端⼝:端⼝指明接收⽅计算机上的应⽤程序接⼝。

TCP报头中的源端⼝号和⽬的端⼝号同IP数据报中的源IP与⽬的IP唯⼀确定⼀条TCP连接。

2、序号和确认号:是TCP可靠传输的关键部分。

序号是本报⽂段发送的数据组的第⼀个字节的序号。

在TCP传送的流中,每⼀个字节⼀个序号。

e.g.⼀个报⽂段的序号为300,此报⽂段数据部分共有100字节,则下⼀个报⽂段的序号为400。

所以序号确保了TCP传输的有序性。

确认号,即ACK,指明下⼀个期待收到的字节序号,表明该序号之前的所有数据已经正确⽆误的收到。

确认号只有当ACK标志为1时才有效。

⽐如建⽴连接时,SYN报⽂的ACK标志位为0。

3、数据偏移/⾸部长度:4bits。

由于⾸部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位⾸部长度字段所能表⽰的最⼤值为1111,转化为10进制为15,15*32/8 = 60,故报头最⼤长度为60字节。

⾸部长度也叫数据偏移,是因为⾸部长度实际上指⽰了数据区在报⽂段中的起始偏移值。

4、保留:为将来定义新的⽤途保留,现在⼀般置0。

5、控制位:URG ACK PSH RST SYN FIN,共6个,每⼀个标志位表⽰⼀个控制功能。

1)URG:紧急指针标志,为1时表⽰紧急指针有效,为0则忽略紧急指针。

2)ACK:确认序号标志,为1时表⽰确认号有效,为0表⽰报⽂中不含确认信息,忽略确认号字段。

3)PSH:push标志,为1表⽰是带有push标志的数据,指⽰接收⽅在接收到该报⽂段以后,应尽快将这个报⽂段交给应⽤程序,⽽不是在缓冲区排队。

4)RST:重置连接标志,⽤于重置由于主机崩溃或其他原因⽽出现错误的连接。

tcp扫描原理

tcp扫描原理

tcp扫描原理
TCP扫描原理是通过TCP协议的三次握手来判断目标主机上
的端口是否开放。

首先,扫描器发送一个SYN包(同步包)给目标主机的特定
端口。

如果该端口是关闭的,目标主机会发送一个RST包
(复位包)作为响应,表示拒绝连接。

如果该端口是开放的,目标主机则会返回一个SYN/ACK包
(同步/确认包)。

这表明目标主机愿意与扫描器建立连接。

接下来,扫描器发送一个ACK包(确认包)给目标主机,表
示接受连接。

最后,目标主机发送一个RST包给扫描器,关
闭连接。

这一系列的握手过程可以帮助扫描器判断端口的状态。

在TCP扫描中,还有其他几种方式用于判断端口的开放状态。

- 被动扫描(TCP SYN扫描):扫描器向目标主机发送一个SYN包,如果目标主机返回SYN/ACK包,则表示端口开放;如果返回RST包,则表示端口关闭。

- 主动扫描(TCP Connect扫描):扫描器尝试与目标主机建
立完整的TCP连接,如果连接成功,则表示端口开放;如果
连接失败,则表示端口关闭。

- 应答扫描(TCP ACK扫描):扫描器发送一个ACK包给目
标主机,如果返回RST包,则表示端口关闭;如果没有响应,则表示目标主机过滤了该扫描类型。

TCP扫描技术常用于网络安全领域,用于检测目标主机上的开放端口,以发现系统漏洞或进行安全评估。

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请求,服务器回复SYN+ACK确认,客户端再回复ACK确认,这样就建立了一条TCP连接。

在这个过程中,每个阶段的状态都是不同的,下面详细介绍一下如何判断三次握手的状态。

1.客户端发送SYN请求
在这个阶段,客户端向服务器发送SYN请求,此时客户端的状态为SYN_SENT,表示客户端已经发送了一个SYN请求,并等待服务器的回复。

2.服务器回复SYN+ACK确认
当服务器接收到客户端的SYN请求后,会回复一个SYN+ACK确认,此时服务器的状态为SYN_RECEIVED,表示服务器已经收到了客户端的SYN请求,并向客户端回复了一个SYN+ACK确认。

3.客户端回复ACK确认
当客户端接收到服务器的SYN+ACK确认后,会回复一个ACK确认,此时客户端的状态变为ESTABLISHED,表示连接已经建立。

服务器也会在收到客户端的ACK确认后,状态也变为ESTABLISHED,表示连接已经成功建立。

总结
三次握手过程中,客户端和服务器状态的转换如下:
客户端:SYN_SENT → ESTABLISHED
服务器:SYN_RECEIVED → ESTABLISHED
因此,判断三次握手状态的关键是要知道每个阶段的状态,根据不同的状态来判断连接是否成功建立。

如果出现任何一方的状态不正确,就说明连接建立失败,需要重新尝试建立连接。

三次握手协议

三次握手协议

三次握手协议在计算机网络通信中,三次握手协议(Three-Way Handshake)是建立TCP连接的一种方式。

通过三次握手,服务器与客户端可以确认彼此的通信状态,并确保双方可以正常传输数据。

本文将介绍三次握手协议的原理以及其在网络通信中的应用。

一、三次握手协议的原理三次握手协议的原理基于网络通信的可靠性和安全性要求。

当客户端与服务器建立连接时,双方需要进行以下三个步骤:1.第一次握手(SYN):客户端发送一个SYN(同步)报文给服务器,请求建立连接。

该报文包含随机生成的初始序列号和一些连接请求的参数。

2.第二次握手(SYN+ACK):服务器收到客户端的SYN报文后,如果同意建立连接,则会发送一个SYN+ACK报文给客户端。

该报文中的SYN标志表示服务器已收到客户端的请求,并将客户端的初始序列号加一作为自己的初始序列号。

3.第三次握手(ACK):客户端在收到服务器的SYN+ACK报文后,会发送一个ACK(确认)报文给服务器。

该报文中的ACK标志表示客户端已收到服务器的确认,并将服务器的初始序列号加一作为自己的初始序列号。

通过以上三个步骤,客户端与服务器完成了三次握手,建立了可靠的TCP连接。

双方现在可以开始正常地传输数据。

二、三次握手协议的应用三次握手协议在网络通信中起到了至关重要的作用。

它保证了通信双方的连接可靠性和数据传输的安全性。

以下是三次握手协议在实际应用中的一些应用场景:1.网页浏览:当用户在浏览器中输入网址并访问网页时,浏览器会通过三次握手与服务器建立连接,然后开始传输网页数据。

这样可以确保用户能够正常地浏览网页内容。

2.文件下载:当用户从服务器下载文件时,下载工具会通过三次握手与服务器建立连接,然后开始传输文件数据。

这样可以保证文件的完整性和正确性。

3.电子邮件发送:当用户发送电子邮件时,电子邮件客户端会通过三次握手与邮件服务器建立连接,然后开始传输邮件数据。

这样可以确保邮件能够安全地发送到目的地。

一文彻底搞懂TCP三次握手、四次挥手过程及原理

一文彻底搞懂TCP三次握手、四次挥手过程及原理

⼀⽂彻底搞懂TCP三次握⼿、四次挥⼿过程及原理TCP 协议简述TCP 提供⾯向有连接的通信传输,⾯向有连接是指在传送数据之前必须先建⽴连接,数据传送完成后要释放连接。

⽆论哪⼀⽅向另⼀⽅发送数据之前,都必须先在双⽅之间建⽴⼀条连接。

在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握⼿进⾏初始化的。

同时由于TCP协议是⼀种⾯向连接的、可靠的、基于字节流的运输层通信协议,TCP是全双⼯模式,所以需要四次挥⼿关闭连接。

TCP包⾸部⽹络中传输的数据包由两部分组成:⼀部分是协议所要⽤到的⾸部,另⼀部分是上⼀层传过来的数据。

⾸部的结构由协议的具体规范详细定义。

在数据包的⾸部,明确标明了协议应该如何读取数据。

反过来说,看到⾸部,也就能够了解该协议必要的信息以及所要处理的数据。

包⾸部就像协议的脸。

所以我们在学习TCP协议之前,⾸先要知道TCP在⽹络传输中处于哪个位置,以及它的协议的规范,下⾯我们就看看TCP⾸部的⽹络传输起到的作⽤:下⾯的图是TCP头部的规范定义,它定义了TCP协议如何读取和解析数据:TCP⾸部承载这TCP协议需要的各项信息,下⾯我们来分析⼀下:TCP端⼝号TCP的连接是需要四个要素确定唯⼀⼀个连接:(源IP,源端⼝号)+ (⽬地IP,⽬的端⼝号)所以TCP⾸部预留了两个16位作为端⼝号的存储,⽽IP地址由上⼀层IP协议负责传递源端⼝号和⽬地端⼝各占16位两个字节,也就是端⼝的范围是2^16=65535另外1024以下是系统保留的,从1024-65535是⽤户使⽤的端⼝范围TCP的序号和确认号:32位序号 seq:Sequence number 缩写seq ,TCP通信过程中某⼀个传输⽅向上的字节流的每个字节的序号,通过这个来确认发送的数据有序,⽐如现在序列号为1000,发送了1000,下⼀个序列号就是2000。

32位确认号 ack:Acknowledge number 缩写ack,TCP对上⼀次seq序号做出的确认号,⽤来响应TCP报⽂段,给收到的TCP报⽂段的序号seq 加1。

tcp三次握手使用的控制位类型

tcp三次握手使用的控制位类型

tcp三次握手使用的控制位类型TCP三次握手是建立TCP连接的一种方法,它使用了三种控制位类型,即SYN、ACK、和FIN。

下面将详细介绍这三种控制位的含义和在三次握手过程中的用法。

首先,我们来了解SYN(Synchronize)控制位。

在TCP三次握手中的第一步,即建立连接请求时,发送方会设置SYN位为1,表示发起一个连接请求。

接收方在收到这个请求后,会设置SYN位和ACK (Acknowledgement)位为1,表示接收方已准备好建立连接,并且接收到的序号为发送方的序号加一。

接下来是ACK(Acknowledgement)控制位。

ACK位用于确认收到数据的准确性,也用于同步双方之间的数据传输。

在TCP三次握手过程中的第二步,即接收到连接请求后,发送方会设置ACK位为1,表示已收到接收方的连接请求,并且确保数据传输的准确性。

接收方在收到确认后,也会设置ACK位为1,表示已经确认发送方的连接请求,双方可以开始进行数据传输。

最后是FIN(Finish)控制位。

FIN位用于关闭TCP连接。

在TCP三次握手过程的最后一步,即断开连接时,发送方会设置FIN位为1,表示需要关闭连接。

接收方在收到FIN位后,会设置自己的ACK位为1,表示已经收到FIN位,并且同意关闭连接。

然后,接收方也会设置FIN 位为1,表示自己也准备好关闭连接。

发送方在收到接收方的ACK位和FIN位后,会设置自己的ACK位为1,表示已确认接收方的关闭请求,接收方和发送方会分别关闭连接。

通过TCP三次握手的过程,我们可以保证双方建立起可靠的连接,并且在数据传输过程中保持数据的准确性和完整性。

SYN、ACK、和FIN 三种控制位的使用,使得数据传输过程中的连接建立和关闭都能被双方准确地识别和确认。

这种可靠的数据传输方式为网络通信提供了一定的指导意义,使得我们能够更好地理解和掌握TCP协议的工作原理。

在实际应用中,我们需要根据具体的需求和网络环境来使用TCP三次握手。

三次握手过程详解

三次握手过程详解

三次握手过程详解
嘿,朋友们!今天咱来好好唠唠三次握手过程。

这就好比是两个人要开始一场特殊的“交流舞会”!
想象一下,客户端就像是一个想邀请服务端跳舞的勇敢者。

第一次握手,客户端大大方方地发出邀请:“嘿,我想和你连接,可以吗?”这就像是你勇敢地对喜欢的人说:“我能约你一起出去玩吗?”服务端收到邀请后,如果有空,就愉快地回应:“好呀,我准备好了!”这可不就像是对方微笑着回答:“行呀!”这就是第二次握手。

然后呢,客户端收到这个回应,开心地回一句:“那咱开始跳舞咯!”这就是第三次握手啦,至此,连接正式建立!
在这个过程中,每一次握手都至关重要啊!要是第一次握手客户端的邀请没成功发出去,那不就像你说话对方没听见,连接咋能建立呢?或者第二次握手,服务端没回应,那也是白搭呀,不就像你约人,人家没答复嘛!所以说,这三次握手真的超级重要,它们确保了双方都知道对方准备好了,可以愉快地交流啦!难道不是吗?这样一说,是不是对三次握手过程清楚多啦?哈哈!。

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协议三次握手的工作原理

tcp协议三次握手的工作原理

tcp协议三次握手的工作原理
TCP协议的三次握手是建立TCP连接的过程,其工作原理如下:
1. 第一次握手:
- 客户端向服务器发送一个连接请求报文段,其中包含SYN
标志位设置为1,序号为A,然后进入SYN_SENT状态等待
服务器的确认。

- 客户端首先选择一个初始的序列号A,并随机生成一个初
始的ISN(Initial Sequence Number)作为初始序列号。

2. 第二次握手:
- 服务器接收到客户端的连接请求报文段后,如果同意建立
连接,则向客户端发送一个确认报文段,其中包含SYN和ACK标志位都设置为1,确认号为A+1,序号为B。

- 服务器也会为该连接选择一个自己的初始序列号B,随机
生成一个ISN。

3. 第三次握手:
- 客户端接收到服务器的确认报文段后,向服务器发送一个
确认报文段,其中ACK标志位设置为1,确认号为B+1,序
号为A+1。

- 服务器接收到客户端的确认报文段后,连接建立成功,双
方可以开始进行数据传输。

通过三次握手,可以确保双方都能确认对方的可达性和能够接收数据,建立了可靠的连接。

若其中任何一次握手失败或超时,
连接建立就会失败,双方不会建立连接。

此外,三次握手也可以防止过期的连接请求报文段被误认为是新连接的请求。

TCPIP三次握手的过程和抓包分析原理

TCPIP三次握手的过程和抓包分析原理
第三步,172.16.48.2对来自172.16.48.1的SYN段进行确认,至此,TCP三次握手协议完成,连接建立,在172.16.48.2收 到SYN段时,将自己对应的socket的状态由TCP_SYN_SENT改为TCP_ESTABLISHED,进入连接建立状态,下面是数据内容:
数据内容 含义
TCP 使用类似的握手过程来结束连接。这可确保两个主机均能完成传输并确保所有的数据均得以接收
TCP Client Flags TCP Server
1 Send SYN (seq=x) ----SYN---> SYN Received
2 SYN/ACK Received ACK Received, Connection Established
现在,我们来看一个完整的流程,在一个TCP socket上系统调用connect究竟是如何建立起一个到对端的连接的。我们还是以实验环境172.16.48.2向172.16.48.1的端口5002发起连接请求为例。
第一步,172.16.48.2向172.16.48.1发起连接请求,发送一个SYN段,指明目的端口5002,通告自己的初始序号(ISN,由协议栈 随机产生的一个32位数),设置确认序号为0(因为还没有收到过对端的数据),通告自己的滑动窗口大小为5840(对端是5792,这似乎有问题,有待进 一步细查),窗口扩大因子为2(在首部选项中),通告最大报文段长度为1460(本地局域网),下面是数据内容(已剥去链路层的以太网首部和网络层的IP 首部):
98 8e 40 92 确认序号(对端ISN+1)
8 首部长度(8*4=32,有12字节的选项)
0 10 标志,ACK=1
TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

二、tcp通信的要素
2.1 终端设备的功能
把待传送的信息和信道上传送的信号互相转换;发送传感 器用以感受信号,接收传感器将信号恢复成信息。 传感器必须能正确地表达待传送的信息的实质,并能反变 换成所需信息。这是高保真度和高质量,同样它也需与费 用作权衡。 传感器是终端机的终端。
2.2 处理信号的设备以使能与信道匹配:
(b)处理信号的设备以使能与信道匹配:
对于网内中继线两端的设备(端机),只是要求有处理信号 的功能,而不需要传感器。
线路匹配:包括物理特性的匹配(电流电压值应为线路所容 许),和阻抗的匹配;
频带匹配:基带信号必须迁移到所分配的频带内,带外的残 余尽可能地小以免影响别的信道;
对半双工线路还要使收到的信号不混入发出的信号,至少 应抑止回音干扰。
2.3 TCP拥塞窗口的控制
慢启动 当启动一个新的连接或者在拥塞后重新发送报文段时,
以一个报文段作为拥塞窗口的初始值,以后每次收到一个 确认之后,将拥塞窗口增加一倍; 拥塞避免
在慢启动技术的基础上,增加一个拥塞窗口的增加条件。 当拥塞窗口的大小达到上次拥塞是窗口大小的一半时,以 后窗口中所有的报文段都确认后,窗口大小增加1,而不 是1倍; 加速递减
1.2 TCP三次握手示意图
1.3 FIN:结束标志
带有该标志置位的数据包用来结束一个TCP 回话,但对应端口仍处于开放状态,准备接 收后续数据。 服务端处于监听状态,客户端用于建立连接 请求的数据包(IP packet)按照TCP/IP协议 堆栈组合成为TCP处理的分段(segment)。
分析报头信息: TCP层接收到相应的TCP和IP报头,将这些信息存储 到内存中。
一旦发现丢失报文段,立即将拥塞窗口的大小减半, 直到窗口大小为1。对于保留在发送窗口中的报文段,其 超时定时器的时限增加1倍。
2.4 TCP拥塞窗口的控制
拥塞窗口
24 22 20 18 16 14 12 10
8 6 4 2
报文丢失
报文丢失
报文丢失
报文丢失
传输次数
0
2 4 6 8 10 12 14 16 18 20 22
查找协议控制块(PCB{}):TCP查找与该连接相关联的协议控制块。 如果没有找到,TCP将该分段丢弃并返回RST。(这就是TCP处理没有端 口监听情况下的机制) 如果该协议控制块存在,但状态为关闭,服务 端不调用connect()或listen()。该分段丢弃,但不返回RST。客户端 会尝试重新建立连接请求。
2.3 tcp通信示意图
架空明线
有线通信线路电缆同平轴衡轴 电电 缆
通信线路
光缆 中波
无线通信线路卫 短 微星 波 波
三、tcp拥塞控制
3.1 拥塞
由于一个或多个交换节点(如路由器)的数据报过载,出 现严重的时延。
当系统出现轻度拥塞时,路由器的队列中有大量的数据报 排队等待路由;
系统严重拥塞时,数据报的总数超过了路由器的容量,路 由器只能丢弃数据报。
网络层
目录
一、tcp三次握手协议 二、tcp通信的要素 三、tcp拥塞控制
一、tcp三次握手协议
1、1 TCP三次握手定义
仅在三次握手建立TCP连接时有效。它提示TCP连接的服务 端检查序列编号,该序列编号为TCP连接初始端(一般是客 户端)的初始序列编号。在这里,可以把TCP序列编号看作 是一个范围从0到4,294,967,295的32位计数器。通过 TCP连接交换的数据中每一个字节都经过序列编号。在TCP 报头中的序列编号栏包括了TCP分段中第一个字节的序列 编号。
慢启动
拥塞避免
加速递减
慢启动
拥塞避免
由于TCP采用了超时重传机制,因此,如果拥塞不加以控 制,可能导致大量的报文重传,并再度引起大量的数据报 丢弃,直到整个网络瘫痪。这种现象称为拥塞崩溃
Байду номын сангаас
3.2 许可的窗口
TCP通过滑动窗口机制来控制发送的数据量,窗口的大小 通过一下公式来确定: 许可的窗口=Min(通知窗口, 拥塞窗口) 拥塞窗口则根据报文超时的情况动态调整,用于避免网络 交换节点数据报过载。 TCP许可的窗口大小应该同时满足两个窗口的要求,因此, 取两个窗口大小的较小值
建立新的socket:当处于监听状态的socket收到该分段时,会建 立一个子socket,同时还有socket{},tcpcb{}和pub{}建立。这时如 果有错误发生,会通过标志位来拆除相应的socket和释放内存,TCP 连接失败。如果缓存队列处于填满状态,TCP认为有错误发生,所有 的后续连接请求会被拒绝。这里可以看出SYN Flood攻击是如何起作 用的。
对于发送的数据TCP要接收确认,确认时必须进行的:
对于发送的数据TCP要接收确认,确认时必须进行的: SND.UNA = 最老的确认了的序列号。 SND.NXT = 下一个要发送的序列号。 SEG.ACK = 接收TCP的确认,接收TCP期待的下一个序列 号。 SEG.SEQ = 一个数据段的第一个序列号。 SEG.LEN = 数据段中包括的字节数。 SEG.SEQ+SEG.LEN-1 = 数据段的最后一个序列号。
丢弃:如果该分段中的标志为RST或ACK,或者没有SYN标志,则 该分段丢弃。并释放相应的内存。
1.4 序列号
请注意,我们在TCP连接中发送的字节都有一个序列号。因为编了 号,所以可以确认它们的收到。对序列号的确认是累积性的。TCP 必须进行的序列号比较操作种类包括以下几种:
①决定一些发送了的但未确认的序列号。 ②决定所有的序列号都已经收到了。 ③决定下一个段中应该包括的序列号。
相关文档
最新文档