并不是,如果计算机A约定好了01表示频率,计算机B约定好了01表示强弱,虽然达成了某种协议,但是协议不互通,就有点类似于语言不通,所以协议只是一个大类。
在计算机中,我们是否思考过为什么我们能从内存中读取数据呢?为什么我们能从网络里面读取数据呢?为什么不同的计算机能传输数据呢?
这实际上就是因为不同的硬件有自己的协议,比如传输,存在TCP协议,UDP协议,内存有自己的协议。对于协议来说,协议本质是一个软件,并且具有分层的特性,说到分层,大家已经不陌生了,我们最开始大多时候是将所有的代码放在了main函数里面,可是有了函数的概念之后,
我们开始编写函数,开始对我们写的文件进行分层。
所以,协议也是同理,虽然我们现在对协议没有一个具象的概念,但是对于分层我们的体会还是比较大的,分层的好处具体是体现在哪里呢?
对于这个例子来说,我们通信协议分为了两层,一层是语言层面,一层是物理设备上面,虽然我们可能是人为的认为我们通信是直接通信的,但是实际上我们有了语言层面的协议之外,还需要借助物理设备。
如果说,我们会多种语言,在某种场合之下英语被禁止了,我们只能说中文,或者说某种场合下电话机被禁止了,我们只能使用无线电设备,不管是什么情况,因为协议是分层了的,
所以设备层对于语言层面没有影响,语言层面对于设备层面没有影响,这就代表了,如果某方面出了问题,我们不必担心它带来的连锁反应,我们只需要关心某一层就行了。
所以这是协议带来的直观好处:解耦合。
实际上的网络通信协议不止2层。
OSI(Open system Interconnection开放系统互连)七层模型成为开放式系统互联参考模型。这个模型将网络从逻辑上分为了7层,每一层都有相关的功能或者对应的物理设备。这七个层次
从上到下依次为:应用层、表示层、会话层、传输层、网络层、数据链路层和物理层。
但是因为它分的实在是太细了,在实际编写协议的时候较为复杂加之不太实用,我们更多的将TCP/IP协议四层模型作为讲解。
对于TCP/IP协议本质上有五层,其中是将OSI中的应用层 表示层 会话层合并为了一层,统称为应用层。
所以TCP/IP协议一共有五层,分为是应用层,传输层,网络层,数据链路层,物理层。
可是明明前文我们才说了四层模型作为参考,为什么这里是五层呢?因为物理层实在是过于偏硬件了,所以我们对于物理层讨论的不是那么多。
总的来说,我们介绍的四层分为是应用层,传输层,网络层,数据链路层。
物理层:负责光/电信号的传递方式.比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用 电磁波等都属于物理层的概念。
物理层的能力决定了最大传输速率、传输距离、抗 干扰性等.集线器(Hub)工作在物理层.
数据链路层:负责设备之间的数据帧的传送和识别.例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作
.有以太网、令牌环网,无线LAN等标准.交换机 (Switch)工作在数据链路层.
网络层:负责地址管理和路由选择.例如在IP协议中,通过IP地址来标识一台 主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由).路由器 (Router)工作在网路层.
传输层:负责两台主机之间的数据传输.如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机.
应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等.我们的网络编程主要就是针对应用层.
再识协议
好了,现在我们知道了协议具有分层的特点,带来的好处是解耦合,加之OSI模型太过复杂,所以拿TCP/IP四层模型作为基础,四层分别是数据链路层,网络层,传输层,应用层。
这是初识协议的一个摘要。
那么,我们现在重点来谈谈TCP/IP协议。
我们为什么要有TCP/IP协议呢?在初识协议部分我们谈论到了对于计算机内部而言也是存在许多协议的,但是拿通信来讲的话,世界的通信不可能只有一个计算机吧?多台计算机进行通信的同时,
硬件层面是肉眼可见的变远了很多很多。
所以我们需要一种约定用来解决这种情况。TCP/IP出现的本质原因就是因为物理设置距离的变远了。
而物理设备变远了引发的问题主要是数据传输的问题,其中数据传输引发了多个子问题,比如数据丢失,数据乱序等情况,不同的情况我们都需要不同的解决方案,所以实际上TCP/IP协议是一组协议,
是协议族,不同的协议用来解决不同的问题。
可是,究竟什么是协议呢?
提及一个问题,对于不同的操作系统,比如Windows和Linux操作系统,可以互相通信呢?
答案是肯定的,因为如果Linux和Windows系统不能通信的话,你的电脑和手机是不能通过局域网发消息的,那么它们为什么可是通信呢?
虽然协议是一个大类,由不同的厂商编写,有不同的标准,但是在OS层面的协议一定是要相同的,传输层和网络层都是位于OS里面,其中涉及的协议是TCP/IP协议,
如果该协议依赖于某种特定的网络,那么不同的OS直接是不可以通信的,所以,TCP/IP协议为了不同OS通信,编写出来看起来几乎是一样的。
假设存在一个结构体叫做test,里面有三个变量,分别是a b c,通过传输层传输信息的时候,主机A通过网络将new出来的结构体直接发送给B,B能直接拿到吗?
不少人可能会想,它凭什么拿得到,数据丢包,数据乱序,数据中断等问题,我们这里不考虑这么多,就这么说吧,这两个OS都有一个结构体叫做test,那么B为什么拿不到?
存在两个中国人,A说你好,B拥有同样的语言系统,所以B能直接获取到A的信息。
那么,这不就是一种协议吗?
对于协议我们现在可以有一个朴素的理解:协议就是通信双方都认识的数据类型。
现在我们引入一个场景,快递单子大家应该都认识吧?
其中快递单子 + 货物 = 协议报头 + 有效载荷。
以上是对于协议的初步认识。
局域网
小时候我们玩我的世界,都知道有一种联机方式是局域网连接,可是为什么处于相同的局域网就能连接呢?
我们直接说结论:局域网能直接通信是因为能找到对应的主机,能找到对应的主机是因为每台主机都有一个MAC地址。我们也能在自己的机器上查看MAC地址,但是如果是虚拟机可能
会虚构地址,云服务器不会:输入命令ifconfig:
其中MAC地址的组成是长度为48位,及6个字节.一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
其中我们拿以太网举例,A主机向B主机发送消息的话,就需要data消息,B主机的mac地址,自己的地址发送到以太网中,其他主机通过以太网读取到收货地址不是自己的,就会选择忽略。
而在以太网中传输信息的时候有以下注意的几个点:
以太网中,任何时刻,只允许一台机器向网络中发送数据
如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞
所有发送数据的主机要进行碰撞检测和碰撞避免
没有交换机的情况下,一个以太网就是一个碰撞域
局域网分类:
以太网:只允许一个主机在任何一个时刻在局域网中发送消息,否则发生碰撞
如何看待局域网中的网络资源?站在系统角度:共享资源、临界资源
令牌环网:谁有令牌谁就能发消息,没有就不能发送
无线LAN:以太网的变种
从应用层一直封装到数据链路层,层层封装,通过以太网,再从数据链路层层层解包的上层。
这就是发送消息的过程。
从以上我们得出来网络协议的共性为:
1. 报头和有效载荷分离的问题->解包
2. 除了应用层,都必须解决一个问题,自己的有效载荷应该交给上层协议 -- 分用
以上是在局域网中发送消息的情况,可是跨网络才是常有的事儿:
跨网络传输
当一台路由器,接收到了不同的IP地址,也就可以让两个不同的主机进行通信,其中,IP地址我们需要简单了解:
• IP地址是在IP协议中,用来标识网络中不同主机的地址;
• 对于IPv4来说,IP地址是一个4字节,32位的整数;
• 我们通常也使用"点分十进制"的字符串表示IP地址,例如192.168.0.1;用点 分割的每一个数字表示一个字节,范围是0-255;
而IP地址分为了IPv4和IPv6,我们后面谈论的基本上都是IPv4。
我们也可以在终端查看我们的IP地址,ipconfig即可:
来源: 整理文章为传播相关技术,网络版权归原作者所有,如有侵权,请联系删除。