TCP链接的三次握手与四次断开

一直总觉得三次握手和四次断开,之前老师讲的有问题,经过自己再次琢磨,发现是的,老师讲的没毛病,这次也把自己的理解总结一下,让对这个知识模糊的小伙伴再换种思路去理解

首先看一下TCP三次握手发生了哪些:

TCP三次握手

这是第一次用画图工具画图,有点low,细节处理的不好见谅

这是第一次设计三次握手的过程,实际上发生了四件事,其次你要清楚TCP链接建立的标准是双向的,就像谈恋爱表白一样,你必须俩人相互喜欢才能表白成功啊

白话版:
TCP 链接建立就像谈恋爱一样,互相表白才是表白成功
背景条件:某专业 某低富帅 和 某黑富美 表白过程
1,低富帅向自己爱慕依旧的黑富美表白说:俺喜欢你
2,黑富美听到低富帅的告白,回复:恩
-->到这一阶段,看到这情况也就是说这哥们已经凉了,但是作为上帝的我肯定要他表白成功啊
3,黑富美回答之后,又思考了一下毕竟门当户对,于是随即也向低富帅表白说:俺喜欢你
4,低富帅听到黑富美的告白,激动地回复:恩
-->到此,俩人恩爱的在了一起,就像TCP一样,通讯链接建立成功

但是有一点不好的是TCP三次握手原型要建立四次链接,考虑到Server在第2步和第3步都要向Client分别建立一次请求,那么显然这是浪费流量,后来改良版后的就将三次握手改成了现在的样子,如下:

经过这样的一次裁剪和优化顺利的将四次握手变成了现在的三次握手

TCP四次断开

什么是四次断开呢,那么既然能告白在一起,也能性格不合而分手,而四次断开就是发生在Client和Server数据传输完成时所发生的

白话版:
背景条件:某专业 某渣男 和 某白富美 因xxx事件,分手过程
1,有一天,渣男的主动向白富美说:咱俩分手吧
2,白富美听到渣男的请求,回复:恩,我知道了,你等下吧,我下午吧行李收拾下搬回学校
3,下午白富美搬回学校后,给渣男说,我甩了你,咱俩分手吧
4,渣男收到请求后,恋爱结束

当然可能有吃瓜群众坐不住了,为什么三次握手能压缩成三次,四次断开为什么不能???
四次断开由于服务器传输完毕后并不代表客户端也同时接收完毕,所以emmmm..

完整的TCP通讯和过程状态

对于tcp的通讯过程还有一个重要的点就是通讯状态,每次tcp的交流在系统中都是可以监控的,看看状态有哪些吧

我们来捋一下每一个状态:
三次握手阶段
第一次握手:建立连接时,客户端发送syn包到服务器,并进入SYN_SENT状态,等待服务器确认
第二次握手:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RCVD状态;(SYN_RCVD,原名为syn_received有的博客是写SYN_RCVD也有的是RECV,但我理解的是表达的都是一个意思)
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
开始数据传输
...
四次断开阶段

第一次握手: 客户端向服务端发起断开请求,发送FIN,发送seq编号,并回复上次正常数据传输的ack确认,客户端进入FIN_WAIT_1
第二次握手: 服务端收到后,首先回复ack一个确认,进入CLOSE_WAIT状态,而客户端进入FIN_WAIT_2阶段
第三次握手: 服务端向客户端发送FIN断开请求,和seq编号,进入LAST_ACK状态,客户端进入TIME_WAIT状态
第四次握手: 客户端收到FIN请求后,回复ack,则通讯连接断开

其中两个梗

SYN_RCVD:如果你的服务器出现了大量的SYN_RCVD,你可能要留意了可能遭遇了SYN泛洪×××

TCP SYN泛洪发生在OSI第四层,这种方式利用TCP协议的特性,就是三次握手。×××者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该×××者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给×××者。这样更加会浪费服务器的资源。×××者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。*

TIME_WAIT:如果你的服务器出现大量TIME_WAIT,那么请格外留意你的服务器负载
TIME_WAY是TCP链接的最后一步,大规模的出现说明你的访问量很大,一定要格外的留意资源的消耗,已做好随时增加设备或者调整的准备

baklog什么梗

表示内核为相应套接字排队的最大连接个数。SYN-ACK重传次数服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。

原文地址:http://blog.51cto.com/swiki/2166063

时间: 2024-10-09 21:52:55

TCP链接的三次握手与四次断开的相关文章

十五大原理之零三--TCP/IP的三次握手和四次断开原理

重要的标志位含义: ACK:表示确认.只有当ACK标志位为1时,TCP报文的确认字段才有效. SYN:表示同步,在连接建立时用来同步序列号.当SYN=1而ACK=0时,表明这是一个连接请求报文.若对方同意建立连接时,则在响应报文中,应使SYN=1,ACK=1.因此,同步比特SYN置为1,就表明这是一个连接请求报文或连接接受响应报文. FIN:用于释放一个连接.当FIN位为1时,表明此报文段的发送端数据已发送完毕,并要求释放连接. 一.TCP/IP的三次握手 第一次握手:首先发送方主机向接收方主机

TCP/IP协议三次握手和四次挥手大白话解说

TCP/IP协议三次握手和四次挥手大白话解说 前言 昨天晚上被一位师傅问到了TCP/IP的工作机制,心里很清楚三次握手,然而对于四次挥手却忘了,这是大学习里学过的,奋而翻阅书籍和网络对之前所学的做一个温顾,算是夯实自我吧. TCP(Transmission Control Protocol)网络传输控制协议,是一种面向连接的.可靠的.基于字节流的传输层通信协议,数据传输前建立连接的工作要经过三次握手,数据传输后断开连接的工作要经过四次挥手. 工作过程 TCP标志位: TCP共有6个标志位,分别是

详解TCP连接的“三次握手”与“四次挥手”(下)

上文链接: 详解TCP连接的"三次握手"与"四次挥手"(上) 四.TCP的四次挥手(Four-Way Wavehand) 0.前言 对于"三次握手"我们耳熟能详,因为其相对的简单.但是,我们却不常听见"四次挥手",就算听过也未必能详细地说明白它的具体过程.下面就为大家详尽,直观,完整地介绍"四次挥手"的过程. 1."四次挥手"的详解 所谓的四次挥手即TCP连接的释放(解除).连接的释放必

TCP/IP 三次握手,四次断开

TCP/IP 三次握手,四次断开 一.TCP报文格式                     TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷 本. 下面是TCP报文格式图: 图1-1 TCP报文格式 上图中有几个字段需要重点介绍下:1.序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.2.确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效(Ack=Seq+1).3.标志位:共6个,即URG.ACK.PSH.R

TCP协议的三次握手与四次挥手过程图解

建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了. 那如何断开连接呢?简单的过程如下: [注意]中断连接端可以是Client端,也可以是Server端. 假设Client端发起中断连接请求,也就是发送FIN报文.Server端接到FIN报文后,

TCP/IP协议三次握手与四次握手流程解析

原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图 上图中有几个字段需要重点介绍下:   (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.   (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.   (3)标志位:共6个,即URG.ACK.PSH.RST

理解TCP中的三次握手和四次分手

1.前言 之前上过计算机网络这门课,由于当时初次接触计算机网络,其中的有些概念无法深入理解,只停留在表面.这次借着学网络编程的机会,也把TCP的三次握手和四次分手重新梳理了一遍,有了不同的理解.借此,想做一个总结. 2.TCP协议 在学习TCP三次握手和四次分手之前,首先得对TCP协议有一个大概的了解.TCP全称是传输控制协议,其是面向连接的,可靠的,基于字节流的传输层通信协议.相比与UDP(用户数据报协议)而言,具有以下几个特点: TCP协议是面向连接的.基于TCP协议,客户端和服务端要想传输

TCP/IP协议 三次握手与四次挥手

一.TCP报文格式 TCP/IP协议的详细信息参看<TCP/IP协议详解>三卷本.下面是TCP报文格式图: 图1 TCP报文格式 上图中有几个字段需要重点介绍下:        (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记.        (2)确认序号:Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1.        (3)标志位:共6个,即URG.ACK.PSH.RST.SYN.FIN等,具体含

TCP/IP的三次握手和四次放手

一开始个人对于三次握手和四次挥手这个东西还是有时候会忘记,可能理解的不是非常深刻,所以今天就自己动手来记录一下这个知识点,方便以后查看.总结完之后发现总结的还是可以的哈哈. 三次握手建立连接 第一次:客户端和服务器端一开始都是关闭的.①:当想建立连接的时候,客户端首先主动打开,然后服务器端被动打开.②:服务器首先得先创建好需要的pcb传输控制块(参照socket编程中的,先得建立一些服务器所需要的信息,包括套接字之类的,创建套接字,绑定套接字,),之后进入listen状态,等待客户端来连接自己.