大白话了解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
三次握手和四次挥手的细节很多,希望大家能够自己做实验来研究
下面有一个自己画的图:
本文来自博客园,作者:{Zeker62},转载请注明原文链接:https://www.cnblogs.com/Zeker62/p/15046247.html