协议学习之 vamei博客系列 01 网络协议概观

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明。谢谢!

信号的传输总要符合一定的协议(protocol)。比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了“敌人入侵”这一抽象信号。这样一个“狼烟=敌人入侵”就是一个简单的协议。协议可以更复杂,比如摩尔斯码(Morse Code),使用短信号和长信号的组合,来代表不同的英文字母。比如SOS(***---***,  *代表短信号,-代表长信号)。这样"***= S, ---=O"就是摩尔斯码规定的协议。然而更进一层,人们会知道SOS是求助信息,原因是我们有“SOS=求救”这个协议存在在脑海里。所以"***---***=SOS=求救"是一个由两个协议组成的分层通信系统。

使用Morse Code的电报机

计算机之间的通信也要遵循不同层次的协议,来实现计算机的通信。

物理层(physical layer)

所谓的物理层,是指光纤、电缆或者电磁波等真 实存在的物理媒介。这些媒介可以传送物理信号,比如亮度、电压或者振幅。对于数字应用来说,我们只需要两种物理信号来分别表示0和1,比如用高电压表示 1,低电压表示0,就构成了简单的物理层协议。针对某种媒介,电脑可以有相应的接口,用来接收物理信号,并解读成为0/1序列。

连接层(link layer)

在连接层,信息以帧(frame)为 单位传输。所谓的帧,是一段有限的0/1序列。连接层协议的功能就是识别0/1序列中所包含的帧。比如说,根据一定的0/1组合识别出帧的起始和结束。在 帧中,有收信地址(Source, SRC)和送信地址(Destination, DST),还有能够探测错误的校验序列(Frame Check Sequence)。当然,帧中最重要的最重要是所要传输的数据 (payload)。这些数据往往符合更高层协议,供网络的上层使用。与数据相配套,帧中也有数据的类型(Type)信息。连接层协议不关心数据中到底包含什么。帧就像是一个信封,把数据包裹起来。

以太网(Ethernet)和WiFi是现在最常见的连接层协议。通过连接层协议,我们可以建立局域的以太网或者WiFi局域网,并让位于同一局域网络中的两台计算机通信。连接层就像是一个社区的邮差,他认识社区中的每一户人。社区中的每个人都可以将一封信(帧)交给他,让他送给同一社区的另一户人家。

连接层:社区小邮差

网络层(network layer)

不同的社区之间该如何通信呢? 换句话说,如何让WiFi上的一台计算机和以太网上的另一台计算机通信呢?我们需要一个“中间人”。这个“中间人”必须有以下功能: 1. 能从物理层上在两个网络的接收和发送0/1序列,2. 能同时理解两种网络的帧格式。路由器(router)就是为此而产生的“翻译”。一个路由器有多个网卡(NIC,Network Interface Controller),每个NIC可以接入多个网络,并理解相应的连接层协议。在帧经过路由到达另一个网络的时候,路由会读取帧的信息,并改写以发送到 另一个网络。所以路由器就像是在两个社区都有分支的邮局。一个社区的邮差将信送到本社区的邮局分支,而邮局会通过自己在另一个地区的分支将信转交给另一个社区的邮差手中,并由另一个社区的邮差最终送到目的地。

通过路由连接的WiFi和以太网

整个通信过程如下:

WiFi上的计算机1 -> 路由WiFi接口 ->  路由以太网接口 -> 以太网上的计算机2

(蓝色表示WiFi网络,绿色表示以太网络)

在连接层,我们的一个帧中只能记录SRC和 DST两个地址。而上面的过程需要经过四个地址 (计算机1,WiFi接口,以太网接口,计算机2)。显然,仅仅靠连接层协议无法满足我们的需要。由于连接层协议开发在先,我们无法改动连接层协议,只能 在连接层的数据(payload),也就是信纸内部下功夫了。IP协议应运而生。

计算机1,路由器和计算机2都要懂得IP协议。当计算机1写信的时候,会在信纸的开头写 上这封信的出发地址和最终到达地址 (而不是在信封上),而在信封上写上要送往邮局。WiFi网的邮差将信送往邮局。在邮局,信被打开,邮局工作人员看到最终地址,于是将信包装在一个新的信 封中,写上出发地为邮局,到达地为计算机2,并交给以太网的邮差,由以太网的邮差送往计算机2。

(IP协议还要求写如诸如校验等信息,交通状况等信息,以保护通信的稳定性。)

转交给邮局

在连接层,邮差只负责在本社区送信,所以信封上的地址总是“第一条街第三座房子”或者说“中心十字路口拐角的小房子”这样一些本地人才了解的地址描述,这给邮局的工作带来不便。所以邮局要求,信纸上写的地址必须是一个符合官方规定的“邮编”,也就是IP地址。这个地址为世界上的每一个房子编号(邮编)。当信件送到邮局的时候,邮局根据邮编,就能查到对应的地址描述,从而能顺利改写信封上的信息。

每个邮局一般连接多个社区,而一个社区也可以有多个邮局,分别通往不同的社区。有时候一封信要通过多个邮局转交,才能最终到达目的地,这个过程叫做route。邮局将分离的局域网络连接成了internet,并最终构成了覆盖全球的互联网。

传输层(transport layer)

上面的三层协议让不同的计算机之间可以通信。但计算机中实际上有许多个进程,每个进程都可能有通信的需求(参看Linux进程基础Linux进程间通信)。这就好像一所房子里住了好几个人(进程),如何让信精确的送到某个人手里呢?遵照之前相同的逻辑,我们需要在信纸上写上新的信息,比如收信人的姓名,才可能让信送到。所以,传输层就是在信纸的空白上写上新的“收信人”信息。每一所房子会配备一个管理员(传输层协议)。管理员从邮差手中接过信,会根据“收信人”,将信送给房子中的某个人。

管理员

传输层协议,比如TCP和UDP,使用端口号(port number)来识别收信人(某个进程)。在写信的时候,我们写上目的地的端口。当信到达目的地的管理员手中,他会根据传输层协议,识别端口号,将信送给不同的人。

TCP和UDP协议是两种不同的传输层协议。 UDP协议类似于我们的信件交流过程。TCP协议则好像两个情人间的频繁通信。一个小情人要表达的感情太多,以致于连续写了好几封信。而另一方必须将这些 信按顺序排列起来,才能看明白全部的意思。TCP协议还有控制网络交通等功能。

应用层(application layer)

通过上面的几层协议,我们已经可以在任意两个人(进程)之间进行通信。然而每个人实际上从事的是不同的行业。有的人是律师,有的人外交官。比如说律师之间的通信,会用严格的律师术语,以免产生纠纷。再比如外交官之间的通信,必须符合一定的外交格式,以免发生外交误会。再比如间谍通过暗号来传递加密信息。应用层协议是对信件内容进一步的用语规范。应用层的协议包括用于Web浏览的HTTP协议,用于传输文件的FTP协议,用于Email的IMAP等等。

外交通信

总结

总过网络分层,我们从原始的0/1序列抽象出

本地地址(邮差)、邮编(邮局)、收信人(管理员)、收信人行业(用语规范)

这些概念。这些概念最终允许互联网上的分布于两台计算机的两个进程相互通信。

写信人必须按照各层的协议,封装好整个信封 (encapsulation);而收信人则按照相反的顺序,来拆开这个信封。整个过程是可读信息 -> 二进制 -> 可读信息。计算机只能理解和传输0/1序列,而计算机的用户则总是输入和输出可读信息。网络协议保证了可读信息在整个转换和传输过程中的完整性。

计算机协议本身还有更多的细节需要深入。这篇文章只是从分层的角度描述各个层次所实现的功能。

时间: 2024-07-28 16:00:18

协议学习之 vamei博客系列 01 网络协议概观的相关文章

协议学习之 vamei博客系列 05 IP协议详解

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在粗略了解了IP接力和IP地址后,我们再反过来,看一看IP协议的具体细节和设计哲学. IPv4与IPv6头部的对比 我们已经在IP接力中介绍过,一个IP包分为头部(header)和数据(payload/data)两部分.头部是为了实现IP通信必须的附加信息,数据是IP通信所要传送的信息. 黄色区域 (同名区域) 我们看到,三个黄色区域跨越了IPv4和IPv6.Version(4位

协议学习之 vamei博客系列 总结

1. 分层: 物理层(physical layer) 所谓的物理层,是指光纤.电缆或者电磁波等真实存在的物理媒介.这些媒介可以传送物理信号,比如亮度.电压或者振幅.对于数字应用来说,我们只需要两种物理信号来分别表示0和1,比如用高电压表示1,低电压表示0,就构成了简单的物理层协议.针对某种媒介,电脑可以有相应的接口,用来接收物理信号,并解读成为0/1序列. 连接层(link layer) 在连接层,信息以帧(frame)为单位传输.所谓的帧,是一段有限的0/1序列.连接层协议的功能就是识别0/1

协议学习之 vamei博客系列 02 小喇叭开始广播 (以太网与WiFi协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! “小喇叭开始广播啦”,如果你知道这个,你一 定是老一辈的人.“小喇叭”是五十年代到八十年代的儿童广播节目.在节目一开始,都会有一段这样的播音:“小朋友,小喇叭开始广播了!” 听到这里,收音机前的小朋友就兴奋起来,准备好听节目了:这一期的内容是以太网(Ethernet)协议与WiFi. 我们在邮差与邮局中说到,以太网和WiFi是连接层的两种协议.在连接层,信息以帧(frame)为单

协议学习之 vamei博客系列 03 IP接力赛 (IP, ARP, RIP和BGP协议)

作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 网络层(network layer)是实现互联网的最重要的一层.正是在网络层面上,各个局域网根据IP协议相互连接,最终构成覆盖全球的Internet.更高层的协议,无论是TCP还是UDP,必须通过网络层的IP数据包(datagram)来传递信息.操作系统也会提供该层的socket,从而允许用户直接操作IP包. IP数据包是符合IP协议的信息(也就是0/1序列),我们后面简称IP数

基于SMB协议的共享文件读写 博客分类: Java

基于SMB协议的共享文件读写 博客分类: Java 一.SMB协议 SMB协议是基于TCP-NETBIOS下的,一般端口使用为139,445. 服务器信息块(SMB)协议是一种IBM协议,用于在计算机间共享文件.打印机.串口等.SMB 协议可以用在因特网的TCP/IP协议之上,也可以用在其它网络协议如IPX和NetBEUI 之上. SMB 一种客户机/服务器.请求/响应协议.通过 SMB 协议,客户端应用程序可以在各种网络环境下读.写服务器上的文件,以及对服务器程序提出服务请求.此外通过 SMB

android学习常用资料博客目录

android 技术总结 1.android 系统签名 介绍如何使用源码中的  (testkey:普通APK,默认情况下使用,platform:该APK完成一些系统的核心功能,经过对系统中存在的文件夹的访问测试,这种方式编译出来的APK所在进程的UID为system,shared:该APK需要和home/contacts进程共享数据,media:该APK是media/download系统中的一环.)4种密钥公钥进行签名. 2.MVC ListView 介绍什么是MVC以及MVC在SDK中的使用,

发布 学习进度条 博客要求

学习进度条博客 (总分:10分) 1. 目的 通过每周补充完善进度条,记录你自己学习<软件工程>的历程.收获: 通过学习进度条来跟踪自己的学习状况. 2. 学习进度条撰写要求 标题:学习进度条 内容如下:(详细格式见第3项设计的表格) 学习SE花费时间(小时) 编程代码量 (行数) 发表博客数量 (篇数) 学习到的知识点 (具体列举) 完成时间:每周五7点前完成<学习进度条>博客本周的更新. 3. 用表格表示进度 周次 学习时间 新编写代码行数 博客量(篇) 学到知识点      

hexo零基础搭建博客系列(一)

关于其他搭建 hexo4快速搭建博客(二)更换主题 hexo4快速搭建博客(三)美化 很全面 收集很多资料 hexo4快速搭建博客(四)写作技巧包含图床和自动变图床的插件 hexo4搭建博客系列(五)优化博客(无坑) 部署到阿里云 hexo4搭建博客系列(六)百度,必应,谷歌收录(无坑) 搭建一个博客不难,但是网上资料好多坑.可能我有些会写错,请在评论指出.但是有经过测试的.我用的版本是 hexo4.0 + NexT7.6版本. 我的个人博客 有阿里云服务器就可以部署上去,没有也可以用githu

Django学习---多人博客项目(2)

Django学习---多人博客项目(2) ? 上一部分内容完成了博客项目的搭建,以及博客标题和博客内容的展示,熟悉了Django的使用,下面,接着实现用户管理部分功能. 一.自定义模板和静态文件的位置 (1)自定义模板的位置 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # 当前文件路径的上两级文件路径--即是根目录 TEMPLATES = [ { 'BACKEND': 'django.templat