tcp四次挥手

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

ⅰ亾dé卋堺 提交于 2019-11-26 00:28:35
文章目录 前言 三次握手 四次挥手 总结 前言 关于TCP的连接过程,很多从事程序开发的小伙伴应该都听过三次握手,可这三次握手的细节还是有很多人不太清楚的,特别是有些参数记不清楚,我也经常弄错,所以我根据自己的理解画了两张图,将TCP连接和断开的流程简单记录一下,以方便后续查找复习之用。 三次握手 初始状态:客户端A和服务器B均处于 CLOSED 状态,然后服务器B创建socket,调用监听接口使得服务器处于 LISTEN 状态,等待客户端连接。(后续内容用A,B简称代替) A首先向B发起连接,这时TCP头部中的SYN标识位值为1,然后选定一个初始序号 seq=x (一般是随机的),消息发送后,A进入 SYN_SENT 状态, SYN=1 的报文段不能携带数据,但要消耗一个序号。 B收到A的连接请求后,同意建立连接,向A发送确认数据,这时TCP头部中的SYN和ACK标识位值均为1,确认序号为 ack=x+1 ,然后选定自己的初始序号 seq=y (一般是随机的),确认消息发送后,B进入 SYN_RCVD 状态,与连接消息一样,这条消息也不能携带数据,同时消耗一个序号。 A收到B的确认消息后,需要给B回复确认数据,这时TCP头部中的ACK标识位值为1,确认序号是 ack=y+1 ,自己的序号在连接请求的序号上加1,也就是 seq=x+1 ,此时A进入 ESTABLISHED 状态

TCP的三次握手和四次挥手

百般思念 提交于 2019-11-26 00:28:13
相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需要控制这个过程.但是对于理解TCP底层运作机制,相当有帮助. 而且对于有网络协议工程师之类笔试,几乎是必考的内容.企业对这个问题热情之高,出乎我的意料:-)。有时上午面试前强调这个问题,并重复讲一次,下午几乎每一个人都被问到这个问题。 因此在这里详细解释一下这两个过程。 TCP三次握手 所谓三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。 三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。 第一次握手: 客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。 第二次握手: 服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。 第三次握手. 客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方

TCP三次握手和四次挥手的全过程

六眼飞鱼酱① 提交于 2019-11-26 00:27:55
三次握手:     第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;      第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;      第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。   ps:各个标志位,见(https://blog.csdn.net/qq_30757161/article/details/100103703)      握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。 四次挥手   由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。    1)客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部

TCP 三次握手 和 四次挥手

喜夏-厌秋 提交于 2019-11-26 00:27:08
概述 我们都知道 TCP 是 可靠的数据传输协议,UDP是不可靠传输,那么TCP它是怎么保证可靠传输的呢?那我们就不得不提 TCP 的三次握手和四次挥手。 三次握手 下图为三次握手的流程图 下面通过我们 wireshark 抓包工具来分析三次握手 第一次握手 建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;(x 是随机生成的一个 int 数值)然后,客户端进入SYN_SEND状态,等待服务器的确认; 第二次握手 服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为 y (y 是随机生存的一个 int 数值);服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态; 第三次握手 客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。 四次挥手 第一次挥手: Client (可以使客户端

TCP协议的三次握手和四次挥手

前提是你 提交于 2019-11-26 00:26:56
三次握手 1. 第一次握手:建立连接。客户端发送连接请求报文段,将SYN设置为1,Seq为x,然后,客户端进入 SYN_SEND 状态,等待服务器的确认 2. 第二次握手:服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置 Ack 为 x+1(seq+1);同时,自己还要发送 SYN 请求信息, 将SYN设置为1,Seq设置为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段中),一并发送给客户端,此时服务器进入SYN_RCVD状态。 3. 第三次握手:客户端收到服务端的SYN+ACK报文段。然后将Ack设置为y+1,向服务器发送Ack报文段,这个报文段发送完毕之后,客户端和服务端都进入ESTABLISHED状态,完成TCP三次握手。 图解三次握手 为什么要三次握手? 三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送和接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收机能正常。 第一次握手:Client什么都不能确认,Server确认了对方发送正常和自己的接收正常。 第二次握手:Client确认了,自己发送、接收正常,对方发送、接收正常;Server确认了,自己接收正常,对方发送正常,不能确认自己发送正常。 第三次握手:Client确认了,自己发送、接收正常,对方发送、接收正常;Server确认了自己发送、接收正常

TCP三次握手和四次挥手

痞子三分冷 提交于 2019-11-26 00:25:58
TCP三次握手和四次挥手 文章目录 TCP三次握手和四次挥手 @[toc] 一、TCP三次握手 二、TCP数据的传输过程 三、TCP的四次挥手 四、SYN(洪水)攻击 五、TCP和UDP的区别 TCP有6种标示:SYN(建立联机) ACK(确认) PSH(传送) FIN(结束) RST(重置) URG(紧急) 一、TCP三次握手 第一次握手 ​ 客户端向服务器发出连接请求报文,这时报文首部中的同部位SYN=1,同时随机生成初始序列号 seq=x,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状 态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。这个三次握手中的开始。表示客户端想要和服务端建立连接。 第二次握手 ​ TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己随机初始化一个序列号 seq=y,此 时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。这个报文带有SYN(建立连接)和ACK(确认)标志,询问客户端 是否准备好。 第三次握手 ​ TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,此时,TCP连接建立,客户端进入ESTABLISHED

TCP的三次握手和四次挥手详解

≡放荡痞女 提交于 2019-11-26 00:25:46
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接,与之相反的,采用四次挥手来断开连接: TCP标志位有6种标示,即:SYN(建立联机) 、 ACK(确认) 、 PSH(传送) 、 FIN(f结束) 、 RST(重置) 、 URG(紧急) 、 Sequence number(顺序号码) 、 Acknowledge number(确认号码)。 三次握手 为了准确无误的将数据发送到指定IP处,TCP协议采用了 三次握手 的策略,如下步骤所示: 1、 客户端采用TCP协议将带有SYN标志的数据包发送给服务器,等待服务器的确认。 2、 服务器端在收到SYN的数据包后,必须确认SYN,即自己发送的ACK标志,同时,自己也将会向客户端发送一个SYN标志。 3、 客户端在接收到服务器短的SYN+ACK包后,自己会向服务器发送ACK包,完成三次握手。那么客户端和服务器正式建立了连接,开始传输数据。 三次握手的图如下所示: 四次挥手 四次挥手 是用来断开服务器和客户端之间的通信的,之所以要 断开连接,是因为TCP/IP 协议是要占用端口号的,而计算机的端口却是有限的,不进行断开的话,势必会造成计算机资源的浪费。 1、 在整个通信的过程中,谁先发起请求,谁就是客户端。 当客户端的数据传输到尾部时,客户端向服务器发送带有FIN标志的数据包,使其明白自己准备断开通信了。

简述TCP的三次握手和四次挥手过程

▼魔方 西西 提交于 2019-11-26 00:25:31
①TCP是一种精致的,可靠的字节流协议。 ②在TCP编程中,三路握手一般由客户端(Client)调用Connent函数发起。 ③TCP3次握手后数据收发通道即打开(即建立了连接)。 ④简述 三路握手 过程: 图 . TCP三次握手 (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。 (3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。 ⑤SYN攻击: 在三次握手过程中,Server发送SYN-ACK之后,收到Client的ACK之前的TCP连接称为半连接(half-open connect)

TCP三次握手详解和四次挥手

白昼怎懂夜的黑 提交于 2019-11-25 20:41:10
TCP的三次握手四次挥手时面试时面试官经常问道的问题 在互联网中,如何使不同网段的主机相互通信,需要用到TCP协议; TCP,提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接。TCP是一种可靠的的运输服务,采用三次握手建立一个连接。 首先介绍下TCP的报文格式 序号 发送端为每个字节编号,方便接收端正确重组。 确认号 用于确认发送端的信息。 窗口大小 用于说明本地可接收数据段的数目。 标志位 URG 紧急指针位 1 开启 0 关闭。 不经过缓存直接提交给对方。 PSH 快速接受传递给应用层 1 开启 0 关闭 需要经过缓存,等一批报文段到齐,直接发送应用层。 SYN 同步序号位 建立连接的请求标记 FIN 断开连接的请求标记 ACK 确认序号位 RST 重新连接 三次握手 第一次握手 客户机想和服务器建立连接,就向服务器发送了一个SYN到服务器,等待服务器确认 第二次握手 TCP服务器收到请求报文后,先确认SYN包,如果同意连接,则发出SYN+ACK包. 第三次握手 客户端收到服务器的SYN+ACK包后,还需要向服务器发送确认包ACK,此包发送完毕,此后双方就可以开始通信了,完成三次握手。 四次挥手 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个

一文搞懂什么是TCP/IP协议

ε祈祈猫儿з 提交于 2019-11-25 19:56:01
什么是TCP/IP协议? 计算机与网络设备之间如果要相互通信,双方就必须基于相同的方法.比如如何探测到通信目标.由哪一边先发起通信,使用哪种语言进行通信,怎样结束通信等规则都需要事先确定.不同的硬件,操作系统之间的通信,所有这一切都需要一种规则.而我们就将这种规则称为协议 (protocol). 也就是说,TCP/IP 是互联网相关各类协议族的总称。 TCP/IP 的分层管理 TCP/IP协议里最重要的一点就是分层。TCP/IP协议族按层次分别为 应用层,传输层,网络层,数据链路层,物理层 。当然也有按不同的模型分为4层或者7层的。 为什么要分层呢? 把 TCP/IP 协议分层之后,如果后期某个地方设计修改,那么就无需全部替换,只需要将变动的层替换。而且从设计上来说,也变得简单了。处于应用层上的应用可以只考虑分派给自己的任务,而不需要弄清对方在地球上哪个地方,怎样传输,如果确保到达率等问题。 如上图所示,我们将TCP/IP分为5层,越靠下越接近硬件。我们由下到上来了解一下这些分层。 物理层 该层负责 比特流在节点之间的传输,即负责物理传输,这一层的协议既与链路有关,也与传输的介质有关。通俗来说就是把计算机连接起来的物理手段。 数据链路层 控制网络层与物理层之间的通信,主要功能是保证物理线路上进行可靠的数据传递。为了保证传输,从网络层接收到的数据被分割成特定的可被物理层传输的帧