持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情
协议栈设计考虑要素
我们常常会听到这个问题,OSI 为什么要划分为七层?每层划分的依据是什么?如果让你来设计协议栈,你都会考虑哪些点?
下面我们来逐步研究下。
首先发起通信的计算机必须将数据通信的通路进行激活(activate)。所谓“激活”就是要发出一些信令,保证要传送的计算机数据能在这条通路上正确发送和接收。我们可以理解为使我们常说的 TCP 建立连接
接下来我们要告诉网络如何识别接收数据的计算机。对应现实就是在建立连接之前我们创建的套接字,通过套接字,我们记录了接收数据的 IP 和端口号,通过 IP 和端口号我们就可以确定接收数据的计算机了。
然后发起通信的计算机必须查明对方计算机是否已开机,并且与网络连接正常。我们常说的 TCP 三次握手就是建立连接的过程,通过连接建立,我们可以对方是开机的状态,并且能够发送和接收数据
接下来发起通信的计算机中的应用程序必须弄清楚,在对方计算机中的文件管理程序是否已做好接收文件和存储文件的准备工作。这里还是建立连接的过程。
然后我们再来考虑文件的格式若计算机的文件格式不兼容,则至少其中的一台计算机应完成格式转换功能。有 PHP 经验的同学可以知道 CGI,CGI 是标准的数据输入输出格式,如果数据格式不一致,我们还需要对格式进行一下转化
最后我们应该对出现的各种差错和意外事故,如数据传送错误、重复或丢失,网络中某个结点交换机出故障等,应当有可靠的措施保证对方计算机最终能够收到正确的文件。熟悉 TCP 的同学应该知道,TCP 的拥塞控制、超时重传、SYN、FIN、ACK 等信号,能够保证消息的准确发送
我们还可以再举出一些要做的其他工作。由此可见,相互通信的两个计算机系统必须高度协调工作才行,而这种“协调”是相当复杂的。为了设计这样复杂的计算机网络,早在最初的 ARPANET 设计时即提出了分层的方法。“分层”可将庞大而复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。这就是网络协议分层的原因。
参考文档
- 《计算机网络》—— 谢希仁