【网络编程】协议和分层
1. 什么是协议?
- 协议(Protocol)是一组规则、约定或标准,它们定义了计算机网络中不同设备或程序之间交换数据的方式。这些规则确保了数据能够在网络中以一致和可预测的方式被发送、接收和解释。
- 生活中的各种公认的规则都可以被看做是一种协议,例如:红绿灯信号、信件邮递、莫斯密码等待。
- 对于同台设备上的进程间通信,有如管道、消息队列、共享内存、信号等方式,而对于不同设备上的进程间通信,就需要网络通信,由于设备是多样性的,所以要兼容多种多样的设备,就协商出了各种通用的网络协议。通过这些协议来保障数据的有效传输。
- 简单来说,在网络环境中,要组织数据,第一步就要确定数据交换的协议。然后我们从A主机按照敲定的协议组织数据,然后将组织好的数据传送给主机B,然后B主机按照同样的协议解析数据。从而完成AB主机之间的数据交换。
- 在网络编程开发中,经常使用到的协议如下:TCP/IP、UDP、HTTP、SSL、FTP 等等
2. 两种分层体系模型
OSI(Open Systems Interconnection Reference Model,开放系统互联基本参考模型),又称七层网络模型。
分层有什么好处?
- 分层隔离
- 灵活性好
- 易于实现和维护
- 促进标准化工作
七层模型和五层模型
层级 | 层名 | 作用 | 主要功能 |
---|---|---|---|
第7层 | 应用层 | 提供网络服务和应用协议,与用户直接交互。 | - 网络服务(如HTTP、FTP、SMTP) - 应用协议 - 用户接口 |
第6层 | 表示层 | 负责数据格式化和转换,确保不同系统间数据能正确解释。 | - 数据转换 - 数据加密 - 数据压缩 |
第5层 | 会话层 | 管理会话的建立、维护和终止,提供同步与恢复功能。 | - 会话管理 - 同步 - 对话控制 |
第4层 | 传输层 | 提供端到端的可靠数据传输,确保数据完整性。 | - 端口管理 - 流量控制 - 错误校正(如TCP) - 分段与重组 |
第3层 | 网络层 | 负责路由选择和网络间的通信,确保数据包到达目的地。 | - 路由选择 - 逻辑地址(IP地址) - 分段与重组 |
第2层 | 数据链路层 | 提供可靠的节点间数据传输,处理错误检测与纠正。 | - 帧同步 - 流量控制 - 错误检测与纠正 - MAC地址 |
第1层 | 物理层 | 定义物理和电气特性,传输比特流。 | - 比特流传输 - 传输介质(如铜线、光纤) - 物理接口(如RJ45) |
3. 数据组织和传输
![[20190627004118.webp]]
当一段数据data从A主机传输到B主机时,中间的过程涉及多个步骤和协议层,这些步骤共同确保了数据能够准确、可靠地传输。
以下是数据从A主机到B主机传输的主要过程:
3.1. 应用层处理
- 数据封装:在A主机的应用层,数据data首先被封装成应用层协议可以理解的格式,比如HTTP请求中的消息体。
- 发起请求:应用层软件(如Web浏览器、FTP客户端等)通过调用操作系统提供的接口,向传输层发起数据传输请求。
3.2. 传输层处理
- 选择协议:根据应用需求选择合适的传输层协议,如TCP(面向连接的可靠传输)或UDP(无连接的不可靠传输)。对于大多数需要确保数据完整性和顺序的传输,TCP是更常见的选择。
- 建立连接(TCP):如果使用TCP协议,A主机和B主机之间会首先建立一条TCP连接。这涉及三次握手过程,以确保双方都已准备好进行数据传输。
- 数据分段与封装:TCP将应用层数据data分割成多个较小的段(segment),并为每个段添加TCP头部信息,包括序列号、确认号、窗口大小等,以便实现可靠传输。
3.3. 网络层处理
- IP封装:在网络层,TCP段被封装成IP数据报(datagram),并添加IP头部信息,包括源IP地址、目的IP地址、生存时间(TTL)等。
- 路由选择:网络层根据IP地址和路由表信息,决定数据报从A主机到B主机的最佳路径。数据报可能经过一个或多个路由器进行转发。
3.4. 数据链路层处理
- 帧封装:在数据链路层,IP数据报被封装成帧(frame),并添加帧头部和尾部信息,包括源MAC地址、目的MAC地址、帧类型等。
- 物理传输:帧通过物理介质(如以太网电缆、光纤等)从A主机的网络接口传输到网络中的第一个路由器或交换机。
3.5. 传输过程中的处理
- 路由转发:在传输过程中,每个路由器或交换机都会检查帧的目的MAC地址,并决定是否需要转发该帧。如果需要转发,路由器会根据路由表信息更新帧的MAC地址,并通过适当的接口将帧发送到下一个网络段。
- 错误检测与纠正:在数据链路层和网络层,都会使用各种技术(如CRC校验)来检测传输过程中可能出现的错误。如果发现错误,可能会请求重发或丢弃错误的数据。
3.6. 到达B主机
- 数据接收:当数据帧到达B主机的网络接口时,它被接收并逐层向上传递。
- 解封装与重组:在数据链路层和网络层,帧和IP数据报被解封装,还原出原始的TCP段。在传输层,TCP段被重新组合成原始的应用层数据data。
- 应用层处理:最后,应用层软件(如Web服务器、FTP服务器等)接收并处理数据data
3.7. 传输结束
- 关闭连接(TCP):如果使用TCP协议,数据传输完成后,A主机和B主机之间会进行四次挥手过程,以优雅地关闭TCP连接。
4. 传输层的两个重要协议
在传输层中有两个重要的协议。TCP、UDP 这是网络编程中的重点协议,是我们后续篇章中要重点学习。