TCP三次握手原理

合集下载

TCP三次握手详解

TCP三次握手详解

TCP三次握⼿详解问题描述场景:JAVA的client和server,使⽤socket通信。

server使⽤NIO。

1.间歇性得出现client向server建⽴连接三次握⼿已经完成,但server的selector没有响应到这连接。

2.出问题的时间点,会同时有很多连接出现这个问题。

3.selector没有销毁重建,⼀直⽤的都是⼀个。

4.程序刚启动的时候必会出现⼀些,之后会间歇性出现。

分析问题正常TCP建连接三次握⼿过程:第⼀步:client 发送 syn 到server 发起握⼿;第⼆步:server 收到 syn后回复syn+ack给client;第三步:client 收到syn+ack后,回复server⼀个ack表⽰收到了server的syn+ack(此时client的56911端⼝的连接已经是established)从问题的描述来看,有点像TCP建连接的时候全连接队列(accept队列,后⾯具体讲)满了,尤其是症状2、4. 为了证明是这个原因,马上通过 netstat -s | egrep "listen" 去看队列的溢出统计数据:667399 times the listen queue of socket overflowed反复看了⼏次之后发现这个overflowed ⼀直在增加,那么可以明确的是server上全连接队列⼀定溢出了。

接着查看溢出后,OS怎么处理:cat /proc/sys/net/ipv4/tcp_abort_on_overflowtcp_abort_on_overflow 为0表⽰如果三次握⼿第三步的时候全连接队列满了那么server扔掉client 发过来的ack(在server端认为连接还没建⽴起来)为了证明客户端应⽤代码的异常跟全连接队列满有关系,我先把tcp_abort_on_overflow修改成 1,1表⽰第三步的时候如果全连接队列满了,server发送⼀个reset包给client,表⽰废掉这个握⼿过程和这个连接(本来在server端这个连接就还没建⽴起来)。

tcp通信过程

tcp通信过程

TCP协议通讯工作原理一、TCP三次握手传输控制协议(Transport Control Protocol)是一种面向连接的,可靠的传输层协议。

面向连接是指一次正常的TCP传输需要通过在TCP客户端和TCP服务端建立特定的虚电路连接来完成,该过程通常被称为“三次握手”。

可靠性可以通过很多种方法来提供保证,在这里我们关心的是数据序列和确认。

TCP通过数据分段(Segment)中的序列号保证所有传输的数据可以在远端按照正常的次序进行重组,而且通过确认保证数据传输的完整性。

要通过TCP 传输数据,必须在两端主机之间建立连接。

举例说明,TCP客户端需要和TCP服务端建立连接,过程如下所示:TCP ClientFlagsTCP Server1 Send SYN (seq=w)----SYN--->SYN Received2 SYN/ACK Received<---SYN/ACK----Send SYN (seq=x),ACK (w+1)3 Send ACK (x+1)----ACK--->ACK Received,Connection Establishedw: ISN (Initial Sequence Number) of the Clientx: ISN of the Server在第一步中,客户端向服务端提出连接请求。

这时TCP SYN标志置位。

客户端告诉服务端序列号区域合法,需要检查。

客户端在TCP报头的序列号区中插入自己的ISN。

服务端收到该TCP分段后,在第二步以自己的ISN回应(SYN标志置位),同时确认收到客户端的第一个TCP分段(ACK标志置位)。

在第三步中,客户端确认收到服务端的ISN(ACK标志置位)。

到此为止建立完整的TCP连接,开始全双工模式的数据传输过程。

二、TCP标志这里有必要介绍一下TCP分段中的标志(Flag)置位情况。

如下图所示:*SYN:同步标志同步序列编号(Synchronize Sequence Numbers)栏有效。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

tcp精度的工作原理

tcp精度的工作原理

tcp精度的工作原理
TCP(Transmission Control Protocol)是一种网络传输层协议,主要负责数据的可靠传输。

它的工作原理可以概括为以下几个步骤:
1. 三次握手建立连接:客户端向服务器发送一个连接请求报文段,服务器接收到后发送一个连接确认报文段作为响应,最后客户端再发送一个确认报文段作为回应,完成连接的建立。

2. 数据分段和封装:发送端根据应用层传来的数据将其分成合适的大小,然后封装到TCP报文段中。

每个报文段包含源端
口号和目的端口号、顺序号、确认号等控制信息。

3. 可靠性保证:TCP使用滑动窗口机制和序号来实现可靠传输。

接收端收到报文段后会发送一个确认报文段给发送端,确认发送端已经收到了正确的数据。

如果发送端没有收到确认报文段,会进行重传保证数据可靠性。

4. 拥塞控制:TCP使用拥塞控制算法来避免网络拥塞和控制
发送速率。

它通过计算网络的拥塞程度来动态调整发送数据的速率,以防止网络出现拥塞。

5. 连接的释放:当发送端或接收端需要关闭连接时,会使用四次挥手的方式来释放连接。

其中双方需要发送一个连接释放报文段,并进行确认,最后才能彻底关闭连接。

总之,TCP通过建立可靠的连接、分段封装数据、实现可靠
的数据传输和拥塞控制等多种机制来实现精确的数据传输。

这些机制使得TCP成为一种可靠的传输协议,广泛应用于互联网上的数据传输。

TCP建立连接时的三次握手

TCP建立连接时的三次握手

TCP建立连接时的三次握手TCP:Transmission Control Protocol 传输控制协议TCP简介TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transpo rt layer)通信协议,由IETF的RFC 793说明(specified)。

在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。

在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。

不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。

之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。

TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。

然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,他是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。

在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。

在拥塞控制上,采用慢启动算法。

[编辑本段]什么是TCP/IP?TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。

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连接的三次握手是一种网络通信协议,它是建立可靠连接的基础,是TCP/IP协议族中最
重要的一部分。

它的基本原理是,两台计算机在建立连接之前,需要进行三次握手,以确保双
方都能够正确地收发数据。

首先,客户端发送一个连接请求报文,报文中包含客户端的IP地址和端口号,以及服务器的
IP地址和端口号。

服务器收到连接请求报文后,会发送一个确认报文,报文中包含服务器的
IP地址和端口号,以及客户端的IP地址和端口号。

接着,客户端收到确认报文后,会发送一个确认报文,报文中包含客户端的IP地址和端口号,以及服务器的IP地址和端口号。

服务器收到确认报文后,会发送一个确认报文,报文中包含
服务器的IP地址和端口号,以及客户端的IP地址和端口号。

最后,客户端收到确认报文后,就可以开始发送数据了。

这样,客户端和服务器之间就建立了
一个可靠的连接,双方可以安全地传输数据。

总之,TCP连接的三次握手是一种网络通信协议,它是建立可靠连接的基础,是TCP/IP协议
族中最重要的一部分。

它的基本原理是,两台计算机在建立连接之前,需要进行三次握手,以确保双方都能够正确地收发数据。

它的优点是可靠性高,可以有效地防止数据丢失和网络拥塞,从而提高网络传输效率。

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协议的三次握手来判断目标主机上
的端口是否开放。

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

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

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

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

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

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

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

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

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

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

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

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

TCP的三次握手四次挥手理解及面试题

TCP的三次握⼿四次挥⼿理解及⾯试题⼀、TCP概述每⼀条TCP连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端⼝号拼接到IP地址即构成了套接字,例如,若IP地址为192.0.0.1 ⽽端⼝号为8000,那么得到的套接字为192.0.0.1:8000⼆、TCP报⽂格式ACK、SYN和FIN这些⼤写的单词表⽰标志位,其值要么是1,要么是0;ack、seq⼩写的单词表⽰序号同步SYN:(Synchronize ),SYN=1表⽰这是⼀个连接请求报⽂,或连接接受报⽂。

SYN这个标志位只有在TCP建产连接时才会被置1,握⼿完成后SYN标志位被置0确认ACK:仅当ACK=1时,确认号字段才有效。

ACK=0时,确认号⽆效。

如:当SYN=1,ACK=0时表⽰这是⼀个连接请求报⽂段,若同意连接,则在响应报⽂段中使得SYN=1,ACK=1终⽌FIN:⽤来释放⼀个连接。

FIN=1表⽰:此报⽂段的发送⽅的数据已经发送完毕,并要求释放序列号seq:(Sequence Number),占4个字节,表⽰报⽂段携带数据的第⼀个字节的编号,TCP连接中传送的字节流中的每个字节都按顺序编号。

例如,⼀段报⽂的序号值是 301 ,⽽携带的数据共有100字段,显然下⼀个报⽂段(如果还有的话)的数据序号应该从401开始;,图中的 x 和 y,确认号ack:占4个字节,期待收到对⽅下⼀个报⽂段的第⼀个数据字节的序号,例如,B收到了A发送过来的报⽂段,其序列号seq是1,⽽数据长度是100字节,这表明B正确的收到了A发送的到序号从1到100为⽌的数据。

因此,B期望收到A的下⼀个数据序号是100+1,于是B在发送给A的确认报⽂段中把确认号置为101三、三次握⼿,四次挥⼿3.1 TCP连接的建⽴过程——三次握⼿建⽴双向通道的过程称之为三次握⼿,建⽴通道的发起者可以是客户端也可以是服务端,下⾯我们就以客户端先主动发起为例客户端会朝服务端发送⼀个请求询问服务端:"我能不能挖⼀条通往你家的地道"服务端收到请求,回复说:"好吧你挖吧",由于TCP是双向通道,客户端挖向服务端的通道只能给客户端朝服务端发消息使⽤,服务端要向给客户端发消息是没办法⾛这⼀条通道的,需要⾃⼰挖⼀条通往客户端的通道所以服务端在回复同意客户端挖通道的同时还会问⼀句:"那我能不能也挖⼀条通往你家的通道"客户端收到服务端请求后客户端到服务端的通道就挖成功了,然后也会同意服务端的请求,服务端挖向客户端的通道也会成功1.服务器准备:TCP服务器进程先创建传输控制块TCB,时刻准备接受客户进程的连接请求,此时服务器就进⼊了LISTEN(监听)状态2.客户端准备:TCP客户进程也是先创建传输控制块TCB3.第⼀次握⼿:客户端向服务器发出连接请求报⽂,报⽂⾸部中的同步标志SYN=1,同时⽣成⼀个初始序列号 seq=x ,此时,TCP 客户端进程进⼊了 SYN-SENT (同步已发送状态)状态。

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

TCP三次握手
TCP是面向连接的,所谓面向连接,就是当计算机双方通信时必需先建立连接,然后数据传送,最后拆除连接三个过程
并且TCP在建立连接时又分三步走:
第一步是请求端(客户端)发送一个包含SYN即同步(Synchronize)标志的TCP报文,SYN 同步报文会指明客户端使用的端口以及TCP连接的初始序号;
第二步,服务器在收到客户端的SYN报文后,将返回一个SYN+ACK的报文,表示客户端的请求被接受,同时TCP序号被加一,ACK即确认(Acknowledgement)。

第三步,客户端也返回一个确认报文ACK给服务器端,同样TCP序列号被加一,到此一个TCP 连接完成。

然后才开始通信的第二步:数据处理。

这就是所说的TCP三次握手(Three-way Handshake)。

简单的说就是:(C:客户端,S:服务端)
C:SYN到S
S:如成功--返回给C(SYN+ACK)
C:如成功---返回给S(ACK)
以上是正常的建立连接方式,但如下:
假设一个C向S发送了SYN后无故消失了,那么S在发出SYN+ACK应答报文后是无法收到C的ACK报文的(第三次握手无法完成),这种情况下S一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒-2分钟);一个C出现异常导致S的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,S将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。

实际上如果S的TCP/IP栈不够强大,最后的结果往往是堆栈溢出崩溃---即使S的系统足够强大,S也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟C的正常请求比率非常之小),此时从正常客户的角度看来,S失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。

以上的例子常被称作DoS(拒绝服务攻击)与DDoS(分布式拒绝服务攻击)
注意:其中这儿的C和S都是相对的,对于现在的计算机来讲,只要自己的计算机建立任一服务,在一定情况下都可被称为S。

相关文档
最新文档