应用层入门(二)

62 阅读3分钟

在前面的文章中,我们简单叙述了应用层网络通信程序设计所关注的三个方面(目标主机定位,传输方式选择,收发数据的解析),并简单叙述了通信的模型。

而在这篇文章中,我们将就传输方式选择进行简单的讨论,即第二个方面的内容。

数据传输方式所需要考虑到的方面

在《计算机网络》中,给出了四个方面(可靠性,吞吐量,时限,安全性)作为参考,而在我本人的思考中,真正重要的,是如下的两个方面。

数据传输的可靠性

数据传输的可靠性就是一条:我们的数据能否保证以完整的形式到达目标主机?

从硬件的角度上看,绝对保证数据完整传输是不可能的,因为在数据传输(实际上就是电子信号传输)的过程中,细微的数据损坏在所难免。

但是相对的提升可靠性,在大部分情况下确保顺利到达,硬件还是可以提供对应保障的。

而从软件的角度上面看也是如此,我们可以通过在数据上“花一番心思",从侧面提升数据传输地可靠性。

数据传输的效率

吞吐率描述了数据传输的效率,正如你所知道的那样,数据传输的效率越高,我们开展工作的效率也更高。

这一方面的看待思路是非常简单的,吞吐率越高越好。

两种传输协议的选择:TCP & UDP

在做了前面的简单铺垫之后,我们可以正式的介绍这两种数据传输协议(值得注意的地方在于,他们是运输层协议,但是与我们应用层的程序设计息息相关)

TCP 协议

这是一种非常注重数据可靠性的协议,它面向连接(即“主机对主机"),依托冗余信息(通过一些额外的信息,让数据在出现损坏时可以恢复),三次握手(在正式通信前,两台主机先传输一些测试数据包进行可靠性确认)等机制对数据传输的可靠性进行提升。

凡事有利有弊, 尽管TCP 设计的许多额外机制让网络传输的可靠性得到了强有力的提升,但额外信息也意味着我们网络传输的效率降低,因为有更多的网络资源集中到了其它的方面。

因此 TCP 适合于那些对实时性要求不是很高,但是非常注重数据完整的应用(如文件传输)。

UDP 协议

UDP 是一种精简的协议,因为它注重的并不是可靠性,而是网络传输的性能,它的行事风格就是,将我们的信息“简单打包"(非必要的信息,非必要的流程通通被省略)后直接传递到目标主机。

这往往意味着 UDP 的数据可能并不可靠,有一些错误,这决定了 UDP 协议并不适用于对于数据完整性要求较高的应用,但由此换来的性能提升,让 UDP 协议非常适合于对实时性要求较高的应用,如“视频对话"。

小结

在本篇文章中,我们对 UDP & TCP 协议进行了简单的介绍,同时对于他们的选择进行了简单的讲解。

至于在实际的开发中选择哪一种协议,我个人的答案是“见仁见智",即从实际需要中对他们进行选择。