三次握手详解

在这里插入图片描述

 

报文解析
 源端口和目的端口字段
TCP源端口(Source Port):源计算机上的应用程序的端口号,占 16 位。
TCP目的端口(Destination Port):目标计算机的应用程序端口号,占 16 位。
序列号字段
CP序列号(Sequence Number):占 32 位。它表示本报文段所发送数据的第一个字节的编号。在 TCP 连接中,所传送的字节流的每一个字节都会按顺序编号。当SYN标记不为1时,这是当前数据分段第一个字母的序列号;如果SYN的值是1时,这个字段的值就是初始序列值(ISN),用于对序列号进行同步。这时,第一个字节的序列号比这个字段的值大1,也就是ISN加1。
确认号字段
TCP 确认号(Acknowledgment Number,ACK Number):占 32 位。它表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。其值是接收计算机即将接收到的下一个序列号,也就是下一个接收到的字节的序列号加1。
数据偏移字段
TCP 首部长度(Header Length):数据偏移是指数据段中的“数据”部分起始处距离 TCP 数据段起始处的字节偏移量,占 4 位。其实这里的“数据偏移”也是在确定 TCP 数据段头部分的长度,告诉接收端的应用程序,数据从何处开始。
保留字段
保留(Reserved):占 4 位。为 TCP 将来的发展预留空间,目前必须全部为 0。
标志位字段
CWR(Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。
ECE(ECN Echo):用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN 功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
窗口大小字段
窗口大小(Window Size):占 16 位。它表示从 Ack Number 开始还可以接收多少字节的数据量,也表示当前接收端的接收窗口还有多少剩余空间。该字段可以用于 TCP 的流量控制。
TCP 校验和字段
校验位(TCP Checksum):占 16 位。它用于确认传输的数据是否有损坏。发送端基于数据内容校验生成一个数值,接收端根据接收的数据校验生成一个值。两个值必须相同,才能证明数据是有效的。如果两个值不同,则丢掉这个数据包。Checksum 是根据伪头 + TCP 头 + TCP 数据三部分进行计算的。
紧急指针字段
紧急指针(Urgent Pointer):仅当前面的 URG 控制位为 1 时才有意义。它指出本数据段中为紧急数据的字节数,占 16 位。当所有紧急数据处理完后,TCP 就会告诉应用程序恢复到正常操作。即使当前窗口大小为 0,也是可以发送紧急数据的,因为紧急数据无须缓存。
可选项字段
选项(Option):长度不定,但长度必须是 32bits 的整数倍。

上文为CSDN博主「cheerileeyoki」的原创文章,个人认为解释详细清晰加以引用。

TCP
(此处为补充部分)

(此处为补充部分)

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1]  定义。

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标示:

SYN(synchronous同部位),tcp握手的第一次

ACK(acknowledgement 确认位),建立连接时用到的

PSH(push) 推送位,若为1,代表要求对方立即传送缓冲区内的其他对应封包,

FIN(finish结束)

RST(reset重置)

URG(urgent紧急),为1表示紧急的报文封包

Sequence number序列号

Acknowledge number确认号


TCP三次握手四次断开
三次握手:

第一次握手:client发送位码为syn=1,随机产生seq number=1000的数据包到服务器,server 由SYN=1知道,client要求建立联机请求,

第二次握手:sever收到请求后要确认联机信息,向client发送ack number=(client的

seq+1),syn=1,ack=1,随机产生seq=6777的数据包

第三次握手:client收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,

若正确,client会再发送ack number=(server的seq+1),ack=1(syn=0),server收到后确认seq 值与ack=1则连接建立成功。

完成三次握手,双方开始传送数据。

通俗点来说:

第一次握手:你和妹妹想谈恋爱,首先你应该告诉妹妹一声,即发出一个SYN=1的请求联系的信号,“妹妹,我家猫会后空翻,你要看看吗?”

第二次握手:当妹妹已经收到了你的联系请求,此时要做出回应(即要给你一个确认信息):“我知道了(ACK),并且准备好了,你现在可以接我去你家吗?(SYN)”

第三次握手:当你收到妹妹的确认消息之后,你要绅士的回复她:“好的,那我现在过来接你到我家(ACK)”

到此整个建立连接的过程已经结束,接下来就是双方你一句我一句甚至同时交流传递信息的过程了。

四次挥手断开
第一次挥手断开:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,此时客户端进入TIME_WAIT1状态

第二次挥手断开:服务器收到这个FIN,它发回一个ACK,确认号为收到的序号加1,和SYN一样,一个FIN将占用一个序号,此时服务器进入CLOSE_WAIT状态,客户端端进入TIME_WAIT2

第三次挥手断开:当服务器端也没有要传送的数据时,服务器关闭与客户端的连接,发送一个FIN给客户端A,服务器进入LAST_ACK

第四次挥手断开:客户端发回ACK报文确认,并将确认号设置为收到序号加1,客户端进入TIME_WAIT,等待2MSL--120s,服务器端接后进入CLOSED

通俗点解释:

第一次挥手断开:双方交流的差不多了,你也将为此次友好交流画上一个句号了,接下来你要做的是断开两人的连接,所以你绅士的告诉妹妹:“该看的也看完了(FIN)”,此时自身形成等待结束连接的状态。

第二次挥手断开:妹妹知道你已经无话可说了,但妹妹还有几句话想要对你说,“我知道你已经无话可说了(FIN),我再给你说两句,%*&……¥#*@#¥¥@%¥。”

第三次挥手断开:此时你处于一种洗耳恭听等待结束的状态,妹妹也说完了,她自身也处于等待结束状态,然后告诉你:“我说完了,咱们就断了吧(FIN)。”

第四次挥手断开:你知道妹妹也说完了,但也要告诉妹妹一声(ACK),因为联系和断开都需要两人同时水泥封心才能断开,你同时又为自己设置了一个时间限制(因为你不知道你说的准确的传达给你的知心妹妹),这个时间限制即是你俩通讯交流的时间之和,超出这个时间你自己就认为妹妹已经收到自己的断绝信息,此时你就关闭了自己的通讯,而妹妹一旦收到来自你的决绝信息,也会立即断开与你的连接。

到此为止双方整个通信过程就此终结。这里要声明一下:断开链接不一定就是你自己(渣男),谁都可以先发起断开指令,另外渣男和知心妹妹是没有固定标准的,谁先发起请求谁就是渣男。
————————————————
版权声明:本文为CSDN博主「Sona982」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_71008408/article/details/125626750

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
三次握手是TCP建立连接的过程,而四次挥手是TCP断开连接的过程。 三次握手详解如下: 1. 第一次握手:客户端向服务器发送一个SYN包,其中包含客户端的初始序列号(ISN)。 2. 第二次握手:服务器收到客户端的SYN包后,向客户端发送一个SYN-ACK包,其中包含服务器的初始序列号(ISN+1),同时确认客户端的SYN包。 3. 第三次握手:客户端收到服务器的SYN-ACK包后,向服务器发送一个ACK包,确认服务器的SYN-ACK包。 通过这三次握手,客户端和服务器建立了双向的可靠连接,可以开始进行数据的传输。 四次挥手的详解如下: 1. 第一次挥手:当客户端没有数据要发送时,它向服务器发送一个FIN包,表示客户端已经完成了数据的发送。 2. 第二次挥手:服务器收到客户端的FIN包后,向客户端发送一个ACK包,确认客户端的FIN包。 3. 第三次挥手:当服务器也没有数据要发送时,它向客户端发送一个FIN包,表示服务器已经完成了数据的发送。 4. 第四次挥手:客户端收到服务器的FIN包后,向服务器发送一个ACK包,确认服务器的FIN包。 通过这四次挥手,客户端和服务器完成了连接的断开,不再进行数据的传输。 总结起来,三次握手是建立连接的过程,而四次挥手是断开连接的过程。这样的设计可以保证数据的可靠传输,并且确保连接的双方都能正确地完成连接的建立和断开。 #### 引用[.reference_title] - *1* *2* *3* [我终于搞懂了TCP的三次握手和四次挥手(图片案例超详解)](https://blog.csdn.net/weixin_45393094/article/details/104965561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值