-
2021-03-13 22:10:47
TCP数据报文结构:
三次握手主要用到了序列号(seq)&确认号(ack)及两个标志位(ACK&SYN):
- seq:序列号和确认号是tcp传输可靠性的关键部分,序列号的随机取值范围为0-2^32-1 关于为什么不使用固定序列号
- ack:下一个希望收到的序列号且代表之前序列号传输的数据已经被正确的收到,此字段只有ACK标志位为1的时候才有效
- ACK:确认标志位,确认序号标志,为1时表示确认号(ack)有效,建立链接后所有数据的ACK都应为1
- SYN:同步/链接标志位---->当SYN=1且ACK=0时,代表这是一个连接请求报文,TCP规定SYN=1时不能携带数据,但要消耗一个序号
三次握手流程:
第一次握手:
客户端向服务器发送一个请求连接报文
报文数据:- SYN:我(client)想跟你进行连接
- seq:我(client)这条数据的序列号是100
当服务器解析该条报文为连接请求且可以建立连接时触发第二次握手
第二次握手:
服务器向客户端发送同意连接报文
报文数据:- SYN:我(server)可以跟你(client)进行连接啦
- ACK:你(client)的确认号有效
- seq:我(server)这条数据的序列号是200
- ack:我(server)已经收到你(client)序列号为100的数据了,下次你(client)给我(server)发的数据序列号应该是101哦
此时client已经知道client发送的数据server可以正常收到,且server发送的数据client也可以正常收到,但是server 并不知道client能不能正常的收到server的数据,由此则衍生出第三次握手
第三次握手:
客户端向服务端发送自己收到服务端可以连接的数据了
报文数据:- ACK:你(server)的确认号是有效的
- seq:我(client)这条数据序列号是你(server)希望我发的101
- ack:我(client)已经收到你(server)序列号为200的数据了,下次你给我发的数据序列号应该是201哦
至此双端已建立稳定的连接了,之后就可以互相发送数据啦~
更多相关内容 -
简述TCP三次握手和四次挥手
2021-08-28 12:38:131.1 TCP三次握手漫画图解 如下图所示,下面的两个机器人通过 3 次握手确定了对方能正确接收和发送消息(图片来源:《图解 HTTP》)。 简单示意图: 客户端–发送带有 SYN 标志的数据包–一次握手–服务端 ...为了准确无误地把数据送达目标处,TCP 协议采用了三次握手策略。
1.1 TCP三次握手漫画图解
如下图所示,下面的两个机器人通过 3 次握手确定了对方能正确接收和发送消息(图片来源:《图解 HTTP》)。
简单示意图:
- 客户端–发送带有 SYN 标志的数据包–一次握手–服务端
- 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
- 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端
详细示意图
1.2 为什么要三次握手
三次握手的目的是建立可靠的通信信道。
说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的:双方确认自己与对方的发送与接收是正常的。
第一次握手:Client 什么都不能确认;Server 确认了对方发送正常,自己接收正常
第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:对方发送正常,自己接收正常
第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送、接收正常
所以三次握手就能确认双发收发功能都正常,缺一不可。
1.3 第2次握手传回了ACK,为什么还要传回SYN?
接收端传回发送端所发送的 ACK 是为了告诉客户端,我接收到的信息确实就是你所发送的信号了,这表明从客户端到服务端的通信是正常的。而回传 SYN 则是为了建立并确认从服务端到客户端的通信。”
SYN 同步序列编号(Synchronize Sequence Numbers) 是 TCP/IP 建立连接时使用的握手信号。
在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK(Acknowledgement)消息响应。这样在客户机和服务器之间才能建立起可靠的 TCP 连接,数据才可以在客户机和服务器之间传递。
1.5 为什么要四次挥手
断开一个 TCP 连接则需要“四次挥手”:
- 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
- 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加 1 。和 SYN 一样,一个 FIN 将占用一个序号
- 服务器-关闭与客户端的连接,发送一个 FIN 给客户端
- 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加 1
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。
举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B 回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。
-
简述TCP三次握手过程
2020-05-25 07:58:43简述TCP三次握手过程 标签(空格分隔):面试题 文章目录简述TCP三次握手过程传输层协议TCP协议数据格式(包头)TCP三次握手详解TCP四次挥手 传输层协议 TCP协议(传输控制协议) : 可靠的,面向连接的传输协议 UDP协议...简述TCP三次握手过程
标签(空格分隔):面试题
传输层协议
- TCP协议(传输控制协议) : 可靠的,面向连接的传输协议
- UDP协议(用户数据报协议) : 不可靠的,面向无连接的传输协议
TCP协议数据格式(包头)
- 序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
- 确认号: Ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,Ack=Seq+1。
- 标志位:共6个, 即URG、ACK、 PSH、RST、 SYN、FIN等, 具体含义如下:
- URG:紧急指针(urgent pointer)有效。
- ACK:确认序号有效。
- PSH:接收方应该尽快将这个报文交给应用层
- RST:重置连接。
- SYN:发起一个新连接。
- FIN:释放一个连接。
知道ACK.SYN.FIN
TCP三次握手
详解
-
第一次握手: Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
-
第二次握手: Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack序号J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
-
第三次握手: Client收到确认后,检查ack序号是否为J+1,标志位ACK是否为1,如果正确则将标志位ACK置为1,ack序号=K+1,并将该数据包发送给Server; Server检查ack序号是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后:
Client与Server之间可以开始传输数据了。
TCP四次挥手
-
简述TCP三次握手和四次挥手的过程和理解
2019-10-21 20:34:48简述TCP三次握手和四次挥手的过程和理解 在讲解之前先来熟悉一下TCP报文头部 源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的, 而一个计算机端口某个时刻只能被一个进程占用,...简述TCP三次握手和四次挥手的过程和理解
在讲解之前先来熟悉一下TCP报文头部
源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的, 而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标 端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的, 可推算计算机的端口个数为2^16个。序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个 字节,就会出现序列号回绕,再次从 0 开始。
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。 也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据 的编号为此确认号。
数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可 变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数 据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为 计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节。
URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效。
ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。 TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段。
PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空 间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序 不将接收到的数据读走,就会一直停留在TCP接收缓冲区中。
RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必 须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应, 带RST标志的TCP报文段称为复位报文段。
SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连 接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求 建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文 段称为同步报文段。
FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方: “我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段。
三次握手过程
1.第一次握手:客户机将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给服务器,客户机进入SYN_SENT状态,等待服务器确认。2.第二次握手:服务器收到数据包后,由标志位SYN=1知道客户机请求建立连接,服务器将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给客户机以确认连接请求,服务器进入SYN_RCVD状态。
3.第三次握手:客户机收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给服务器,服务器检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户机和服务器进入ESTABLISHED状态,完成三次握手,随后客户机与Se服务器之间可以开始传输数据了。
四次挥手
1.第一次挥手:客户机发送一个FIN,用来关闭客户机到服务器的数据传送,客户机进入FIN_WAIT_1状态。2.第二次挥手:服务器收到FIN后,发送一个ACK给客户机,确认序号为收到序号+1,则服务器进入CLOSE_WAIT状态。
3.第三次挥手:服务器发送一个FIN,用来关闭服务器到客户机的数据传送,服务器进入LAST_ACK状态。
4.第四次挥手:客户机收到FIN后,客户机进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+1,服务器进入CLOSED状态,完成四次挥手。
注意:TCP连接时全双工的,每个方向都必须要单独进行关闭。这一原则是当一方完成数据发送任务后,发送一个FIN来终止本方向的连接,收到一个FIN只是意味着发送方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到另一方向也发送了FIN,这个循环才会终止。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
-
简述TCP三次握手和四次挥手流程
2018-07-14 15:30:32关于TCP的连接过程,很多从事程序开发的小伙伴应该都听过三次握手,可这三次握手的细节还是有很多人不太清楚的,特别是有些参数记不清楚,我也经常弄错,所以我根据自己的理解画了两张图,将TCP连接和断开的流程简单... -
简述TCP三次握手、四次挥手
2020-05-14 17:08:062、TCP套接字3、TCP中客户与服务器4、TCP报文协议5、TCP报文的序列号Seq和确认号Ack二、TCP连接建立三握手、连接断开四挥手理论步骤1、连接三握手2、断开四挥手三、用Wireshark抓包工具分析TCP协议在真实环境数据... -
简述tcp三次握手的过程
2020-10-27 14:43:33所谓三次握手 即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发 TCP协议三次握手完整过程 第一次握手:建立连接时,... -
简述TCP三次握手和四次挥手过程
2018-03-06 09:31:00TCP握手协议 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize ... -
简述TCP三次握手协议的机制
2021-08-23 16:11:34... -
简述TCP三次握手
2020-01-15 02:02:18简单来说就是: 第一次:由浏览器开始,告诉服务器,我要发起请求啦! 第二次:由服务器开始,告诉浏览器,我准备好...第三次:由浏览器开始,告诉浏览器,我发给你了,你接受一下! 简单的可以这么理解!!! ... -
简述TCP三次握手,四次分手的过程
2018-06-23 14:06:29TCP相关知识 TCP是面向连接的运输层协议,它提供可靠交付的、全双工的、面向字节流的点对点服务。HTTP协议便是基于TCP协议实现的。(虽然作为应用层协议,HTTP协议并没有明确要求必须使用TCP协议作为运输层协议,... -
TCP三次握手简述
2021-09-15 22:09:36TCP三次握手什么是TCP连接TCP头部格式TCP建立连接(三次握手)建立连接过程:建立连接过程异常:TCP 第⼀次握⼿的 SYN 丢包了:TCP 第⼆次握⼿的 SYN、ACK 丢包了:TCP 第三次握⼿的 ACK 包丢了:为什么是三次握手:... -
简述TCP的三次握手和四次挥手
2021-03-23 20:47:10TCP3次握手后数据收发通道即打开(即建立了连接)。 简述三路握手过程: 第一次握手:Client将标志位SYN置为1,选择序号seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 ... -
请简述TCP三次握手的过程
2020-03-27 22:32:55主机A 主机B 第一次 主机A 发起连接: 序列号 100,syn=1 第二次 主机B 确认: 确认号 101,ack=1 发起连接:序列号 300,syn=1 ...第三次 主机A 确认: 序列号 101,确认号 301 ack=1 ... -
简述TCP三次握手过程,并说明为什么要3次握手
2020-12-19 06:37:26TCP三次握手TCP连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:1.客户端向服务器发送一个SYN... -
简述TCP的三次握手过程。
2019-10-10 10:59:33TCP握手协议 :在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 1、第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号... -
简述TCP的三次握手和四次挥手过程
2021-01-05 16:57:30TCP三次握手 (1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。 (2)第二次握手:Server收到数据包后由标志位SYN=1知道Client... -
【http】简述TCP三次握手和四次挥手
2019-03-24 10:25:19三次握手是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。 可以想象两人用对讲机交谈。 A:我准备好了你准备好了吗,收到请回答。 B:收到收到,我也准备好了,收到请回答。 A:收到收到 ... -
简述TCP的三次握手过程
2018-08-28 11:25:05所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发,整个流程如下图所示: ... -
简述TCP协议的三次握手过程
2020-10-20 15:39:54(1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。...(3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为 -
TCP 的三次握手(简述)
2021-04-26 15:13:27在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; SYN:同步序列编号(Synchronize Sequence ... -
简述 TCP 三次握手和四次挥手?
2021-10-27 20:33:18TCP 三次握手和四次挥手? 三次握手: 第一次握手: 客户端向服务端发送 SYN 包请求建立连接,客户端进入 SYN_SEND 状态; 第二次握手: 服务端收到 SYN 包并确认 SYN 包,服务端发送 SYN+ACK 包,服务端进入SYN_... -
TCP三次握手,四次挥手的全过程,为什么需要三次握手,四次挥手
2022-02-21 11:20:00文章目录TCP介绍三次握手四次挥手滑动窗口拥塞避免算法 TCP介绍 三次握手 四次挥手