一、OSI七层模型
OSI七层模型是一种网络通信协议的参考模型,它将网络通信协议分为七个层次,每个层次都有自己的功能和协议。这七个层次分别是:
1. 物理层(Physical Layer):负责传输比特流,即0和1的电信号,以及定义物理设备的接口标准和传输介质。
2. 数据链路层(Data Link Layer):负责将比特流组织成帧,进行差错检测和纠正,以及定义物理设备之间的通信规则。
3. 网络层(Network Layer):负责将数据包从源地址传输到目的地址,进行路由选择和拥塞控制,以及定义不同网络之间的通信规则。
4. 传输层(Transport Layer):负责提供端到端的可靠数据传输,进行流量控制和错误恢复,以及定义不同应用程序之间的通信规则。
5. 会话层(Session Layer):负责建立、管理和终止会话,进行数据同步和检查点恢复,以及定义不同应用程序之间的会话规则。
6. 表示层(Presentation Layer):负责数据的格式转换、加密和解密,以及定义不同应用程序之间的数据格式规则。
7. 应用层(Application Layer):负责提供各种应用程序的服务,如电子邮件、文件传输、远程登录等,以及定义不同应用程序之间的通信规则。
二、分层的目的
1. 降低层次之间的关联性,某一层的协议增加或减少不影响其他层协议的工作。
2. 便于标准化的制定。
3. 便于学习和了解计算机层次。
三、数据的封装与解封装
数据的封装与解封装它的顺序我们可以参考 osi七层模型,由上三层产生数据 --第四层 封装(端口号)--第三层封装(ip地址)--第二层封装(mac地址)--并再尾部进行FCS校验
解封装则上述行为倒转过来即可。
上三层产生数据报文,传输层传输数据段,网络层传输数据包,数据链路层传输数据帧,物理层传输比特流。帧是什么呢,我们可以这样理解,视频是一张张图片组成的,那么每一张图片就是一帧。帧为很小段的数据。
四、三次握手和四次挥手
三次握手是TCP协议建立连接的过程,它的目的是确保通信双方都能够正常收发数据。具体来说,三次握手的过程如下:
1. 客户端向服务器发送一个SYN(同步)包,表示客户端请求建立连接,并指定一个初始序列号(ISN)。
2. 服务器收到SYN包后,回复一个SYN+ACK(同步+确认)包,表示服务器已经收到了客户端的请求,并且同意建立连接。服务器也会指定一个初始序列号。
3. 客户端收到服务器的SYN+ACK包后,再回复一个ACK(确认)包,表示客户端已经收到了服务器的确认,并且连接已经建立成功。
这个过程中,第一次握手是客户端向服务器发送SYN包,第二次握手是服务器回复SYN+ACK包,第三次握手是客户端回复ACK包。这样做的目的是为了确保通信双方都能够正常收发数据,避免因为网络延迟等原因导致连接建立失败。
TCP协议中,四次挥手是指在TCP连接的关闭过程中,客户端和服务器端各发送两次FIN和ACK报文,共四次。这是因为TCP连接是全双工的,即客户端和服务器端都可以向对方发送数据。在关闭连接时,需要双方都发送FIN和ACK报文来确认连接的关闭,因此需要四次挥手。具体过程如下:
1. 客户端发送FIN报文,表示要关闭连接。
2. 服务器端收到FIN报文后,发送ACK报文,表示已经收到客户端的关闭请求。
3. 服务器端发送FIN报文,表示服务器端也要关闭连接。
4. 客户端收到服务器端的FIN报文后,发送ACK报文,表示已经收到服务器端的关闭请求,并且连接已经关闭。
这样,四次挥手过程就完成了。四次挥手的过程是为了确保双方都能够安全地关闭连接,避免数据丢失或者重复发送。
五、为什么三次握手是三次,四次挥手是四次
三次握手是TCP协议建立连接的过程,目的是确保双方都能够正常收发数据。
为什么要三次握手,主要原因是为了防止旧的重复连接引起问题。如果握手为两次,那么它只有接受和拒绝,但它并不知道这次请求是否为正确的请求,可能为网络延迟过高时发送的过期请求,如果是三次握手的话,那么客户端收到服务端seq+1的消息后就可以判断是否历史连接,若为历史连接则直接终止。
TCP是面向连接的可靠性协议,那么在建立 TCP 连接时就需要同步初始化一个序列号来保证 TCP 的稳定性。首先客户端向服务端发送一个带有初始序列号的SYN报文。服务端收到后会回复一个ACK应答报文,表示SYN已经被服务端收到。客户端拿到消息后也会给服务端发送一个ACK报文,这时候我们就可以得到一个可靠的初始序列号了,如果不是三次握手的话,我们就无法确认序列号,则就无法得到一个可靠的序列号了。
TCP协议中,四次挥手是指在TCP连接的关闭过程中,客户端和服务器端各发送两次FIN和ACK报文,共四次。
TCP连接是全双工的,因此每个方向都必须单独进行关闭:当一方完成它的数据发送任务后就发送一个FIN来终止这个方向的连接,对端收到后回复一个ACK报文,这样双向就需要四次交互。
四次的目的完全就是为了确保把未传输完的数据传输过去,以免造成丢包问题。