ISO七层网络模型(OSI参考模型)是国际标准化组织(ISO)提出的网络通信框架,将网络通信划分为七个逻辑层次,每层提供特定的服务并与相邻层交互。其核心目的是实现不同厂商设备的互操作性,并简化网络通信的设计与故障排查。
(1)OSI七层模型的结构:
功能:负责传输原始比特流,定义电压、接口等物理特性。
关键技术:双绞线、光纤、无线信号(如Wi-Fi)、电压标准(如RS-232)。
设备:中继器(Repeater)、集线器(Hub)。
传输单位:比特(Bit)。
功能:将比特流组织成帧,实现点到点的可靠传输,进行差错检测(如CRC校验)和流量控制。
子层:
MAC子层:管理介质访问(如以太网的MAC地址)。
LLC子层:提供逻辑链路控制,处理帧的同步和错误恢复。
协议:以太网(IEEE 802.3)、PPP、HDLC。
设备:交换机(Switch)、网桥(Bridge)。
传输单位:帧(Frame)。
功能:负责逻辑寻址(如IP地址)和路由选择,将数据包从源主机转发到目标主机。
核心任务:
路由协议(如OSPF、BGP)。
分片与重组(如IPv4的MTU处理)。
协议:IP、ICMP、IGMP。
设备:路由器(Router)、三层交换机。
传输单位:数据包(Packet)。
功能:提供端到端的可靠或不可靠数据传输,管理流量控制和错误恢复。
核心协议:
TCP:面向连接的可靠传输(如HTTP、FTP)。
UDP:无连接的低开销传输(如DNS、VoIP)。
传输单位:数据段(Segment for TCP,Datagram for UDP)。
功能:建立、管理和终止会话(如用户登录),支持对话控制和同步点(如断点续传)。
协议:RPC(远程过程调用)、NetBIOS。
实际应用:数据库连接管理、视频会议的会话控制。
功能:处理数据格式转换、加密/解密、压缩/解压,确保数据在不同系统间的兼容性。
协议:SSL/TLS(加密)、JPEG(图像编码)、ASCII(字符编码)。
实际应用:跨平台文件共享(如PDF格式)、HTTPS的加密传输。
功能:直接为用户提供网络服务,如文件传输、电子邮件、网页浏览。
协议:HTTP、FTP、SMTP、DNS、Telnet。
实际应用:Web浏览器(HTTP)、电子邮件客户端(SMTP/POP3)。
(2)OSI模型的核心价值:
标准化:为不同厂商的设备和协议提供统一的框架,促进互操作性。
模块化设计:各层独立实现功能,便于技术迭代和故障隔离。
简化复杂性:通过分层抽象,降低网络通信的设计和维护难度。
理论指导:为实际网络协议(如TCP/IP)的设计提供参考。
(3)实际应用示例
TCP 面向连接的、可靠的、基于字节流的传输层协议。 提供有序、无丢失、无重复的数据传输。 常用于需要高可靠性的场景,如网页浏览、文件传输、电子邮件等
UDP 无连接的、不可靠的、面向数据报的传输层协议。 不保证数据的有序性、完整性或交付。 常用于对实时性要求高但可容忍部分丢包的场景,如视频流、在线游戏、实时通信等。
详细区别可总结为:
✅一、连接方式不同:
TCP:是面向连接的协议。在通信之前,需要在通信双方之间建立一条连接,就像打电话一样,要先拨号建立连接才能通话。这个连接的建立过程包括三次握手,确保连接的可靠性。连接后,数据传输过程中有确认、重传、排序等机制,保证数据的准确无误传输。
UDP:是无连接的协议。通信双方不需要事先建立连接,就像发广播一样,直接将数据发送出去,不管对方是否准备好接收。这种方式传输速度快,但可靠性相对低。
✅二、可靠性不同
TCP:具有高度可靠性。通过序列号、确认应答、超时重传等机制来确保数据的准确传输。如果发送方发送的数据没有被接收方正确接收,发送方会在一定时间后重新发送数据,直到接收方确认收到为止。此外,TCP 还会对数据进行排序,确保接收方接收到的数据顺序与发送方发送的顺序一致。
支持流量控制(滑动窗口)和拥塞控制,避免网络过载。
UDP:可靠性较低。它不提供确认、重传等机制,数据发送后无法确定对方是否收到,也不保证数据的顺序。因此,对数据准确性要求不高,但对速度要求较高的场景下,如实时视频、音频传输等,UDP 更为适用。
✅三、传输效率不同
TCP:传输效率相对较低;TCP由于其连接建立和维护的开销以及可靠性机制,传输效率相对较低。在数据传输过程中,需要进行确认、重传等,这会增加一定的延迟。
UDP:传输效率高。不需要建立连接,也没有复杂的可靠性机制,所以数据可以快速地发送出去。在一些对实时性要求很高的应用中,如在线游戏、实时视频会议等,它的高效性可以满足应用的需求。
✅四、报文格式不同
UDP:报文头只有 8 个字节,非常简洁。包含源端口号、目的端口号、长度和校验等。由于报文头短,在传输数据时的额外开销小。
五、数据传输方式
✅六、应用场景不同
TCP:适用于对数据准确性要求高的场景,如文件传输、电子邮件、网页浏览等。在这些应用中,数据的完整性和正确性至关重要,即使传输速度稍慢一些也可以接受。
UDP:适用于对实时性要求高、对数据准确性要求相对较低的场景,如实时视频、音频传输、在线游戏等。在这些应用中,快速的数据传输和低延迟比数据的准确性更为重要。
总结:
设计一个新的TCP协议需要在保留其核心优势的基础上,针对现有问题进行优化,并适应现代网络环境的新需求。以下是基于现有TCP特性和当前网络趋势的设计思路:
1. 核心目标:
2. 连接管理优化:
2.1 快速连接建立
客户端 → 服务端
(携带加密参数)→ 直接发送数据(无需等待SYN-ACK)。2.2 智能连接终止
TIME_WAIT
缩短为1MSL)。3. 可靠性增强
3.1 动态确认机制
3.2 智能重传策略
4. 流量控制与拥塞控制
4.1 滑动窗口改进
4.2 拥塞控制算法
4.3 多路径支持(MPTCP)
5. 安全性增强
5.1 内置加密
5.2 抗DDoS攻击
6. 适应新兴场景
6.1 低功耗设备优化
6.2 云原生支持
7. 协议扩展性
7.1 可扩展头部设计
7.2 向后兼容性
8. 实际应用示例
9. 验证与测试
总结:
新设计的TCP协议需在可靠性、效率、安全性和扩展性之间取得平衡。通过引入AI驱动的动态策略、多路径传输、内置加密等技术,可以更好地适应现代网络需求。同时,需通过严格测试验证其在实际环境中的表现,并确保与现有生态的兼容性。
(1)三次握手:
第一次握手:
客户端向服务器发出连接请求报文,这时报文首部中的同部位SYN=1,同时随机生成初始序列号 seq=x,此时,TCP客户端进程进入了 SYN-SENT(同步已发送状态)状态。TCP规定,SYN报文段(SYN=1的报文段)不能携带数据,但需要消耗掉一个序号。这个三次握手中的开始。表示客户端想要和服务端建立连接。
第二次握手:
TCP服务器收到请求报文后,如果同意连接,则发出确认报文。确认报文中应该 ACK=1,SYN=1,确认号是ack=x+1,同时也要为自己随机初始化一个序列号 seq=y,此时,TCP服务器进程进入了SYN-RCVD(同步收到)状态。这个报文也不能携带数据,但是同样要消耗一个序号。这个报文带有SYN(建立连接)和ACK(确认)标志,询问客户端是否准备好。
第三次握手:
TCP客户进程收到确认后,还要向服务器给出确认。确认报文的ACK=1,ack=y+1,此时,TCP连接建立,客户端进入ESTABLISHED(已建立连接)状态。
TCP规定,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号。这里客户端表示我已经准备好。
三次握手完成之后,TCP连接就正式建立起来了,双方可以开始进行数据的可靠传输。三次握手的目的是确保双方的初始序号和确认号的同步,并验证双方的可达性。通过这个过程,TCP可以建立一个可靠的双向通信通道,在后续的数据传输中保证数据的可靠性和顺序性。
(2)四次挥手:
第一次挥手:
TCP发送一个FIN(结束),用来关闭客户到服务端的连接。
客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),
此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
第二次挥手:
服务端收到这个FIN,他发回一个ACK(确认),确认收到序号为收到序号+1,和SYN一样,一个FIN将占用一个序号。
服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。
TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。
这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
第三次挥手:
服务端发送一个FIN(结束)到客户端,服务端关闭客户端的连接。
服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据
假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
第四次挥手:
客户端发送ACK(确认)报文确认,并将确认的序号+1,这样关闭完成。
客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。
注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。
(3)为什么一定要进行三次握手?
①确认双方的收发能力;
第一次握手,客户端发送请求,服务端能收到,表明服务端接收能力正常;第二次握手,服务端回应,客户端能收到,表明客户端接收和服务端发送能力正常;第三次握手,客户端再次回应,服务端能收到,表明服务端接收和客户端发送能力正常。通过三次握手,能够全面确认双方的发送和接收能力都没有问题。例如,如果只有两次握手,客户端发送请求后服务端回应,此时服务端只能确认自己的接收和发送以及客户端的发送能力正常,但无法确定客户端是否能成功接收服务端的回应,也就不能确认客户端的接收能力。
②防止已失效的连接请求报文突然传送到服务端;
网络中可能存在延迟的数据包。如果采用两次握手,服务端收到一个失效的连接请求后立即建立连接,可能会造成错误。而三次握手时,客户端再次确认,服务端就可以判断这个请求是否是有效的。假设一种情况,客户端发送的连接请求在网络中滞留,客户端超时后重新发送请求并完成连接。若此时之前滞留的请求到达服务端,服务端会误以为是新的连接请求并建立连接。但由于客户端不会响应,就会造成服务端资源的浪费。通过三次握手可以避免这种情况。
③同步初始序列号;
三次握手可以让双方协商并确定初始序列号,为后续按序传输数据做准备。
一是为了保证客户端发送的最后一个ACK报文段能够到达服务器端,确保服务端能正常进入CLOSED状态。服务端在 1MSL 内没有收到客户端发出的 ACK 确认报文,就会再次向客户端发出 FIN 报文。
二是为了避免新旧连接混淆。清除旧连接的残留数据,防止其干扰新连接。由于网络滞留,客户端可能发送了多次请求建立连接的请求,经过时间2MSL,就可以使本链接持续时间内所产生的所有报文段都从网络中消失,这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。
滑动窗口的核心目标是保护接收方不被淹没,即根据接收方的处理能力动态调整发送方的数据发送速率。
拥塞避免的核心目标是保护网络不被过载,通过动态调整发送速率,避免网络拥塞导致的丢包和延迟。
OSI模型 | TCP/IP模型 |
---|---|
七层(物理层→应用层) | 四层(网络接口层→应用层) |
理论化框架,侧重概念分层 | 实用模型,直接指导协议实现 |
包含独立的会话层、表示层 | 会话层、表示层功能被合并到应用层 |
早期主要用于标准化,实际应用较少 | 广泛应用于现代互联网(如IP、TCP、HTTP) |