什么是TCP网络分层
应⽤层
:应用层是网络协议栈中的最顶层,主要负责应用程序之间的通信。其中一种常见的应用层协议是HTTP协议,它定义了应用程序之间如何传递报文。传输层
:传输层是为两台主机之间的应用进程提供端到端的逻辑通信的层级。其中一种常见的传输层协议是TCP协议,它负责可靠的数据传输⽹络互连层
:网络互连层负责主机之间的通信,它将传输层产生的数据包封装成分组数据包,并通过路由选择将其发送到目标主机。IP协议是网络互连层的主要协议,TCP和UDP协议都使用IP协议作为网络层协议。该层的主要作用是为数据包添加源地址和目标地址,并将数据包传送到目标地址。网络访问层
:网络访问层,也称为网络接口层,负责主机连接到物理网络所需的硬件和相关协议。以太网、Wi-Fi和蓝牙工作在这一层。网络访问层提供了主机与物理网络之间的接口。
三次握手
TCP的三次握手是为了建立可靠的连接,确保通信双方都能够正常发送和接收数据。下面是三次握手的过程:
- 第一次握手:客户端向服务器发送一个带有
SYM
标志的数据包,表示请求建立连接,客户端将随机生成一个初始序列号(ISN)并将其放入SYN
字段中 - 第二次握手:服务器段接收到客户端的请求后,会发送一个带有
SYN
和ACK
标志的数据包作为响应,服务器将确定序列号(ACK)设置为客户端的ISN加一,并生成自己的初始序列号 - 第三次握手:客户端收到服务器的响应后,会发送一个带有
ACK
标志的数据包作为确认。客户端将确认序列号设置为服务器的ISN加一
如果只有两次握手,那么在某些情况下可能会导致不可靠的连接建立。例如,客户端发送了一个建立连接的请求,但由于网络延迟或其他原因,该请求在传输过程中被延迟到达服务器。服务器此时会误认为客户端要建立连接,于是发送确认响应。然而,客户端并未发送过请求,因此不会回复确认。这样就会导致服务器一直等待客户端的回复,浪费资源。
四次挥手
TCP的四次挥手是为了结束已建立的连接,确保双方都能正确地关闭连接并释放资源。下面是四次挥手的过程
- 第一次挥手:客户端发送一个带有
FIN
(结束)标志的数据包,表示自己已经没有数据要发送了,请求关闭连接 - 第二次挥手:服务器接收到客户端的结束请求后,会发送一个带有
ACK
(确认)标志的数据包作为响应,表示已收到客户端的结束请求 - 第三次挥手:服务器发送一个带有
FIN
标志的数据包,表示自己也没有数据要发送了,请求关闭连接 - 第四次挥手:客户端接收到服务器的结束请求后,会发送一个带有
ACK
标志的数据包作为确认,表示已收到服务器的结束请求
假设只有三次挥手,当客户端发送结束请求后,服务器收到后会发送确认,表示已收到客户端的结束请求。但是在此过程中,服务器可能还有未发送完的数据,如果直接关闭连接,那么这些数据就会丢失。因此,引入第三次挥手,服务器在发送结束请求前,先发送所有未发送完的数据,并等待客户端的确认。客户端接收到服务器的结束请求后,会确认并处理完未接收的数据,然后发送确认,表示自己已准备好关闭连接。