快速掌握TCP的三次握手和四次挥手

前言

TCP的三次握手和四次挥手经常会出现在面试题中,而且也是看懂抓包数据的基本知识。本文快速讲解三次握手和四次挥手的流程以及为什么会有三次握手和四次挥手。

知识前提

TCP/IP中存在两个具有代表性的传输层协议,分别是TCP和UDP。

TCP

TCP 是面向连接的、可靠的流协议,具备顺序控制、重发控制等机制。建立连接必须进过三次握手,断开连接需要4次挥手。所以TCP常用在传输层有必须可靠传输的情况,比如文件传输,文字发送。

 

UDP

UDP是不具有可靠性的数据报协议,UDP不需要建立连接,可以直接发起。UDP常应用在不需要保证数据可靠性,并对实时性有较高的要求,比如视频通话。

 

标志位

TCP在协议头中使用大量的标识位来控制连接,其中3个常用的标识位如下:

SYN :创建一个连接

ACK:确认收到的数据

FIN : 终结一个连接

为什么会有三次握手和四次挥手

TCP采用三次握手建立一个连接,采用4次挥手来关闭一个连接。既然是可靠协议,那三次握手和四次挥手就是用来保证数据的可靠性的。

 

三次握手介绍

image.png

 

上图中,所谓的三次握手,就是建立一个TCP连接时,需要客户端和服务端总共发送3个包,作用是双方能明确自己和对方的发送接收能力都正常。三条线表次三次握手的过程。

第一次握手:客户端端发送网络包,服务端端收到网络包。此时,服务端知道了:客户端的发送能力正常、服务端的接收能力正常。

第二次握手:服务端发送针对客户端之前SYN的ACK包,和建连SYN包。客户端收到了之前SYN的应答和SYN请求,此时,客户端知道了,服务端接收能力正常、发送能力正常,客户端发送能力正常、接收能力正常。

第三次握手:客户端发送针对SYN的ACK包,服务端收到了。此时,服务端又知道了,客户端接收能力正常,服务端发送能力正常。

三次握手下来之后,客户端和服务端都知道自身和对方的发送、接收能力都是正常的,我们可以正常通信消息了。

四次挥手介绍

image.png

上图所示的四条线即对应四次挥手,主动方和被动方总共需要发送4个包,因为任何一方都可以发起断连,所以不区分客户端或者服务端,我们用主动方和被动方来区分。

 

第一次挥手:主动方发起FIN包,主动方告知被动方:我数据都已经发送完了,不需要再建立连接了。

第二次挥手:被动方发送ACK。此时,主动方已经不能向被动方发送数据了,但是被动方还是可以向主动方发送数据。被动方收到FIN请求后会立马回ACK,但是并不会立马发送FIN请求,因为被动方要告知上层应用,由应用层决定是什么时候发送FIN指令。

第三次挥手:等被动方的数据已经传输完毕了,此时被动方发起FIN报文,告知主动方,我数据已经传完啦。

第四次挥手:主动方告知被动方,我知道你数据传完了。

四次挥手的目的,就是终止数据传输,并且确保数据已经发送完毕。

 

四次挥手状态的转换

顺便提下四次挥手状态的转换

主动方

ESTABLISHED---发送FIN给被动方-->FIN_WAIT_1---接收到被动方的FIN对应的ACK-->FIN_WAIT_2---收到被动方端发送过来的FIN消息-->FIIN_WAIT--2MSL之后会进入-->CLOSED

(MSL是TCP报文里面最大生存时间)

 

被动方

ESTABLISHED---接收到主动方的FIN->CLOSED_WAIT--被动方的应用程序关闭发送FIN--> LAST_ACK---收到主动方对于FIN的ACK响应-->FIIN_WAIT---->CLOSED

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值