tcp四次挥手

TCP三次握手四次挥手

戏子无情 提交于 2019-12-01 18:44:41
这个网上转载的例子不错: 三次握手: A:“喂,你听得到吗?”A->SYN_SEND B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED A:“我能听到你,今天balabala……”B->ESTABLISHED 四次挥手: A:“喂,我不说了。”A->FIN_WAIT1 B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2 B:”好了,说完了,我也不说了。”B->LAST_ACK A:”我知道了。”A->TIME_WAIT | B->CLOSED A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED TCP 握手协议 在 TCP/IP协议 中, TCP协议 提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers) 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入 SYN_RECV 状态; 第三次握手:客户端收到服务器的SYN+ACK包

简述TCP的三次握手过程

牧云@^-^@ 提交于 2019-12-01 18:44:28
TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers) 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手. 握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence Numbers) 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕

TCP三次握手详解及释放连接过程(“三次握手”和“四次挥手”)

拥有回忆 提交于 2019-12-01 18:44:12
TCP三次握手详解及释放连接过程(“三次握手”和“四次挥手”) TCP在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。 TCP的传输连接分为3个阶段,连接建立(三次握手),数据传送和连接释放(四次挥手)。 TCP传输连接的管理就是使传输连接建立和释放都能正常的进行。 两个序号和三个标志位: (1)序号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。 (2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。 (3)标志位:共6个,即URG、ACK、PSH、RST、SYN、FIN等,具体含义如下: (A)URG:紧急指针(urgent pointer)有效。 (B)ACK:确认序号有效。 (C)PSH:接收方应该尽快将这个报文交给应用层。 (D)RST:重置连接。 (E)SYN:发起一个新连接。 (F)FIN:释放一个连接。 需要注意的是: (A)不要将确认序号ack与标志位中的ACK搞混了。 (B)确认方ack=发起方req+1,两端配对。 TCP三次握手(重点): 最开始的时候,客户端和服务器都是处于关闭(CLOSED)状态,主动打开连接的是客户端,被动打开连接的是服务器。 准备工作: 服务器必须准备好接受外来的连接

简述TCP三次握手和四次挥手

∥☆過路亽.° 提交于 2019-12-01 18:43:50
TCP是传输层的主要协议之一,其特点是面向连接的、可靠的进程对接进程的协议。 TCP报文首部格式 源端口号 :发送方进程端口号。 目标端口号 :目的端口对应进程。 序号(Sep) :为每个字节进行编号,由操作系统随机产生首个序号(0~65535),以该序号为原点,下一个数据包的序号顺序产生,以便于接收端正确重组。该序号独立产生,一个链接里A B双方的序号可以相同。 确认号(Ack) :对发送端的回应消息,X+1,X=对方序号。 首部长度 : TCP报头的大小,默认20字节。 保留 :没有实际用处。 URG :紧急指针有效位,此位为1时紧急指针生效、 0则不生效。 ACK :ACK=1时,确认号生效, ACK=0时,确认号不生效。 PSH :标志位为1时,通知尽快将数据送至应用层。 RST :当RST为1时,通知重新建立TCP链接。 SYN :同步序号位,TCP需要建立链接时,为1。 FIN :FIN=1时,断开链接 窗口大小 :大小可变,TCP的流控机制,可以根据网络畅通情况改变窗口大小。 校验和 :差错控制,发送端通过算法(计算TCP首部、数据、其他填充字节)算出一个值,接收到数据包后接收端也算出一个值,值一样说明数据基本正确,值不同则丢弃该数据包 紧急指针 :当URP=1时生效 TCP三次握手 第一次握手 :PC1向PC2发送一个数据包 SYN为1(请求链接),其余全为0

TCP三次握手、四次挥手的理解及面试题(图解过程)

早过忘川 提交于 2019-12-01 18:43:34
TCP 和 UDP是网络协议的传输层上的两种不同的协议。TCP的特点是 面向连接 的、可靠的字节流服务。客户端需要和服务器之间建立一个TCP连接,之后才能传输数据。数据到达之前对方就一直在等待,除非对方直接关闭连接,数据有序,先发先到。UDP是一种 无连接 、不可靠的数据发送协议。发送方根据对方的ip地址发送数据包,但是不保证接收发接包的质量,数据无序还容易丢包。虽然UDP协议不稳定但是在即时通讯(QQ聊天、在线视频、网络语音电话)的场景下,可以允许偶尔的断续,但是这种协议速度快。 TCP、UDP的报文结构 详细引用: https://blog.csdn.net/baidu_32045201/article/details/78021536 UDP的报文结构 TCP的报文结构 TCP协议三次握手、四次挥手、超时重传 通过抓包观察TCP三次握手具体报文: https://blog.csdn.net/qq_39331713/article/details/81705890 三次握手是指建立TCP连接协议时,需要在客户端和服务器之间发送三个包,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。 第一次握手 :客户端发送第一个包,其中SYN标志位为1, ACK=0,发送顺序号sequence=X(随机int)。客户端进入SYN发送状态,等待服务器确认。

TCP三次握手和四次挥手详细过程

瘦欲@ 提交于 2019-12-01 18:42:52
这篇文章对TCP的三次握手和四次挥手详细过程进行总结。 1. TCP连接的建立—三次握手: 先对相关的符号作一下说明: 确认号字段(ack):占四个字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。若ack = N,则表明到序号N-1为止的所有数据都已正确收到。 确认位(ACK):只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。 同步位(SYN):同步 SYN=1 表示这是一个连接请求或连接接收报文。当SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1。即,SYN=1就表示这是一个连接请求或连接接收报文。 TCP的连接的建立采用客户/服务器的方式。主动发起连接建立的应用进程叫做客户机,而被动等待连接建立的应用进程叫做服务器。连接的建立分为3步,如下图所示。 图1 TCP三次握手 第一步: 客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含 应用层数据, 其首部中的SYN标志位被置为1。另外,客户机会随机选择一个起始序列号 seq = x(连接请求报文不携带数据,但要消耗掉一个序号)。 第二步: 服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并未该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值为x

TCP三次握手及四次挥手详解及常见面试题

感情迁移 提交于 2019-12-01 18:42:18
#TCP的报头: 源端口号:表示发送端端口号,字段长为16位。 目标端口号:表示接收端口号,字段长为16位。 序列号:表示发送数据的位置,字段长为32位。每发送一次数据,就累加一次该数据字节数的大小。 注意:序列号不会从0或1开始,而是在建立连接时由计算机生成的一个随机数作为其初始值,通过SYN包发送给接收端主机。然后再将每转发过去的字节数累加到初始值上表示数据的位置。 确认应答号:表示下一次应该收到的数据的序列号,字段长为32字节。发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。 序号的优点: (1)保证报文按序到达。 (2)保证可靠性。 (3)保证效率。 (4)精准的报告哪些报文已经收到,哪些需要重传。 首部长度:该字段长度为4位,单位为4字节(32位)。TCP首部长度不包括选项的话,是20个字节,20/4=5,5的二进制序列:0101,报头长度也叫数据偏移,所以该字段可以设置为5,选项字段最大的是40字节,所以,TCP首部长度为最大为20+40=60字节,该字段可以设置的最大长度为60/4=15。 保留:该字段主要是为了以后扩展时使用,其长度为4位。一般设置为0,即使收到的包在该字段不为0,此包也不会丢弃。 控制位:字段长为6,每一位从左到右分别为:URG、ACK、PSH、RST、SYN、FIN。当对应的值为1,表示有具体含义。 字段|含义 —|:—

TCP三次握手和四次挥手的原因

谁都会走 提交于 2019-12-01 18:40:11
为什么要进行三次握手呢(两次确认)? 建立三次握手主要是因为A发送了再一次的确认,那么A为什么会再确认一次呢,主要是为了防止已失效的连接请求报文段又突然传送给B,从而产生了错误。 所谓“已失效的连接请求报文”是这样产生的,正常情况下,A发出连接请求,但是因为连接报文请求丢失而未收到确认,于是A再重传一次连接请求,后来收到了请求,并收到了确认,建立了连接,数据传输完毕后,就释放链接,A共发送了两次连接请求报文段,其中第一个丢失,第二个到达了B,没有“已失效的连接请求报文段”,但是还有异常情况下,A发送的请求报文连接段并没有丢失,而是在某个网络节点滞留较长时间,以致延误到请求释放后的某个时间到达B,本来是一个早已失效的报文段,但是B收到了此失效连接请求报文段后,就误以为A又重新发送的连接请求报文段,并发送确认报文段给A,同意建立连接,如果没有三次握手,那么B发送确认后,连接就建立了,而此时A没有发送建立连接的请求报文段,于是不理会B的确认,也不会给B发送数据,而B却一直等待A发送数据,因此B的许多资源就浪费了,采用三次握手的方式就可以防止这种事情发生,例如刚刚,A不理会B,就不会给B发送确认,B收不到A的确认,就知道A不要求建立连接,就不会白白浪费资源。 为什么要进行四次挥手呢? 由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后

TCP三次握手四次挥手过程详解

一曲冷凌霜 提交于 2019-12-01 18:38:44
TCP头部: 其中 ACK SYN 序号 这三个部分在以下会用到,它们的介绍也在下面。 暂时需要的信息有: ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1 SYN (SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。 FIN (finis)即完,终结的意思, 用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。 三次握手的过程: 首先由Client发出请求连接即 SYN=1 ACK=0 (请看头字段的介绍), TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是 seq=x 然后 Server 进行回复确认,即 SYN=1 ACK=1 seq=y, ack=x+1, 再然后 Client 再进行一次确认,但不用SYN 了,这时即为 ACK=1, seq=x+1, ack=y+1. 然后连接建立,为什么要进行三次握手呢(两次确认)。 下面是释放连接的过程: 当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),其中 FIN 设置为1,

为什么TCP需要三次握手和四次挥手

。_饼干妹妹 提交于 2019-12-01 18:38:28
因为HTTP是一个基于TCP的协议,而TCP是一种可靠的传输层协议. 建立TCP连接时会发生:三次握手(three-way handshake) firefox > nginx [SYN] 在么 nginx > firefox [SYN, ACK] 在 firefox > nginx [ACK] 知道了 关闭TCP连接时会发生:四次挥手(four-way handshake) firefox > nginx [FIN] 我要关闭连接了 nginx > firefox [ACK] 知道了,等我发完包先 nginx > firefox [FIN] 我也关闭连接了 firefox > nginx [ACK] 好的,知道了 几个报文的标识的解释: SYN: synchronization(同步) ACK: acknowledgement(确认:告知已收到) FIN: finish(结束) 在HTTP/1.1中,keep-alive能够复用TCP连接,减少TCP三次握手的次数,从而提升性能. 结合到PHP编程中,拿Swoole引擎内置的异步HTTP服务器来说说: 调用 $res->end() 将结束HTTP请求,但不会关闭HTTP连接,因为Swoole支持keep-alive. 调用 $serv->close($res->fd) 将关闭HTTP连接.