数据通信是很复杂的,很难在一个协议中完成所有功能。因此在制定协议时经常采用的思路是将复杂的数据通信功能由若干协议分别完成,然后将这些协议按照一定的方式组织起来。最典型的是采用分层的方式来组织协议,每一层都有一套清晰明确的功能和任务,这些功能和任务相对独立,这样就可以把复杂的网络问题分解成一层一层简单的模块;每一层都对上一层通过接口提供一定的服务,高层不需要了解低层的工作机制、使用设备和技术细节,只需知道低层通过接口提供哪些服务。
目前,最典型的计算机网络体系结构有 OSI 参考模型和 TCP/IP 参考模型。
OSI 参考模型:
OSI 参考模型将整个网络的通信功能分为七层,自下而上分别是物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。OSI 参考模型是法律标准。
TCP/IP 参考模型:
TCP/IP 参考模型包括四层,自下而上分别是网络接口层、网络层、传输层、应用层。现实生活中的网联网世界用的就是 TCP/IP 模型。
TCP/IP 参考模型对 OSI 参考模型的分层进行了合并,将应用层、表示层、会话层合并为了应用层,将数据链路层、物理层合并为了网络接口层。
TCP、UDP 协议属于传输层。
超文本传输协议 HTTP、文件传输协议 FTP、域名系统 DNS 属于应用层。
TCP 协议的三大阶段:
- 建立连接(三次握手):建立连接的阶段通信双方会传输三个 TCP 段,称为三次握手。
- 握手 1:客户端给服务器端发送 SYN 段,表示客户端向服务器端请求连接。
- 握手 2:服务器端给客户端发送 TCP 段,这个段既是 SYN 段,也是 ACK 段,表示服务器端确认接受客户端的连接,并且服务器端向客户端请求连接。
- 握手 3:客户端给服务器端发送 ACK 段,表示客户端确认接受服务器端的连接。
- 传输数据:是全双工通信。客户端可以给服务器发送数据,服务器也可以给客户端发送数据。
- 释放连接(四次挥手):释放连接的阶段通信双方会传输四个 TCP 段,称为四次挥手。
- 挥手 1:客户端向服务器端发送 FIN 段,表示客户端向服务器释放连接。
- 挥手2:服务器端向客户端发送 ACK 段,表示服务器端确认释放客户端的连接。此时,客户端无法再给服务器发送数据,只能服务器给客户端发送数据。
- 挥手 3:服务器端向客户端发送 FIN 段,表示服务器端向客户端释放连接。
- 挥手 4:客户端向服务器端发送 ACK 段,表示客户端确认释放服务器端的连接。此时,客户端和服务器端互相就无法再给对方发送数据了,通信结束。
SYN 段:表示这是一个请求连接的报文;ACK 段:表示这是一个确认报文;FIN 段:表示这是一个释放连接的报文。
TCP 协议和 UDP 协议的区别:
- TCP 是有连接的,可靠的。能够确保数据完整正确,但是开销大、实时性差。HTTP、FTP 基于 TCP。
- UDP 是无连接的、不可靠的。数据可能出错丢失,但是速度快、开销小。DNS 基于 UDP。
有连接:发送消息前,要先建立连接,再发送消息;发送完消息后,还需要释放连接。
无连接:发送消息前,不需要先建立连接,直接发送消息;发送完消息后,也就不需要释放连接了。
可靠传输:接收方使用确认机制让发送方知道哪些数据已被正确接收。可靠传输需要基于有连接的方式。
不可靠传输:接收方无论收没收到数据、数据是否正确,都不给发送方返回。