初学者如何理解网络协议

网络协议是什么?协议分层是怎么回事?什么是协议的实现?

回想当年初识网络协议,被一张网络层次模型图中的“物理层、数据链路层、网络层、传输层……”搞得云里雾里。花了很长时间才搞明白网络协议大概是怎么回事,甚至己经做出了几个网络程序,但仍感觉对网络协议的本质认识还不够清楚。

一直在思考这些问题,突然有一天,我发现我对网络协议的认识已经变得明朗。直到今天,我心血来潮写下这篇文章,希望对初学网络编程的朋友有所帮助。

第一部分

一、网络协议通俗地讲就是网络上两台计算机之间通信所要遵守的共同标准。

这么讲还是不够通俗易懂,所以我们可以打个比方:

有两个人,一个中国人,一个法国人,如下:

                     (用英语交流)

中国人------------------------------------法国人

(讲中文) (讲法语)

[会英语] [会英语]

<英语协议> <英语协议>

这两个人要想交流,必须讲一门双方都懂的语言。如果大家都不会讲对方的民族语言,那么可以选择双方都懂的第三方的语言来交流,比如“讲英语”。那么这时候“英语”实际上就成为一种“网络协议”。

把网络协议比做通用语言只是一种形象比喻,实际上协议本身比自然语言要简单的多,但是却比自然语言更严谨。协议规定了一种交流信息的格式或者说规范,比如:字符“LOVE”表示什么意思,第2个字节表示什么含义等……只要大家都按同样的规范来表达自己的意思,对方就能“听懂”你的意思。

同一种“规范”遵守的人多了,就成为一种事实上的“标准”。比如TCP/IP协议就成为了一种最流行的网络协议。

二、协议的实现

协议本身并不是一种软件,它只是一种通讯标准,但协议最终要由软件来实现。网络协议的实现就是在不同的软件和硬件环境下,执行可运行于该种环境的“协议”翻译程序。这些程序可能在WINDOWS下,也可能在UNIX下,也可能运行于一台个人电脑,也可能运行于一台服务器,也可能在你的手机中,这些程序可能都不一样,但却都会翻译同一种网络协议,比如(TCP/IP)协议。就如上图中的翻译都懂“英语”一样。

实现网络协议,听起来就象是给所有接入网络的设备配备了一个“通用语言翻译器”,这些翻译都懂通用语言“英语”,同时也懂得本国语言,这样就能实现不同国家不同环境的人接入同一个网络并进行交流了。

那么,可否选择“中文”作为网络协议呢?当然可以,但前提是大家都愿意遵守你的标准,都愿意说中文。实际上,“中文”也是一种网络协议,但它只是属于中国人的网络协议。

三、协议的分层

协议分层仅仅是为了技术上的便利所做的人为划分,并非是协议天生必备的。

仍以上图为例,我们不再考虑中国人或是法国人,只考虑协议本身。

我用英语说:“How are you.” 不一定表示“你好!”,我们可以事先约定,这句话表示“再看一遍”的意思。这就象是所谓的江湖“黑话”,或叫“专业术语”。实际上,这时我们自己制定了一个新的通信标准,一个新的“高层协议”己经诞生了。这个协议在“英语”的基础上,再制定自己的通信标准,这种新的通信标准就是基于“英语”这种“底层协议”的“高层协议”,我们可以把这种协议取名为“讲课协议”。

以后你还可以在“讲课协议”之上建立“讲网络通信课程的协议”等更高级的协议。

第二部分

再对比计算机网络:有以IP协议为基础的TCP协议,以TCP协议为基础的HTTP协议,以TCP协议为基础的FTP协议等。这里HTTP和FTP是同一层次的两种不同协议。

如下图:

高层3:HTTP协议、FTP协议 (应用层)

中层2:TCP协议、UDP协议 (网络层

底层1:IP协议 (传输层)

我们通常把上图中的底层1和中层2合在一起称为TCP/IP协议。所以,协议并不一定非要分层,有时候一种协议是几层协议的一个结合,事实上,协议分层并不是必须的。

那么有没有比“英语”更底层的协议呢?当然有。但一般我们没必要把“英语”协议再分层。现在为了讲解的需要,我把“英语”这种协议人为再分一下,英语由“单词”构成,单词不考虑语法问题。“单词”就是比“英语”低一级的协议。“单词”又由“字母”构成,字母不考虑组合成词的问题,所以26个英文“字母”就成为比“单词”更低一级的协议。

现实意义:中国人和法国人一般都认识英文字母,法文字母跟英文字母有很多都相同,但我们从小认字母当拼音,人家认来组单词。所以可以说,在字母这一层协议上,中国人和法国人是可以交流的,换个说法:中国人写的字母法国人也认识。但是,这没有太多实际意义。所以才需要更高一级的“英语”协议来支持。

同样道理,上图中“底层1:IP协议”以下还有更底层的协议。“高层3:HTTP”协议以上还可以有更高层的应用协议。我们可以任意一层协议为基础制订自己的更高一层的协议。

比如:我们可以以字母这一层为基础,重新创立一种新的语言。也可以以IP协议为基础,制定自己的传输协议。

不同的设备可以安装不同的协议,识别不同层次的协议。

比如:

1、可以安排一个人,只要能识别字母“a、b、c……”就成。这是最低层协议的实现。

2、再安排一个人,能够识别字母组成的单词,并删除错误单词。这就是第二层协议的实现。

3、再安排一个人,能够识别单词组成的句子,并理解句子。这就是第三层协议

4、再安排一个人,这个人能够翻译英语“黑话”,这个就最第四层协议了

5、还可以安排更高层的人,能够把黑话中隐藏的更专业的意思解读出来

根据需要,你可以随时发明自己的协议,如果这种协议高效易用,被大众所认同,那就成为了一种流行标准。

说到底:协议是人规定的一套通信规范,所以任何人都可以规定自己的协议,只要通信的双方能够共同遵守,你就实现了你的协议。

事实上协议本身是可以无所谓分层的概念,分层只是为了方便人们处理复杂的协议而人为做出的划分。

所以,初学者请不要网络协议深遂的面孔吓倒,更不要被网络分层的假相所迷惑。你只要认清了网络协议的本质,大胆得去实践,你完全可以创造出属于你自己的网络协议。

旧的协议日益成熟,新的协议层出不穷,正是那些勇于创新的开拓者们创新了日新月异的网络世界。向发明网络协议的创新者们致敬!

以我自己的经历:网络通信技术初学者接解到的第一本网络教程,应该首先避免过多技术层次的东西,少用专业术语,最好能通过接近生活实际的例子,将网络技术的基本原理解释清楚。我认为初学者越早搞懂网络协议的本质,学习后续网络课程就会越容易。

后记:

从事软件开发多年,最早接触网络协议是在20年前,那个时候没有老师教,完全靠啃教材自学。当然,教材的作者就是我的老师。可是这些教材无一例外上来就是专业术语、技术性太强。什么协议标准,协议分层,什么数据结构,让初学计算机没几年的我云里雾里。花了很长时间也没把网络协议这东西搞清楚,网络编程于是成为令我感到“难”的一件事情。

事实上,大概很多人都认为网络编程是很“难”的。的确,当我弄清楚网络协议和网络编程是怎么回事以后,反而更加深刻得理解了网络编程的难度。不过回过头来看一看,如果当年能有遇到一本深入浅出的教材帮我很快理解网络协议的本质,如果这本书能让我感觉网络协议很简单,那么我学习的速度和效率将会高得多。

以上只是自己一些个人经验,跟大家交流,有不足之处,欢迎批评指正!谢谢。

参考:http://blog.csdn.net/fyl_077/article/details/17557853
https://www.cnblogs.com/tsingke/p/8604871.html

初学者如何理解网络协议相关推荐

  1. 初学者如何理解网络协议?

    初学者如何理解网络协议 网络协议是什么?协议分层是怎么回事?什么是协议的实现? 回想当年初识网络协议,被一张网络层次模型图中的"物理层.数据链路层.网络层.传输层--"搞得云里雾里 ...

  2. 计算机网络资料篇(二)——快速理解网络协议

    <网络编程懒人入门(一):快速理解网络通信协议(上篇)> <网络编程懒人入门(二):快速理解网络通信协议(下篇)> 一:五层模型 物理层.数据链路层.网络层.传输层.应用层 1 ...

  3. 2 理解网络协议的工作模式

    网络为什么要分层? 网络为什么要分层?因为,是个复杂的程序都要分层. 理解计算机网络中的概念,一个很好的角度是,想象网络包就是一段 Buffer,或者一块内存,是有格式的.同时,想象自己是一个处理网络 ...

  4. 网络协议枯燥难学?这个胖子要说No!

    参加过大厂面试的小伙伴应该都清楚,无论是去面试国内的互联网大厂还是硅谷的IT公司,面试的时候多多少少都会问一些网络协议的知识.例如: 1. TCP协议和UDP协议有什么区别? 2. HTTPS协议的底 ...

  5. 网络协议必会知识点:互联网网络分层

    文章出自 |<趣谈网络协议> 长时间从事计算机网络相关的工作,我发现,计算机网络有一个显著的特点,就是这是一个不仅需要背诵,而且特别需要将原理烂熟于胸的学科.很多问题看起来懂了,但是就怕往 ...

  6. 网络协议,我明明学过的呀?

    十个人程序员里面,有十个都会说自己学过网络协议,九个人都会说自己懂网络协议.但是面试的时候,问几个问题,能回答的可能只有两三个.不信?来,我问你几道. 1.TCP协议跟UDP协议有什么区别? 你说这个 ...

  7. 网络协议,没有想象中那么难

    十个人程序员里面,有十个都会说自己学过网络协议,九个人都会说自己懂网络协议.但是面试的时候,问几个问题,能回答的可能只有两三个.不信?来,我问你几道. 1.TCP 协议跟 UDP 协议有什么区别? 你 ...

  8. 华为18级工程师三年心血终成趣谈网络协议文档(附大牛讲解)

    华为18级工程师三年心血终成趣谈网络协议文档(附大牛讲解) 程序员高级码农II 2020-09-25 07:23:00 前言 虽然在大学的时候大家都学过网络协议 ,但是肯定感觉网络协议的知识点非常多 ...

  9. 难以置信,网易首席架构师竟用了 500 页笔记,把网络协议给趣谈了

    最近业务发展迅速,团队非常缺人.我作为入职不久的新人被老大拉去做面试官(哎,长得帅就很多烦恼). 这段时间也面试了不少同学,10 位有 9 位都说自己懂网络协议.但真正面试的时候,能回答出相关问题的, ...

最新文章

  1. 《数据科学家养成手册》--第十一章算法学2---(非监督,监督贝叶斯概率以及损失函数)
  2. 一文帮你理解什么是深层置信网络(DBN)
  3. 书评 —— 深入网站开发和运营
  4. 北航计算机学硕还是专硕,2018北航计算机专硕总分第一录取经验
  5. 【Linux网络编程】无连接和面向连接协议
  6. USACO 06JAN 牛的舞会 洛谷2863
  7. python字符串命名_python-字符串及其常用方法
  8. 18个C/C++的基本知识点,带好小本子记录一下
  9. 用HTML5 Canvas为网页添加动态波浪背景
  10. SpringMvc 400 Bad Request解决方法
  11. 操作指南|JumpServer用户权限体系的使用实践
  12. java 16进制转字符串 乱码_Java中16进制与字符串之间的相互转换
  13. natApp进行内网穿透-外网访问前端本地运行项目
  14. 毕业设计 嵌入式 指纹识别考勤系统设计与实现
  15. 华为云买网站买另外服务器,华为云网站在买其他服务器
  16. 女生一般喜欢什么礼物、2022实用送礼清单
  17. 阿里2019实习生面经
  18. 给定字符串 s 和 t ,判断 s 是否为 t 的子序列
  19. 支付FM免签通道常见问题—监控APP找不到对应金额的收款人订单
  20. 开源代码01:眼力大挑战

热门文章

  1. 无线耳机哪种佩戴方式舒服?无需入耳佩戴的骨传导无线耳机
  2. 基于TensorFlow卷积神经网络的手写体数字识别
  3. matlab读取.mb15格式数据,两分钟搞定Python读取matlab的.mat数据
  4. robot framework 自定义关键字详细过程及debug。
  5. batocera_Batocera新手上路手冊(二):執行遊戲與基本操作說明
  6. 龙泉正规的计算机学校有哪些,龙泉正规高铁乘务学校排名榜
  7. 芯禾科技EM仿真软件IRIS 通过GLOBALFOUNDRIES 22FDX工艺认证
  8. STM32 Proteus仿真心率计步智能手表带闹钟DHT11温湿度显示DS1302-0020
  9. 史上前端面试题(HTML)
  10. uniapp获取手机号(详细教程附代码)