一、网络协议的分层
最近正在上网络协议分析的课程,课程已经接近尾声,因此做一些总结性的记录。
为什么要进行分层呢
我们思考这样一个问题——我打算实现一个QQ,我需要解决哪些问题呢?
- 要想登录QQ,我必须填写账号和密码,然后由服务器对我进行身份的认证,只有认证成功了,我才能成功登陆。那么我的账号和密码是怎么发送给服务器的呢?所谓“当局者迷”,我的电脑是怎么在这世界上这么多的服务器中准确的找到腾讯QQ的服务器的呢?难道它也是像我们平常找人一样在门口大喊一声:“谁是QQ的服务器吗”?
- 假设QQ服务器现在已经知道了我要登录,然后他发送给我一个消息告诉我说他就是QQ的服务器,那么我可以相信他吗?会不会是其他的捣蛋鬼冒充QQ服务器给我发的消息呢?
- 假设前面的问题我们都解决了,当我跟我的好朋友私聊的时候应该怎么实现呢?群聊的时候呢?难道是同样的实现方法吗?
- 再假设前面所有的问题都解决了,我们知道了物理的链路上,数据肯定是以01串的形式传递的,那么服务器和我的电脑是怎么把这些人类根本看不懂的01串识别成好看的图片识别成美妙的音乐的?
……
这样的问题还可以提出非常多,他们有的涉及底层的硬件,有的涉及非常具体的代码实现;有的只涉及我本机上的实现,有的又涉及到整个互联网尺度的实现?怎么设计?倘若程序员每编写一个网络应用程序都需要像这样思考,那么他一生估计都写不了几个网络应用程序,因为这实在是太繁琐了。解决的办法是什么呢,那就是分层。我们把一个巨大的、复杂的问题,划