? ? ? ? 学习《掌芝士》老师,以及自己的搜索官网、理解带来的笔记,不知道有没有人跟我有一样的疑问在看了大量的文章都不知道ack包,fin包,syn包是干嘛的?我搜了一些概念以及总结道一起是不是更容易理解一些方便后续面试使用。
? ? ? ? ACK包:
????????????????ACK(Acknowledgement 确认):此标志位用于确认接收方已经成功接收到了发送方的数据。一旦接收方收到数据,它将发送一个带有ACK标志的确认报文,以通知发送方它已经成功接收了数据。ACK标志通常与确认号一起使用,确认号指明了下一个期望接收的字节的序号。主要是为了回复确认的报文。
? ? ? ? FIN包:
????????????????FIN(Finish 结束):此标志位用于表示发送方已经完成了数据的发送,请求关闭TCP连接。当发送方发送完所有数据后,它将发送一个带有FIN标志的报文,以通知接收方它已经完成了数据的发送。接收方在收到FIN报文后,会发送一个带有ACK标志的确认报文,然后进入关闭等待状态,等待所有的数据都被接收和确认。
? ? ? ? SYN包:? ? ? ??
????????????????SYN(Synchronize 同步):此标志位用于建立TCP连接。在TCP连接建立的过程中,发送方会发送一个带有SYN标志的报文,以请求与接收方建立连接。接收方在收到SYN报文后,会发送一个带有SYN和ACK标志的确认报文,以确认连接请求,并同时发送自己的SYN报文。这个过程被称为三次握手,用于在发送方和接收方之间建立可靠的连接。
????????TCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义,概念可以不看,其实本质就是建立链接的一种通信协议。
? ? ? ? 主要有三个过程
? ? ? ? 1、三次握手:主要是为了建立连接
? ? ? ? 2、传输确认
? ? ? ? 3、四次挥手:主要是为了关闭连接
????????
????????主要是为了证明服务端的接收能力和服务端的发送能力,以及客户端的发送能力和客户端的接收能力是否正常。
? ? ? ? 第一次握手是通过客户端发送请求到服务端,是为了证明了客户端的发送能力,和服务端的接收能力是正常的,但是无法证明客户客户端的接收能力和服务端的发送能力正常的。
? ? ? ? 第二次握手是通过服务端发送给客户端,证明客户端的接收能力正常,服务端的发送能力是正常的。但是对于服务端来说不知道自己的发送能力是否正常,所以需要客户端告诉服务端不要在发送报文了,我这儿可以正常接收到你的数据。
? ? ? ? 第三次握手是通过客户端发送给服务端,告诉服务端你的发送能力正常不要在发送报文了。即证明了服务端的发送能力是正常的。
? ? ? ? 如图:
????????第一次挥手:客户端向服务端发起断开连接请求,此时客户端向服务端发送FIN包,客户端进入到终止状态1的阶段。
? ? ? ? 第二次挥手:服务端向客户端回复ack包表示自己进入了关闭等待的一个状态,而客户端进入终止等待2状态。
? ? ? ? 第三次挥手:服务端向客户端发送fin包,并让服务端进入最后确认的状态。
? ? ? ? 第四次挥手:客户端向服务端回复ack包,并进入等待状态,等待超时时间后,进入关闭状态