1. 网络分层结构


-
OSI七层模型:
OSI模型是ISO组织制定的网络通信协议参考模型,包括七个层次:
- 物理层(Physical layer):负责传输比特流,以及定义电缆、网卡等物理特性。
- 数据链路层(Data Link layer):
在两个相邻节点之间传送数据时, 数据链路层将网络层交下来的 IP 数据报组装成帧 ,在两个相邻节点间的链路上传送帧。
- 网络层(Network layer):负责实现网络间的路由和寻址,将数据包发送到目的地。
- 传输层(Transport layer):负责提供端到端的可靠数据传输,包括TCP和UDP协议。
- 会话层(Session layer):负责建立、维护和断开会话连接。
- 表示层(Presentation layer):负责数据的编码、加密、解密和压缩。
- 应用层(Application layer):提供应用程序与网络之间的接口,包括FTP、SMTP、HTTP等协议
-
TCP/IP四层模型:
TCP/IP模型是互联网标准的网络协议参考模型,包括四个层次:
- 网络接口层(Network Interface layer):负责处理物理层和数据链路层,包括ARP、RARP等协议。
- 网络层(Internet layer):负责实现IP协议,处理数据包的路由和寻址。
- 传输层(Transport layer):提供端到端的可靠数据传输,包括TCP和UDP协议。
- 应用层(Application layer):提供应用程序与网络之间的接口,包括FTP、SMTP、HTTP等协议。
-
五层模型:
五层模型是在TCP/IP模型基础上发展起来的,将应用层分为两个层次:
- 物理层(Physical layer):负责传输比特流,以及定义电缆、网卡等物理特性。
- 数据链路层(Data Link layer):
在两个相邻节点之间传送数据时, 数据链路层将网络层交下来的 IP 数据报组装成帧 ,在两个相邻节点间的链路上传送帧。
- 网络层(Internet layer):负责实现IP协议,处理数据包的路由和寻址。
- 传输层(Transport layer):提供端到端的可靠数据传输,包括TCP和UDP协议。
- 应用层(Application layer):提供应用程序与网络之间的接口,包括FTP、SMTP、HTTP等协议。
2. 三次握手
三次握手是指在TCP/IP协议中,建立一个TCP连接时,需要客户端和服务器之间交换三个包(数据段)以确认连接的建立。这三个包分别是SYN(同步序列编号)、SYN-ACK(同步序列编号和确认编号)和ACK(确认)。
具体来说,建立TCP连接的过程如下:
- 客户端向服务器发送一个SYN包,表示请求建立连接,并随机生成一个初始序列号(ISN)。
- 服务器接收到SYN包后,发送一个SYN-ACK包作为响应,其中SYN位被设置为1,ACK位也被设置为1,确认号(ACK)为客户端的ISN+1,同时服务器也随机生成一个ISN。
- 客户端接收到服务器的SYN-ACK包后,发送一个ACK包,确认收到服务器的响应,并将确认号设置为服务器的ISN+1。
这样,客户端和服务器就完成了连接的建立,可以开始进行数据传输了。
三次握手的目的是确保双方的序列号和确认号都是对方期望的,并且可以防止已经失效的连接请求报文段突然又传送到了服务端,从而导致错误。
3. 两次握手可以吗?
4. 四次挥手
"四次挥手"(Four-way handshake)是指TCP/IP协议中,终止一个已建立的连接的过程。
1当一方希望终止连接时,它会发送一个FIN报文段,表示数据传输完成。
2另一方接收到FIN报文段后,会发送一个ACK报文段,表示已经接收到FIN报文段。
3但是这个时候还不能直接关闭连接,因为还可能有未发送的数据,需要先将这些数据传输完成。当所有数据传输完成后,另一方会发送一个FIN报文段,表示数据传输完成。
4第一方接收到FIN报文段后,会发送一个ACK报文段,表示已经接收到FIN报文段,这个时候才能真正关闭连接。
因此,"四次挥手"指的是一方发送FIN报文段、另一方发送ACK报文段、另一方发送FIN报文段、第一方发送ACK报文段的这个过程。这个过程确保了数据能够完整地传输完成,并且双方都知道对方已经完成了数据传输,可以安全地关闭连接。
5. 第四次挥手为什么要等待2MSL?
在这个过程中,为了保证数据能够完全传输,需要等待一段时间,这段时间被称为 2MSL(Maximum Segment Lifetime),即最长报文段寿命。这是因为在网络中,数据包可能会因为各种原因丢失或延迟到达,如果在一方发送了最后一个 ACK 报文段后立即关闭连接,那么可能会出现对服务器端没有收到这个 ACK 报文段的情况,从而导致连接没有被完全关闭,这被称为“时钟偏移”问题。
为了避免这种问题,TCP 协议规定,在最后一个 ACK 报文段发送出去后,需要等待 2MSL 的时间,以确保在这段时间内,网络中所有可能的延迟报文都能够被接收方接收到。这样,即使存在时钟偏移问题,也能够保证连接能够完全关闭。