【思维导图】TCPTCP 三次握手和四次挥手-
tcp三次握手四次挥手大白话理解
![tcp三次握手四次挥手大白话理解](https://img.taocdn.com/s3/m/3436ff0efd4ffe4733687e21af45b307e871f93f.png)
tcp三次握⼿四次挥⼿⼤⽩话理解tcp三次握⼿四次挥⼿⼤⽩话理解三次握⼿建⽴连接阐述:第⼀次握⼿:客户端要和服务端进⾏通信,⾸先要告知服务端⼀声,遂发出⼀个SYN=1的连接请求信号,”服务端哥哥,我想给你说说话”。
第⼆次握⼿:当服务端接收到客户端的连接请求,此时要给客户端⼀个确认信息,”我知道了(ACK),我这边已经准备好了,你现在能连吗(SYN)”。
第三次握⼿:当客户端收到了服务端的确认连接信息后,要礼貌的告知⼀下服务端,“好的,咱们开始联通吧(ACK)”。
到此整个建⽴连接的过程已经结束,接下来就是双⽅你⼀句我⼀句甚⾄同时交流传递信息的过程了。
四次挥⼿断开连接阐述:第⼀次挥⼿:双⽅交流的差不多了,此时客户端也已经结尾了,接下来要断开通信连接,所以告诉服务端“我说完了(FIN)”,此时⾃⾝形成等待结束连接的状态。
第⼆次挥⼿:服务端知道客户端已经没话说了,服务端此时还有两句⼼⾥话要给客户端说,“我知道你说完了(ACK),我再给你说两句,&*……%¥”。
第三次挥⼿:此时客户端洗⽿恭听继续处于等待结束的状态,服务器端也说完了,⾃⾝此时处于等待关闭连接的状态,并对告诉客户端,“我说完了,咱们断了吧(FIN)”。
第四次挥⼿:客户端收知道服务端也说完了,也要告诉服务端⼀声(ACK),因为连接和断开要双⽅都按下关闭操作才能断开,客户端同时⼜为⾃⼰定义⼀个定时器,因为不知道刚才说的这句话能不能准确到达服务端(⽹络不稳定或者其他因素引起的⽹络原因),默认时间定为两个通信的最⼤时间之和,超出这个时间就默认服务器端已经接收到了⾃⼰的确认信息,此时客户端就关闭⾃⾝连接,服务器端⼀旦接收到客户端发来的确定通知就⽴刻关闭服务器端的连接。
到此为⽌双⽅整个通信过程就此终结。
这⾥要声明⼀下:断开链接不⼀定就是客户端,谁都可以先发起断开指令,另外客户端和服务端是没有固定标准的,谁先发起请求谁就是客户端。
TCP协议的三次握手四次挥手简单理解
![TCP协议的三次握手四次挥手简单理解](https://img.taocdn.com/s3/m/bf23ca75effdc8d376eeaeaad1f34693daef1017.png)
TCP协议的三次握手四次挥手简单理解三次握手:1.第一次握手:客户端向服务器发送一个连接请求报文段,请求建立连接。
该报文段包含源IP地址和端口号以及目的IP地址和端口号。
2.第二次握手:服务器收到客户端的连接请求报文后,确认收到请求,并发送一个连接接受报文段给客户端。
该报文段中包含源IP地址和端口号以及目的IP地址和端口号。
3.第三次握手:客户端收到服务器的连接接受报文后,向服务器发送一个确认报文段,确认建立连接。
该报文段包含源IP地址和端口号以及目的IP地址和端口号。
四次挥手:1.第一次挥手:当客户端想要关闭连接时,发送一个连接释放报文段给服务器。
该报文段包含源IP地址和端口号以及目的IP地址和端口号。
2.第二次挥手:服务器收到客户端的连接释放报文后,发送一个确认报文段给客户端,表示已收到释放请求。
该报文段中包含源IP地址和端口号以及目的IP地址和端口号。
3.第三次挥手:服务器发送完数据包后,发送一个连接释放报文段给客户端。
该报文段包含源IP地址和端口号以及目的IP地址和端口号。
4.第四次挥手:客户端收到服务器的连接释放报文后,发送一个确认报文段给服务器,表示已收到释放请求并确认释放连接。
该报文段中包含源IP地址和端口号以及目的IP地址和端口号。
三次握手的目的是保证客户端和服务器能够正确建立连接,防止无效的连接请求。
如果只有两次握手,存在一种情况,即客户端发送的连接请求报文段在网络中滞留了一段时间,导致服务器接收到请求后建立了连接,但客户端并没有接收到服务器的确认,误以为服务器没有收到请求,以为连接建立失败,重新发起连接请求。
而如果有了第三次握手,就可以避免这种情况,确保连续的连接请求可以正确建立连接。
四次挥手的过程是为了确保连接的双方都能正确关闭连接。
如果只有三次挥手,存在一种情况,即客户端发送的连接释放报文段在网络中滞留了一段时间,导致服务器没有收到释放请求,保持连接并继续发送数据。
而如果有了第四次挥手,就可以避免这种情况,确保连接的双方都能正确关闭连接。
TCP三次握手四次挥手过程及原理
![TCP三次握手四次挥手过程及原理](https://img.taocdn.com/s3/m/da6680230a1c59eef8c75fbfc77da26925c596dd.png)
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报文段后,服务端还需要等待一段时间,将所有的数据都发送给客户端。
TCP3次握手连接协议和4次握手断开连接协议
![TCP3次握手连接协议和4次握手断开连接协议](https://img.taocdn.com/s3/m/46477c8602d276a200292e7e.png)
TCP协议三次握手连接协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图1所示。
(SYN 包表示标志位syn=1,ACK包表示标志位ack=1,SYN+ACK包表示标志位syn=1,ack=1)(1) 第一次握手:建立连接时,客户端A发送SYN包(SEQ_NUMBER=j)到服务器B,并进入SYN_SEND 状态,等待服务器B确认。
(2) 第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK_NUMBER=j+1),同时自己也发送一个SYN包(SEQ_NUMBER=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
(3) 第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK_NUMBER=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
TCP协议四次握手断开连接协议由于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)。
TCP采用四次挥手关闭连接如图2所示。
PS:另一个关闭连接的图特别的TIME_WAIT状态:从以上TCP连接关闭的状态转换图可以看出,主动关闭的一方在发送完对对方FIN报文的确认(ACK)报文后,会进入TIME_WAIT状态。
三次握手和四次挥手的原理
![三次握手和四次挥手的原理](https://img.taocdn.com/s3/m/069a1f80c67da26925c52cc58bd63186bceb92cc.png)
三次握手和四次挥手的原理三次握手是指在建立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协议的三次握手四次挥手简单理解](https://img.taocdn.com/s3/m/2a09ef64ba1aa8114531d940.png)
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三次握手和四次挥手(超强总结)](https://img.taocdn.com/s3/m/63d9c72abd64783e09122b7b.png)
SYN=1seq=xSYN=1,客户端C发出连接请求~报文段。
并向客户端传送data,客户端传送data的第一个字节的序号是x(序号为随机值)SYN=1ACK=1ack=x+1seq=y服务器S收到连接请求~报文段后,如同意~确认ACK,确认号为ack=x+1(表示服务器S 期望接收到的发自客户端C~下一个报文段的数据的一个字节的序号)ACK=1ack=y+1seq=x+1客户端C收到服务器S的报文段后,确认ACK,确认号为ack=y+1客户的TCP通知上层应用进程,连接已经建立。
服务器的TCP收到主机客户的确认后,也通知其上层应用进程:TCP连接已经建立FIN=1seq=uFIN=1表示客户端不再有data发送,ACK=1ack=u+1 (确认号)seq=v服务器S收到客户端C的终止请求,确认(客户端终止发送)【从客户端C到服务器S的连接就释放了】TCP处于半关闭状态。
但此时服务器S若发送数据,客户端C仍要接收FIN=1seq=w(ACK=1)(ack=u+1)FIN=1表示服务器S不再向客户端C发送data,其应用进程就通知TCP释放连接ACK=1ack=w+1 (确认号)seq=u+1 (自己的序号)客户端C收到服务器S的终止请求(连接释放报文段)后,发出确认。
随之服务器S~TCP关闭,而客户端C必须等待2MSL的时间,然后关闭。
SYN=1seq=x SYN=1ACK=1ack=x+1seq=yACK=1ack=y+1seq=x+1 TCP四次挥手FIN=1seq=u ACK=1ack=u+1seq=vFIN=1seq=w(ACK=1)(ack=u+1)ACK=1ack=w+1。
tcp三次握手与四次挥手
![tcp三次握手与四次挥手](https://img.taocdn.com/s3/m/4ff251827fd5360cbb1adb42.png)
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三次握手与四次挥手](https://img.taocdn.com/s3/m/a8ecc3971711cc7930b716ed.png)
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三次握手和四次挥手的全过程](https://img.taocdn.com/s3/m/1799d838657d27284b73f242336c1eb91a373374.png)
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协议的三次握手连接和四次握手连接](https://img.taocdn.com/s3/m/b9e19088b9d528ea81c779b3.png)
TCP协议的三次握手连接和四次握手连接姓名:田怡学号:1075513014161、TCP建立连接的三次握手过程TCP会话通过三次握手来初始化。
三次握手的目标是使数据段的发送和接收同步。
同时也向其他主机表明其一次可接收的数据量(窗口大小),并建立逻辑连接。
这三次握手的过程可以简述如下:●源主机发送一个同步标志位(SYN)置1的TCP数据段。
此段中同时标明初始序号(Initial Sequence Number,ISN)。
ISN是一个随时间变化的随机值。
●目标主机发回确认数据段,此段中的同步标志位(SYN)同样被置1,且确认标志位(ACK)也置1,同时在确认序号字段表明目标主机期待收到源主机下一个数据段的序号(即表明前一个数据段已收到并且没有错误)。
此外,此段中还包含目标主机的段初始序号。
●源主机再回送一个数据段,同样带有递增的发送序号和确认序号。
至此为止,TCP会话的三次握手完成。
2、TCP释放连接的四次握手过程tcp是一个全双工通讯,可以由任何一方提出关闭连接。
本次由服务器提出关闭连接请求。
TCP连接的释放需要进行四次握手,步骤是:第一次握手:由服务器提出关闭连接请求。
服务器将fin(fin置1时表示发端完成发送任务,用来释放连接,表明发送方已经没有数据发送了)置为1,fin=1,seq=131 ack=45 win=5840第二次握手:客户端tcp协议层接收到服务器关闭连接的请求报文段后,就会发送一个确认报文ack,表示收到了关闭请求,并已经终止了数据传输。
但如果ack确认发送后服务器仍然有数据传输的话,客户端仍然可以接受数据,只是服务器不可以在接受数据了。
此状态称半关闭状态(Half-colse)。
seq=45 ack=132第三次握手:客户端确认服务器没有数据传输,将fin置1,要求关闭连接。
seq=45 ack=132 第四次握手:服务器接收到关闭请求,发送确认请求ack,客户端收到确认后,整个连接完全关闭。
TCP三次握手与四次挥手深入探究(大图解)
![TCP三次握手与四次挥手深入探究(大图解)](https://img.taocdn.com/s3/m/849d6a19905f804d2b160b4e767f5acfa1c783c1.png)
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个字节。
三次握手四次挥手
![三次握手四次挥手](https://img.taocdn.com/s3/m/9e18e55d69eae009581bec2a.png)
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三次握手、四次挥手过程及原理](https://img.taocdn.com/s3/m/a963526849d7c1c708a1284ac850ad02de800747.png)
⼀⽂彻底搞懂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三次握手与四次挥手](https://img.taocdn.com/s3/m/e4206b8583d049649b665834.png)
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。
为什么需要三次握手-四次挥手
![为什么需要三次握手-四次挥手](https://img.taocdn.com/s3/m/48646d4ba98271fe910ef997.png)
为什么需要三次握手?
首先,我们要知道TCP是全双工的,即客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息。
而半双工的意思是A可以给B发,B也可以给A发,但是A在给B发的时候,B不能给A发,即不同时,为半双工。
单工为只能A给B发,B不能给A发;或者是只能B给A发,不能A给B发。
我们假设A和B是通信的双方。
我理解的握手实际上就是通信,发一次信息就是进行一次握手。
第一次握手:A给B打电话说,你可以听到我说话吗?
第二次握手:B收到了A的信息,然后对A说:我可以听得到你说话啊,你能听得到我说话吗?
第三次握手:A收到了B的信息,然后说可以的,我要给你发信息啦!
在三次握手之后,A和B都能确定这么一件事:我说的话,你能听到;你说的话,我也能听到。
这样,就可以开始正常通信了。
注意:HTTP是基于TCP协议的,所以每次都是客户端发送请求,服务器应答,但是TCP还可以给其他应用层提供服务,即可能A、B 在建立链接之后,谁都可能先开始通信。
如果两次,那么B无法确定B的信息A是否能收到,所以如果B 先说话,可能后面的A都收不到,会出现问题。
如果四次,那么就造成了浪费,因为在三次结束之后,就已经可以保证A可以给B发信息,A可以收到B的信息;B可以给A发信
息,B可以收到A的信息。
TCP为什么四次挥手
所谓四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。