简述TCP协议与三次握手和四次挥手

一、TCP协议

1.1 TCP协议简介

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

  • TCP是面向连接的、可靠的进程到进程通信的协议
  • TCP提供全双工服务,即数据可在同一时间双向传输。

1.2 TCP报文格式

1.2.1 TCP报文段

  • TCP将若干个字节构成一个分组,叫做报文段(Segment)
  • TCP报文段封装在IP数据报中

tG0LWj.png
tG0jln.png

  • SYN(Synchronize Sequence Numbers):同步序列号,是TCP建立连接时候的握手信号,TCP需要建立连接时将该值设为1。
  • ACK (Acknowledge character):确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误,当该位为1时,用于确认发送方的数据。
  • RST(Reset the connection):复位标志,用于复位TCP连接。
  • FIN(Finish):结束标志,用来结束TCP回话,当TCP断开连接时将该位置为1。

二、三次握手

2.1 TCP握手建立连接的过程

tG0bFg.gif

  • 第一次:客户机(Client)发送连接请求即SYN=1,并发送随机Seq数据包,Seq=x;

  • 第二次:服务端(Server)收到请求同意建立连接,发送自己的同步序列号SYN=1,并随机生成一个Seq数据包即Seq=y,并要回应Client的请求,ACK=1,Ack=x+1;

  • 第三次:Client收到服务端同意建立连接请求的回复,发送ACK=1,Seq=x+1,Ack=y+1

    完成以上三步后,TCP连接建立。

2.2 使用WireShark抓包验证四次握手

这里使用的是VM虚拟机模拟一台Linux远程服务器,我们使用X Shell工具进行远程连接时候进行抓包并分析内容。
tG0vyq.png

从图上可以看出,客户机与服务端是经过三次握手之后再开始传输数据的,前三个抓到的报文就代表了三次握手,我们来展开分析下:

第一握手:
tG0qYQ.png

第二次握手:
tG0xO0.png

第三次握手:
tGB9TU.png

三、四次挥手

3.1 四次挥手的过程

tGBpwT.png

  • 第一次:首先客户机想要断开连接,发送FIN=1,ACK=1报文来关闭数据发送

  • 第二次:服务端收到FIN报文,回复报文ACK=1

  • 第三次:服务端再次发送FIN=1,并发送ACK=1报文给服务端

  • 第四次:客户端收到报文,回复ACK=1确认关闭连接

3.2 使用WireShark抓包验证四次挥手

这里使用的是VM虚拟机模拟一台Linux远程服务器,我们使用X Shell工具进行远程连接时候进行抓包并分析内容。
tGBPkF.png

第一次:
tGBiY4.png

第二次:
tGBFfJ.png

第三次:
tGBAp9.png

第四次:
tGBElR.png

五、疑问与思考

5.1 WireShark抓包四次挥手发现的问题

在使用X Shell工具进行对四次挥手进行抓包时一切正常,我后来又更换了一款SecureCRT 8.0软件进行连接抓包,只抓到如下三个报文,第一次是客户端发送的挥手报文,第二次是客户端发送的[RST,ACK]报文,第三次是服务端回复的ACK报文。
tGBV61.png

经过一番查询后找到了答案:

TCP连接关闭的正常方法是四次握手。但四次握手不是关闭TCP连接的唯一方法. 有时,如果主机需要尽快关闭连接(或连接超时,端口或主机不可达),RST (Reset)包将被发送

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值