大白话了解TCP协议:经典——三次握手数据传输 四次挥手

一直在想如何去描写这个过程,希望用最简单的话加入到自己博客之中
本来开了个小店,但是还是想了一下取消了,技术分享不能以盈利为目的

干嘛要我和她握手呀?

TCP是一个就是靠着连接起家的服务协议。
我们已经很熟悉了吧,TCP连接的过程是:建立连接→数据传输→断开连接
而我们把TCP建立连接的过程叫做:三次握手🤝。
为啥数据传输之前要握手呢?:这个就和女朋友牵手一样,通过牵手,你可以感知她的喜怒哀乐,她生气了会不让你牵手,或者撒开你的手,她开心会紧紧握着你的手~❤
在这里插入图片描述
所以TCP建立起连接,就是为了在数据传输时感知数据是否正确到达

握手就握手,为啥要握三次啊?

诶诶,计算机可不是人,一次握手可不能心有灵犀呀
想要仔细来讲解,抓包不能少!wireshark走起~
我通过抓包,抓到了TCP三次握手建立连接的过程🔗
在这里插入图片描述
我们可以清楚得看到:连接的过程。
第一次握手A传输数据到B,之后B再传输数据到A,最后A再传输数据回到B。
在这里插入图片描述
第一次握手🤝:同步SYN=1,确认号ACK=0;表示请求连接
初始化发送方的相关参数比如序号、窗口大小、MSS等
在这里插入图片描述
在这里插入图片描述
第二次握手🤝:SYN=1,ACK=1。表示同意建立连接。
初始化接收方的相关参数
注意:第二次握手这里是ACK=发送方的序号+1
在这里插入图片描述
在这里插入图片描述
第三次握手🤝:SYN=0 连接建立完毕SYN就变为0,ACK=1,确认收到了对方的握手,序号如同所期望的那样变为了1
ACK=接收方的序号+1
在这里插入图片描述
在这里插入图片描述

不理解?抓个包吧兄弟们,做个实验就都理解了,后面出一期如何模拟一个TCP环境抓包。

在这里插入图片描述
三次握手的示例

  • 请求连接 SYN=1 、ACK=0,SEQ=100
  • 建立连接 SYN=1 、ACK=SEQ+1=101 、SEQ=300
  • 确认连接SYN=0 、ACK=300+1=301 、SEQ=101
    在这里插入图片描述

连接完了,要传输数据了

假设我传输个数据:abcdefg,我们抓包看看
这个时候出现了两个包:

  • 发送方发送的数据报文
  • 接收方收到的数据之后向发送方发送的确认报文

在这里插入图片描述
我们来看看细节:

  • 首先是第一个报文:
    我们从上面的截图可以看见,此时的序号是1,确认号也是1,传输了长度为9个字节的数据
  • 再来是第二个报文:
    序号仍然是1,但是确认号变成了10.

好像看不出来什么,我们再发送一个数据
在这里插入图片描述

  • 在第一个报文里:
    我又发送了一个长度为11的报文,这个时候序号是10
  • 第二个报文里:
    序号又是1,但是确认号变成了21.

所以,TCP的数据传输过程是:

  • 发送方的序号SEQ=上一个发送方的序号+上一次发送的数据长度。确认号是1.
  • 接收方的序号是1,确认号ACK=发送方的序号+发送的数据长度。

在这里插入图片描述

挥挥手,不带走一片云彩

当我推出的时候
就出现了四次挥手
在这里插入图片描述
四次挥手的过程很简单

  • 第一次挥手👋:FIN=1,ACK=1,SEQ=发送方的上一次报文序号+发送方上一次发送的数据长度。
  • 第二次挥手👋:SEQ=1,ACK=上一个报文的序号+1
  • 第三次挥手👋(仍然是接收方方发送):SEQ=1,ACK=上面的ACK,但是此时的ACK被值为了1
    在这里插入图片描述
  • 第四次挥手👋:发送方发送:SEQ=发送方上一次发送的序号+1,ACK=ACK+1
    在这里插入图片描述

三次握手和四次挥手的细节很多,希望大家能够自己做实验来研究

下面有一个自己画的图:
在这里插入图片描述
在这里插入图片描述

posted @ 2021-04-23 13:05  Zeker62  阅读(345)  评论(0编辑  收藏  举报