个人对TCP3次握手和4次挥手的理解

首先SYN这个标志位是用于发起TCP连接的,所以第一次握手,A-》B的时候SYN=1,同时第二次握手B-》A的时候,因为要接受其TCP连接,所以其SYN也=1.

也就是前两次握手 SYN都=1

然后就可以讨论下SEQ(数据序号)和ACK(确认序号)这两个概念

SEQ是指 当前 数据包在整个数据包中的位置

ACK是指 希望下个数据发过来的首数据的位置

比如0-700的数据接收完了,下一个想接受的是701开始的数据,所以这时候ACK就为701

然后再详细说下TCP3次握手中他们的变化

首先是第一次握手A-》B,因为是第一次握手,所以 当前数据包 在 整个数据包的位置为 0

所以此时SEQ=0

又因为对方没有传过任何数据,所以期望对方传的数据包首位也是在0的

所以此时ACK也=0

然后是第二次握手B-》A,因为这是B第一次发送数据,所以发送的数据和上面第一次发送数据中所期望的一样,首位数据位为 0

所以此时SEQ=0

又因为A已经发过一次SEQ=0的数据了,所以B期望A发送接下来的信息是从位置1开始的

所以此时ACK=1

然后是第三次握手A-》B,如上面第二次B所期待的一样,这次发送的信息是从第1位开始的 所以

SEQ=1

又同时上次B发送过0位置开始的数据包了,所以期待下次的发送数据的位置是1

所以ACK=1

到这里 TCP的3次握手就完成了

但为什么TCP的连接需要的是3次握手呢?

因为本质上,双方都需要确定一个信息:对方能收到我的消息

所以三次握手就分别有任务了

第一次握手,A发送给B,A想要知道B能不能收到自己的消息,所以这时候需要B一个回复,这就是第二次握手的意义——让A知道了B能收到他的消息

第二次握手,B发送给A,是为了回应A告诉他自己(B)可以收到A的消息

但与此同时,B也要确认A能收到自己发送的消息,所以需要一个回复,这就是第三次握手的意义

第三次握手,A发送给B,这时候发过去B一但收到,双方都知道自己和对方的通信莫得问题了,于是就可以开始传数据了

所以一般下一个数据包就是含有数据的数据包了


这时候再说下TCP的4次挥手

因为一般来说 TCP连接在不断传输数据,一但有其中一方要发起断开连接,双方也都有要确认的事——

对方都没有数据需要传了

同时需要知道一点,TCP中是利用FIN 这个终止标志位(就如发起连接时的SYN一样)来标识一个断开连接的请求的

这时候就可以开始说4次挥手的过程了

首先是其中一方,称为主动方,主动发起了断开连接的请求A-》B,

这是第一次挥手,其FIN=1,SEQ=X,ACK=Y(代表任意)

这时候有可能被动方还有数据要传送,所以下一次挥手不能直接发送FIN=1来断开连接,这也是和握手之间的区别

但是同时第二次挥手也要发出“我知道你要断开连接了,让我先传了这个数据包”

所以第二次挥手,B-》A,此时因为B还有数据要传,传的开始的位置是第一次挥手中ACK的值,所以此时SEQ=Y

同时,所以ACK要等于第一次挥手其数据包位置SEQ+1的值,也就是X+1

然后就开始了第三次挥手,这时候终于传完了数据,B-》A再发了一个数据,并且FIN标识=1,代表B也完事了,同时发一个档期数据位置SEQ=Z ,这时候这个Z是第二次挥手时候数据包位置Y加上第二次挥手传输数据的长度=Z,因为不知道数据长度,所以这里也只能用Z来表示。同时ACK=第一次挥手的时候,A的当前数据包位置X,因为B已经知道A要断连了,所以不期待更新的数据包了,所以ACK也就只到X为止了。

然后就是A-》B的第四次挥手,让B知道A也收到了你的FIN结束消息,A也不期待有下一个新的B数据包了,所以ACK也不动了,设置为了第三次挥手时B发送的数据包位置Z了,同时自己的SEQ也还是X,没有新的数据所以不变了

这就是对TCP3次握手和4次挥手的理解

原文地址:https://www.cnblogs.com/EatMedicine/p/10604765.html

时间: 2024-10-15 02:37:27

个人对TCP3次握手和4次挥手的理解的相关文章

TCP的三次握手与四次挥手的理解

本文经过借鉴书籍资料.他人博客总结出的知识点,欢迎提问    序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后,就给每一个报文段指派一个序号:序列号seq就是这个报文段中的第一个字节的数据编号.    确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号:序列号表示报文段携带数据的第一个字节的编号:而确认号指的是期望接收到下一个字节的编号:因此当前报文段最后一个字节的编号+1即为确

TCP3次握手和4次挥手及其为什么

TCP 3次握手 客户端向服务器发送一个SYN(包含了SYN,SEQ). 当服务器接收到客户端发过来的SYN时,会向客户端发送一个SYN+ACK的数据包,其实ACK的ack等于上一次发送SYN数据包的(SYN+SEQ). 当客户端接收到服务器发送过来的SYN+ACK数据包时,当接收到后向服务器发送ACK的数据包,此时ACK数据包中的ack值等于上一次SYN中的seq+syn. 当服务器收到了客户端的发送过来的ACK数据包时,确认无误后,向客户端发送数据. 为什么要3次握手 防止已过期的连接请求报

TCP三次握手和四次挥手通俗理解

一.TCP报文格式 在了解三次握手和四次挥手之前,先知道TCP报文内部包含了哪些东西. TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接.TCP在发送数据前必须在彼此间建立连接,这里连接意思是:双方需要内保存对方信息(例如:IP,Port…) 报文主要段的意思 序号:表示发送的数据字节流,确保TCP传输有序,对每个字节编号 确认序号:发送方期待接收的下一序列号,接收成功后的数据字节序列号加 1.只有ACK=1时才有效. ACK:确认序号的标志,ACK=1表

软件测试学习-关于三次握手与四次挥手的理解

三次握手(建立连接) 四次挥手(断开连接) 原文地址:https://www.cnblogs.com/1617-fung/p/11575221.html

TCP-三次握手和四次挥手简单理解

三次握手(three-way handshaking) 1.背景:TCP位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略. 2.原理: 1)发送端首先发送一个带有SYN(synchronize)标志地数据包给接收方. 2)接收方接收后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了. 3)最后,发送方再回传一个带有ACK标志的数据包,代表我知道了,表示’握手‘结束. 通俗的说法 1)Client:嘿,李四,是我,听到了吗? 2)

TCP的三次握手与四次挥手(个人总结)

序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后,就给每一个报文段指派一个序号:序列号seq就是这个报文段中的第一个字节的数据编号. 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号:序列号表示报文段携带数据的第一个字节的编号:而确认号指的是期望接收到下一个字节的编号:因此当前报文段最后一个字节的编号+1即为确认号. 确认ACK:占1位,仅当ACK=1时,确认号字段才有效.AC

TCP的三次握手与四次挥手理解及面试题(很全面)

序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后,就给每一个报文段指派一个序号:序列号seq就是这个报文段中的第一个字节的数据编号. 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号:序列号表示报文段携带数据的第一个字节的编号:而确认号指的是期望接收到下一个字节的编号:因此当前报文段最后一个字节的编号+1即为确认号. 确认ACK:占1位,仅当ACK=1时,确认号字段才有效.AC

TCP的三次握手与四次挥手理解及面试题

原文:https://blog.csdn.net/qq_38950316/article/details/81087809 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后,就给每一个报文段指派一个序号:序列号seq就是这个报文段中的第一个字节的数据编号. 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号:序列号表示报文段携带数据的第一个字节的编号:而确认号指的是期望接收到下一

TCP的三次握手与四次挥手理解

本文经过借鉴书籍资料.他人博客总结出的知识点,欢迎提问 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生:给字节编上序号后,就给每一个报文段指派一个序号:序列号seq就是这个报文段中的第一个字节的数据编号. 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号:序列号表示报文段携带数据的第一个字节的编号:而确认号指的是期望接收到下一个字节的编号:因此当前报文段最后一个字节的编号+1即为确认号. 确认