精华内容
下载资源
问答
  • 合宙Luat | 通信小姐姐物联网第02篇【蜂窝物联网与通信模块小课堂】 万物互联的大趋势之下,进入物联网开发行业就仿佛掌握着通往未来的黑科技。然而其间交织着无数行业知识,很多解读让人直呼“WHAT???”,真真...

    合宙Luat | 通信小姐姐讲物联网第02篇【蜂窝物联网与通信模块小课堂】

     

    万物互联的大趋势之下,进入物联网开发行业就仿佛掌握着通往未来的黑科技。然而其间交织着无数行业知识,很多解读让人直呼“WHAT???”,真真切切剪不断理还乱……

    合宙Luat【通信小姐姐讲物联网】系列文章,将针对行业相关知识抽丝剥茧,以通俗易懂的语言,解决你的小困惑。

     


    # 浅谈蜂窝物联网 #

     

    1.1 蜂窝物联基本概念

    我们在上一篇文章中讲到,物联网通信分为短距离和广域网两种通信方式:

    短距离通信是指没有运营商基站的通信方式,蓝牙、Wi-Fi都属于短距离通信方式;广域网通信是指需要通过运营商的基站进行通信的方式,包括2G、3G、4G、NB-IoT、5G等方式。

     

    蜂窝物联网——就是基于广域网通信的物联网。因为运营商的基站,呈现蜂窝状的分布,所以广域网通信也称为蜂窝通信。

     

    1.2 蜂窝物联网发展历程

    自从GPRS通信技术在90年代诞生之后,蜂窝物联网就存在了。只不过当年大家更愿意称之为M2M通信,而不是物联网。

    当年的GPRS模组价格相当的贵,一个模组最贵的时候,要超过10000元RMB。

     

    1.3 网络制式

    2G、3G、4G、5G、NB-IoT都是不同的通信方式,其中4G又有了Cat.1的分支。

    这些制式中,2G和3G即将退出,5G火候未到,估计还得三五年甚至七八年才能大规模应用。当前,比较普及和大规模应用的,就是Cat.1和NB-IoT两种方式了。

     

    在2021年,Cat.1是即将一统蜂窝物联网江山的通信方式。

     

    1.4 蜂窝物联网组成

    物联网由感知层、网络层、平台层和应用层四部分构成。通过了解物联网的层级架构,我们可以详细了解蜂窝物联网的组成。

    物物相连是基于感知层收集到的、网络层传输的、平台层挖掘利用的信息,然后再把特定信息反馈给基层物体完成指定命令以此实现智能化。

     

    歪脖警告!!!

     

    ## 解读物联网的四个层级 ##

    一、感知层

    感知层是物联网整体架构的基础,是物理世界和信息世界融合的重要一环。在感知层,我们可以通过传感器感知物体本身以及周围的信息,让物体也具备了“开口说话,发布信息”的能力,比如声音传感器、压力传感器、光强传感器等。感知层负责为物联网采集和获取信息。

    二、网络层

    感知到的信息如何传递出去呢?这就要提到网络层了,用于联网的数据传输通道,如GSM、NB-IoT、LTE、LoRa、BLE、Wi-Fi等。网络层在整个物联网架构中起到承上启下的作用,它负责向上层传输感知信息和向下层传输命令。网络层把感知层采集而来的信息传输给物联云平台,也负责把物联云平台下达的指令传输给应用层,具有纽带作用。

    三、平台层

    平台层是物联网整体架构的核心,它主要解决数据如何存储、如何检索、如何使用以及数据安全与隐私保护等问题。平台管理层负责把感知层收集到的信息通过大数据、云计算等技术进行有效地整合和利用,为我们应用到具体领域提供科学有效的指导。

    四、应用层

    物联网最终是要应用到各个行业中去,物体传输的信息在物联云平台处理后,我们会把挖掘出来的有价值的信息应用到实际生活和工作中,比如智慧物流、智慧医疗、食品安全、智慧园区等。物联网应用现阶段正处在快速增长期,随着技术的突破和需求的增加,物联网应用的领域会越来越多。

     

     

    1.5 蜂窝物联网典型应用

    典型的例子特别简单,一个是共享单车,一个共享充电宝。

    另外,公交车安装一个通信模块,上报自己的位置,在车站的站台上显示各个公交车到哪个站了,也是一个有意思的应用。

    这些应用都需要服务器,手机APP、通信模块以及终端的采集或者控制单元。


    # 物联网通信为什么需要模块? #

    通信模块作为当代信息产业的结晶体,伴随着物联网的兴起形成了一个庞大的产业。

    接下来,让我们一起了解通信模块。

     

    2.1 模块的基本概念

     

    遇事不决,先查百度。上面关于模块的定义是这样的:

    模块,又称构件,是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体)。

    它具有两个基本的特征:外部特征和内部特征。

    外部特征是指模块跟外部环境联系的接口(即其他模块或程序调用该模块的方式,包括有输入输出参数、引用的全局变量)和模块的功能;内部特征是指模块的内部环境具有的特点(即该模块的局部数据和程序代码)。

     

    听起来是不是一头雾水,下面我用白话文翻译一下:

    模块本质就是一个独立出来的一小块电路或者软件,能出色的完成特定的功能。模块跟外部通过接口相连(接口分为硬件和软件两部分),并通过接口进行通信。

    对于一个通信模块而言,首要的特征是能与外部云服务器进行数据通信,通过内部的运算部件,一般包含运算、发射、接收等功能。

     

    极简化通信模块模型

    没错,上图就是一个极简化通信模块模型。作为通信模块肯定要消耗一定的电能,所以要有Power Input;模块需要与外部进行信息交换,这往往是通过各种各样的总线来完成的,Signal Bus也就是与外部通信的接口,后面我们还会再详细的讲解各种常见的总线。

     

    2.2 模块的基本硬件组成部分

    下面我们以上海合宙通信科技有限公司出品的一款网红Cat.1物联网模块Air724UG为例,来看一下模块的基本组成部分。

     

    Air724UG功能框图如下(请点击放大查看):

     

    一个典型的通信模块由三部分构成:

    CPU主芯片

    基带调制芯片(Transceiver)

    射频功率放大及接收器模组(RF PAM)

     

    其中主芯片完成整个通讯模块的控制任务,又可以细分存储器(Memory)、运算器(Controller)、电源管理器(PMU)以及各种外部总线设备,比如音频处理器(Audio)和各种总线处理器(UART、SPI、I2C、GPIO)等等。

    对于新一代的物联网通信模块,由于性能进一步的增强,往往还有多核处理器、高速数据处理器(DSP)等辅助模块,但是大体上还是上面结构的一个延伸。

     

    2.3 物联网通信为什么需要模块?

    这是很多初学者都会问到的一个常见的问题。

    我们接触到的大多数电路都是由芯片和被动元器件直接构成的,为什么偏偏物联网通信要用模块这样一种特殊的电路结构?

     

    这个问题需要从几个方面来解释清楚:

     

    • 从电路结构上看

    物联网通信模块所承担的功能相对比较明确清晰,与其他电路的耦合度不高。通常以与广域网通信为主,数据界面直接面向外部基站,外部电路通过模块进行数据双向传输,易于独立出来进行专精化工作。由于电路模块化后,往往可以采用尺寸封装更小,质量更可靠的元器件,往往既节约了用户开发成本又便于缩小最终产品的尺寸。

    • 从实施难度上看

    物联网模块对电磁兼容性设计提出了十分苛刻的要求,牵涉非常多的高级电路设计技术,包括但不限于高频布线、EMC控制、阻抗控制、超高密度走线、时钟同步。而且设计出来后的生产工艺也非常复杂,设计很多超高精度的元器件的组装和制造,对于生产容许的误差也非常小,远远高于常规电路开发的水平。所以通信模块部分的电路所要求的设计生产能力,往往远超普通的电子厂能承担的水平。

    • 从经济效益上看

    模块厂可以集中大规模采购元器件,在品控和采购价格方面都有绝对的优势。毫不夸张的说,除极少数头部企业,常规的厂家如果自行采购模块所需的成本,将会大大超过当前的模块市场售价。且模块行业由于其特殊性还需要有各种繁杂的国家认证要通过,这种成本更是一般企业承受不起的。

     

    上图是目前行业里炙手可热的物联网Cat.1通信新秀Air724UG的内部结构照,可看到其内部结构相当精巧复杂。

    综合以上三点可以看出,模块行业能发展到今天这个规模是有客观的需求存在的,而且也将在相当长的时间长期存在下去。



     

    # 通信模块及其应用开发简介 #

     

    3.1 通信模块的发展历程

    模块行业是一个与手机伴生的移动通信领域的细分行业,历史也相当悠久,自1993年就诞生了。那时候的手机主流还是黑白屏幕也尚未普及。

    而后几乎所有的大厂都在该领域进行了不懈的努力,国际大厂包括Siemens、Sierra、Telit、Motorola等,比较早期的模块厂商有SIMCom、Quectel、LongSung、Huawei、ZTE等。

    合宙作为通信模块行业的后来者,Luat开发团队凭借在过去10年间的技术积累,以领先行业的Luat二次开发技术在最近5年发力迅速成长。

    凭借一款经典Air202产品在GPRS模块领域奠定了坚实的基础,后以低至69元的4G Cat.4模块刷新行业认知并推行业变革。在最新的4G Cat.1模组市场上则开始展示王者的实力,领先于全行业。

     

    关于具体的行业风云同学们感兴趣的话,我们后续会单独用一篇文章详细描叙。

     

     

    3.2 模块的能力介绍

    作为通信模块,最基本的功能当然是进行通信,完成本地电路与云端服务的数据通信功能。但随着近几十年模块技术的飞速发展,现在的模块已经不单单能完成数据传输的功能,开始担当起SOC的角色。

    在很多的应用场景,一片应用Luat技术的模块可以直接承担起完成的业务逻辑,并驱动相应的外部设备。

    接下来,我们以合宙出品的Cat.1模块Air724UG为例,罗列一下Luat模块的基本功能。当然其他的供应商也开发出相关的Cat.1物联网模块,功能上大同小异。

     

    通信模块联网功能

     

    以上的数据可能稍微显得抽象一点,下面我简要介绍下。

    所谓频段就是指通讯占用的频率空间。

    手机在传输信号的时候肯定要向空中发射信号,同时也要从空中接收基站发来的信号。

    模块发送信号被称为上行,也就是UL;模块接收信号被称为下行,也就是DL。通常上下行都要占用一定的频谱资源。也就是占用特定的一个频率范围。

    这个频率范围在世界范围内,根据电信组织的规定被定义成了一个一个的信道,通过信道对照表就可以查到对应频段所占用的频率。

     

    举一个例子:

    LTE-TDD使用34信道,通过查表可以得知,占用的是2010MHz - 2025MHz这个频率范围。我们根据这个频率就可以购买支持相应频段的天线了。

     

    歪脖警告!!!

    由于上下行都需要占用独立的带宽,所以根据使用的不同,就有不同的上下行配比,也就是上下行各分配多大的频率空间,这个一般是由运营商决定的。

    对于绝大多数物联网场景,4G Cat.1模块均能轻松应对,相对于2G GPRS领域在通信时延、通道带宽上,都有近百倍的提升。

     

    通信模块其他功能

    作为一个拥有RTOS操作系统的SOC,现代通信模块除了完成基本的物联网通信功能以外,往往还内置了其他丰富的资源。

    下面简介如下:

    • USB高速通讯接口

    • 外部通讯总线如 UART、I2C、Camera、SPI等,通过总线可以和外部的其他设备相连

    • 音频编解码,可通话、可播放Mp3、可直接文本发音(TTS)

    • 支持30万像素摄像头图像采集

    • 两路ADC模拟量采集可以进行高速电压测量

    • 内存卡接口可以进行外存容量扩充(TF卡)

    • 外部显示屏接口、可以驱动高分辨率的LCD全彩显示屏

    这些只是一些基本的介绍,详细的参数如需要请登录合宙官网产品中心查阅Air724UG的硬件手册。

    从以上参数可以看出Air724UG已经是一台性能接近手机的全功能SOC硬件平台,事实上可以完成绝大多数的常见物联网任务,且无需添加额外的单片机。

     

    3.3 模块的使用方法介绍

    通过以上的介绍,我们可以看到通信模块的功能还是比较丰富的。

    但这些功能其实都是可裁剪的,简单的讲,您需要用到相应的功能才需要去熟悉对应的接口。而对于最基本的物联网通信,事实上只需要提供供电电源、接上天线就可以了。

    与外部电路的通讯可以是串口,也可以是USB接口。

    作为最简单的应用,仅需要将模块的USB接口连接到电脑上,就可以让普通的电脑具有上网功能,而模块此时则成为一块上网卡。

     

    模块的使用就是这么简单。如果您希望更好的利用模块的片上资源,就需要通过编程完成。

    下面我把几种常见的开发方式,进行简要介绍:

    • AT模式(模块内置协议栈)

    AT指令是目前业界历史最悠久,使用领域最广泛的通讯指令集。

    合宙的通信模块不仅实现了AT指令的全支持,也对物联网常用通信协议栈进行了集成,比如TCP/IP、UDP/IP、FTP等等,并支持多链路的同时连接操作。

    对于更为高级的平台级协议如MQTT等支持,合宙也把这些繁杂的功能集成进了协议栈,简化了用户使用。

     

    • 单CPU模式 (二次开发模式)

    我们刚才讲到,随着模块性能的提高,最新一代的物联网通信模块均具备了SOC的潜质。

    所谓SOC就是把功能都集中在一起,像一台小电脑一样,因此可以通过二次开发(片上编程)完成较为复杂的逻辑控制任务。

    目前行业里比较流行的方式有OpenCPU方式(使用C语言进行二次开发),和Luat方式(使用Lua语言进行开发)。

    笔者认为C语言作为单片机通用语言,更适合完成一些高级编程功能,但效率远低于Lua脚本语言编写。作为快速开发而言,脚本语言在物联网领域更胜一筹,未来将引领模块行业的未来发展趋势。

     

    • MODEM模式(PPP拨号上网)

    MODEM作为一个历史非常悠久的词汇,曾经是上网设备的通用代名词。

    这里我们特指的是:传统的串口通信方式的上网模式,采用TTL电平的串口方式,模块可以与外部设备相连进行网络通讯,联网方式通过PPP协议实现。

    由于有更加高速便捷的联网方式出现,这种通信方式目前的应用场景正在缩小。

     

    • 无线网卡模式

    这也就是开头提到的Rndis、ECM上网方式,使用通用的网络协议,仅需要连接USB接口模块就可以使具有Linux\Windows\Android的系统实现透明上网。

    合宙Luat,让万物互联更简单

    展开全文
  • VoIP一般称作为IP电话,广义上是在数据网络上承载数据、语音、传真和视频、图像等多媒体业务,而在狭义上则是承载语音业务。基于IP的Internet得到迅猛的发展,使IP协议成为信息网络的工具。用 IP 网络传送语音,...
  • C++ 设备通信(协议)

    千次阅读 2019-06-12 15:26:44
    主要谈对数据交互层,传输协议的理解。包含了对传输层协议、应用层协议的逐步理解过程,包含网络通信协议也包含串口通信协议...

    谈脑壳里的问题

    先前写过一套串口通信协议(一直叫他传输层协议),后来糊里糊涂的把他套在了UDP通信过程上。其实脑袋一团浆糊,根本搞不明白我写的协议到底是传输层还是应用层协议,也搞不明白UDP/TCP代表的所谓传输层到底干了啥,哪些它干了不要应用层再处理?
    看到一篇文章,博主该是写C#的,其内容加剧了我对TCP的认知的乱,我原本还想着,我协议里做的事情(关于接收-提取完整数据的过程),TCP会替我干呢,现在晕了?

    • TCP通信中,数据以"流"的形式传输,每次发送的数据间没有明显的界限,也即:当你收到一部分数据后,你无法判断收到的数据的完整性或从哪里拆开数据?TCP协议作为传输层协议,不仅不负责“TCP沾包”问题的处理,反而就是问题本身!解决问题需要从其上层来制定一些“规则”(应用层协议)?
    • 也知道传输层、应用层的概念是网络模型的,串口通信可能并不适用,但是强迫症,无奈,总想给他们搞个对应关系,哈,也许这个想法的大有人在?

    应用层协议与传输层协议

    终于遇见你-传输层协议和应用层协议的关系!默默感谢博主songly_终于让我从原先“传输层协议-应用层协议-多帧数据传输”的坑中爬了出来(是因为写了个“串口通信传输层协议”掉进去的)!(另一篇不错的文章:TCP/UDP及其上层应用简析)!

    • 传输层主要功能端到端的通信,一段是服务器上的具体服务,另一端是客户端。TCP/UDP皆如此,只不过TCP对传输可靠性、顺序性提供了支持。
    • TCP协议头中的32位序号,是基于TCP字节流之字节号的,序号+确认号,其保证的是一次TCP通信过程

    个人理解,网络通信较串口通信的复杂度主要来自“网状”,而串口通信就是“点对点直连”嘛。网络模型中的传输层,其提供端到端的连接(即-用以主机的进程与进程之间的互通),而串口通信过程中没有服务器、客户端的概念,顾,其没有网络层与传输层?

    • 串口通信包含:物理层(TTL串口、RS232串口、RS485…),数据链路层(起始位、数据位、停止位)、应用层(应用数据的打包、拆包)

    应用层协议简析

    偶然的机会对FTP产生了些不知道对不对的认识,站在一个更高层去组装或拆分数据?我的消息队列+数据区不正是要干这个吗!FTP下数据在客户端与服务端的传递,本人很喜欢博主绘制的这些图,这是用例图吗?

    之所以跑到现有应用层协议的学习上来,是想从这两种应用层协议的实现原理上汲取点思路,好继续完成我的工作“同时适用串口/网络的自定义-应用层协议”。截止现在,我的问题是:怎么是一个合理的应用层协议-应答机制?

    查阅了基于UDP的简单文件传输协议FTP文件传输协议TFTP参考2,没有get到我想要的,还有个疑问:FTP是如何与TCP协同工作的,是存在两层ACK机制吗?
    为了解决上述疑问,继续查阅了 FTP主动模式与被动模式FTP 通信抓包,到这,我的PC上也是有Wireshark工具的,完全可以通过调试手段自己去验证!

    • FTP传输和控制采用独立的连接方式,于当前我的场景不太对应。
    • TPTP中,当发现某个数据包小于512个字节,说明传输终止。这点还是有参考价值的。

    查阅了HTTP请求/响应报文结构 ,但是没有发现我想要的信息,http请求与应答过程碰上较大的数据量,怎么处理呢会?

    • 比如我们登录一些大图片的网址,会发现有时候图片是一块一块加载的。这就是因为设置了http请求的长度,这样就可以分块的加载资源文件。在请求报文中使用Range属性,在响应报文中使用Content-Type属性都可以指定一定字节范围的http请求。

    自定义应用层协议

    看到了两篇文章,先记下来,慢慢学习

    协议中ACK机制的影响,博主认为,及时是基于TCP的应用层协议,也该有自己的ACK机制,可在发送端设置是否需要ACK确认,只对需要的数据进行ACK确认。

    如何自定义一个通信协议,博主写了很多也没写完,但是前边的知识点总结很多(发现有部分描述错误,如TCP序号),值得参考,博主不是要写自定义应用层协议,而是符合七层模型的完整的一套协议…

    实现自定义的应用层协议-1,这篇还没有细看,感觉上不错的样子!

    掉牙的网络七层模型

    开放式系统是在计算机体系结构、计算机系统、计算机软件和通信系统等领域广泛使用的一种术语。开放式(是指非垄断的)系统鼓励开发兼容的厂商产品。顾客可以从开放式系统中获益,这是因为他们可以在/很广范围的、可与系统一起工作的/产品中进行选择,更为重要的是,易于和其它厂商的产品互联。一个开放环境提供标准通信设施和协议,或提供一条使用不同协议的途径。计算机社会给要开放的厂商施加了更多的压力,这是因为他们在销售产品时必须公开承诺这些设备将能和现有的系统一起工作。如果理解不透彻,可以继续向下看看参考2中的OSI设计起因和目的…

    OSI-开放系统互联(Open System Interconnection)。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。这是一种事实上被TCP/IP 4层模型淘汰的协议。在当今世界上没有大规模使用。 七层结构的各层含义可参考1-网络七层协议-百科参考2-OSI-百科

    • 必须Get的概念,协议数据单元PDU,传输层及以下PDU特定的名称(数据段、数据包、数据帧、比特)、最大传输单元MTU,

    OSI七层模型与TCP/IP五层模型,图不错哦!

    QA:
    在参考1中,网络层功能描述中提到:为了适应最大传输单元长度小于包长度的传输介质,网络层还定义了如何将一个包分解成更小的包的分段方法。也就是说网络层、传输层、应用层均有“拆包”的概念 ? 那问题来了,都是为了啥?

    另外,包的概念、帧的概念,都是隶属不同层的,不可以随便用?

    掉牙的UDP/TCP比较

    TCP与UDP的通信特点及比较?
    主要分为三点:是否可靠、是否保证顺序、高低损耗。

    网络通信资料

    TCP-IP详解卷一、卷二、卷三基本介绍

    IP头,TCP头,UDP头,MAC帧头定义

    TCP报文段的头部结构详解

    TCP通信原理及封包问题,这是TCP-IP详解卷一的内容,那我是不是该买一本啊!

    TCP的ACK,并不是每包发送都会收到ACK–

    串口通信

    野火讲的串口通信 ,其中将串口通讯协议,分为物理层和协议层。而这篇文章中,其将协议分为底层通信协议和用户层协议。self理解中,底层通信协议指的就是链路层协议,用户层协议就是我们为了打包/拆包应用数据而制定的规则。

    其他疑问

    • 为什么网络通信比串口通信快这么多 ?是应该从硬件设备的分析起始吗 ?

    • 采用多线程实现,数据交互过程,是真的比单线程效率高吗 ?还是有什么特殊成立条件 ?
      先分析一点就是,当前项目用RS422串口通信,是全双工的,理论上,是能同时收发,同时操作接收缓冲与发送缓冲的。

    未整理资料

    基于DPI的应用层协议解析 https://wenku.baidu.com/view/eb71329fc281e53a5802ffa6.html

    CAN总线应用层协议
    https://wenku.baidu.com/view/5a143ec9f705cc17552709fe.html
    主要关注其中CAN-BUS通信的参考模型

    原本的基于对101等规约的一知半解,武断的去理解“业务约定”,将其对应到电表层,完全是胡乱猜测,这有必要研究下,不要让自己跑偏了-
    现在想“业务预定”-类型类别,如果属于应用协议层,而不是应用数据,那么电表也可能被理解为纯数据,在协议上层,电表只不过是确认了一个纯数据格式或对应关系。数据{点号+值}(int,double)而已,再回想下当年解析过的那些476报文(总召的时候,上来的就是一堆连续的(号+值)),终于有些feel啦。

    应用层协议详解:
    https://wenku.baidu.com/view/963cfa61783e0912a2162a1f.html

    关于通信和数据传输

    数据总线-百科总线(Bus)是指计算机组件间规范化的交换数据(data)的方式,即以一种通用的方式为各组件提供数据传送和控制逻辑。规范了一个大的集成应用系统中同构系统、异构系统等方面进行数据共享和交换实现方法,系统间数据交换标准。

    UART,是一种异步收发传输器,是电脑硬件的一部分。它是把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。具体实物表现为独立的模块化芯片,或集成于微处理器。想搞明白UART是硬件还是软件协议,看看UART芯片资料可以。
    https://blog.csdn.net/zjy900507/article/details/79789671

    展开全文
  • 太厉害了,终于有人能把TCP/IP 协议的明明白白了

    万次阅读 多人点赞 2020-05-07 09:30:15
    OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。 二、 TCP/IP 基础 1. TCP/IP 的具体含义 从字面意义上,有人可能会认为...

     

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    一图看完本文

     

    一、 计算机网络体系结构分层

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    计算机网络体系结构分层

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    计算机网络体系结构分层

    不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”。

     

    二、 TCP/IP 基础

    1. TCP/IP 的具体含义

    从字面意义上讲,有人可能会认为 TCP/IP 是指 TCP 和 IP 两种协议。实际生活当中有时也确实就是指这两种协议。然而在很多情况下,它只是利用 IP 进行通信时所必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。他们与 TCP 或 IP 的关系紧密,是互联网必不可少的组成部分。TCP/IP 一词泛指这些协议,因此,有时也称 TCP/IP 为网际协议群。

    互联网进行通信时,需要相应的网络协议,TCP/IP 原本就是为使用互联网而开发制定的协议族。因此,互联网的协议就是 TCP/IP,TCP/IP 就是互联网的协议。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    网际协议群

    2. 数据包

    包、帧、数据包、段、消息

    以上五个术语都用来表述数据的单位,大致区分如下:

    • 包可以说是全能性术语;
    • 帧用于表示数据链路层中包的单位;
    • 数据包是 IP 和 UDP 等网络层以上的分层中包的单位;
    • 段则表示 TCP 数据流中的信息;
    • 消息是指应用协议中数据的单位。

    每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    数据包首部

    网络中传输的数据包由两部分组成:一部分是协议所要用到的首部,另一部分是上一层传过来的数据。首部的结构由协议的具体规范详细定义。在数据包的首部,明确标明了协议应该如何读取数据。反过来说,看到首部,也就能够了解该协议必要的信息以及所要处理的数据。包首部就像协议的脸。

    3. 数据处理流程

    下图以用户 a 向用户 b 发送邮件为例子:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    数据处理流程

    • ① 应用程序处理
    • 首先应用程序会进行编码处理,这些编码相当于 OSI 的表示层功能;
    • 编码转化后,邮件不一定马上被发送出去,这种何时建立通信连接何时发送数据的管理功能,相当于 OSI 的会话层功能。
    • ② TCP 模块的处理
    • TCP 根据应用的指示,负责建立连接、发送数据以及断开连接。TCP 提供将应用层发来的数据顺利发送至对端的可靠传输。为了实现这一功能,需要在应用层数据的前端附加一个 TCP 首部。
    • ③ IP 模块的处理
    • IP 将 TCP 传过来的 TCP 首部和 TCP 数据合起来当做自己的数据,并在 TCP 首部的前端加上自己的 IP 首部。IP 包生成后,参考路由控制表决定接受此 IP 包的路由或主机。
    • ④ 网络接口(以太网驱动)的处理
    • 从 IP 传过来的 IP 包对于以太网来说就是数据。给这些数据附加上以太网首部并进行发送处理,生成的以太网数据包将通过物理层传输给接收端。
    • ⑤ 网络接口(以太网驱动)的处理
    • 主机收到以太网包后,首先从以太网包首部找到 MAC 地址判断是否为发送给自己的包,若不是则丢弃数据。
    • 如果是发送给自己的包,则从以太网包首部中的类型确定数据类型,再传给相应的模块,如 IP、ARP 等。这里的例子则是 IP 。
    • ⑥ IP 模块的处理
    • IP 模块接收到 数据后也做类似的处理。从包首部中判断此 IP 地址是否与自己的 IP 地址匹配,如果匹配则根据首部的协议类型将数据发送给对应的模块,如 TCP、UDP。这里的例子则是 TCP。
    • 另外吗,对于有路由器的情况,接收端地址往往不是自己的地址,此时,需要借助路由控制表,在调查应该送往的主机或路由器之后再进行转发数据。
    • ⑦ TCP 模块的处理
    • 在 TCP 模块中,首先会计算一下校验和,判断数据是否被破坏。然后检查是否在按照序号接收数据。最后检查端口号,确定具体的应用程序。数据被完整地接收以后,会传给由端口号识别的应用程序。
    • ⑧ 应用程序的处理
    • 接收端应用程序会直接接收发送端发送的数据。通过解析数据,展示相应的内容。

     

    三、传输层中的 TCP 和 UDP

    TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。

    • TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,当应用程序采用 TCP 发送消息时,虽然可以保证发送的顺序,但还是犹如没有任何间隔的数据流发送给接收端。TCP 为提供可靠性传输,实行“顺序控制”或“重发控制”机制。此外还具备“流控制(流量控制)”、“拥塞控制”、提高网络利用率等众多功能。
    • UDP 是不具有可靠性的数据报协议。细微的处理它会交给上层的应用去完成。在 UDP 的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达。因此,应用有时会根据自己的需要进行重发处理。
    • TCP 和 UDP 的优缺点无法简单地、绝对地去做比较:TCP 用于在传输层有必要实现可靠传输的情况;而在一方面,UDP 主要用于那些对高速传输和实时性有较高要求的通信或广播通信。TCP 和 UDP 应该根据应用的目的按需使用。

    1. 端口号

    数据链路和 IP 中的地址,分别指的是 MAC 地址和 IP 地址。前者用来识别同一链路中不同的计算机,后者用来识别 TCP/IP 网络中互连的主机和路由器。在传输层也有这种类似于地址的概念,那就是端口号。端口号用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址。

    1.1 根据端口号识别应用

    一台计算机上同时可以运行多个程序。传输层协议正是利用这些端口号识别本机中正在进行通信的应用程序,并准确地将数据传输。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    通过端口号识别应用

    1.2 通过 IP 地址、端口号、协议号进行通信识别

    • 仅凭目标端口号识别某一个通信是远远不够的。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    通过端口号、IP地址、协议号进行通信识别

    • ① 和② 的通信是在两台计算机上进行的。它们的目标端口号相同,都是80。这里可以根据源端口号加以区分。
    • ③ 和 ① 的目标端口号和源端口号完全相同,但它们各自的源 IP 地址不同。
    • 此外,当 IP 地址和端口号全都一样时,我们还可以通过协议号来区分(TCP 和 UDP)。

    1.3 端口号的确定

    • 标准既定的端口号:这种方法也叫静态方法。它是指每个应用程序都有其指定的端口号。但并不是说可以随意使用任何一个端口号。例如 HTTP、FTP、TELNET 等广为使用的应用协议中所使用的端口号就是固定的。这些端口号被称为知名端口号,分布在 0~1023 之间;除知名端口号之外,还有一些端口号被正式注册,它们分布在 1024~49151 之间,不过这些端口号可用于任何通信用途。
    • 时序分配法:服务器有必要确定监听端口号,但是接受服务的客户端没必要确定端口号。在这种方法下,客户端应用程序完全可以不用自己设置端口号,而全权交给操作系统进行分配。动态分配的端口号范围在 49152~65535 之间。

    1.4 端口号与协议

    • 端口号由其使用的传输层协议决定。因此,不同的传输层协议可以使用相同的端口号。
    • 此外,那些知名端口号与传输层协议并无关系。只要端口一致都将分配同一种应用程序进行处理。

    2. UDP

    • UDP 不提供复杂的控制机制,利用 IP 提供面向无连接的通信服务。
    • 并且它是将应用程序发来的数据在收到的那一刻,立即按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况,UDP 也无法进行流量控制等避免网络拥塞行为。
    • 此外,传输途中出现丢包,UDP 也不负责重发。
    • 甚至当包的到达顺序出现乱序时也没有纠正的功能。
    • 如果需要以上的细节控制,不得不交由采用 UDP 的应用程序去处理。
    • UDP 常用于一下几个方面:1.包总量较少的通信(DNS、SNMP等);2.视频、音频等多媒体通信(即时通信);3.限定于 LAN 等特定网络中的应用通信;4.广播通信(广播、多播)。

    3. TCP

    • TCP 与 UDP 的区别相当大。它充分地实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在 UDP 中都没有。
    • 此外,TCP 作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。
    • 根据 TCP 的这些机制,在 IP 这种无连接的网络上也能够实现高可靠性的通信( 主要通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现)。

    3.1 三次握手(重点)

    • TCP 提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。
    • 所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。

    下面来看看三次握手的流程图:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    三次握手

    • 第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。
    • 第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
    • 第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

    3.2 四次挥手(重点)

    • 四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
    • 由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。

    下面来看看四次挥手的流程图:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    四次挥手

    • 中断连接端可以是客户端,也可以是服务器端。
    • 第一次挥手:客户端发送一个FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
    • 第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。
    • 第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
    • 第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。

    上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,

    具体流程如下图:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    同时挥手

    3.3 通过序列号与确认应答提高可靠性

    • 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知。这个消息叫做确认应答(ACK)。当发送端将数据发出之后会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。反之,则数据丢失的可能性很大
    • 在一定时间内没有等待到确认应答,发送端就可以认为数据已经丢失,并进行重发。由此,即使产生了丢包,仍然能够保证数据能够到达对端,实现可靠传输。
    • 未收到确认应答并不意味着数据一定丢失。也有可能是数据对方已经收到,只是返回的确认应答在途中丢失。这种情况也会导致发送端误以为数据没有到达目的地而重发数据。
    • 此外,也有可能因为一些其他原因导致确认应答延迟到达,在源主机重发数据以后才到达的情况也屡见不鲜。此时,源主机只要按照机制重发数据即可。
    • 对于目标主机来说,反复收到相同的数据是不可取的。为了对上层应用提供可靠的传输,目标主机必须放弃重复的数据包。为此我们引入了序列号。
    • 序列号是按照顺序给发送数据的每一个字节(8位字节)都标上号码的编号。接收端查询接收数据 TCP 首部中的序列号和数据的长度,将自己下一步应该接收的序列号作为确认应答返送回去。通过序列号和确认应答号,TCP 能够识别是否已经接收数据,又能够判断是否需要接收,从而实现可靠传输。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    序列号和确认应答

    3.4 重发超时的确定

    • 重发超时是指在重发数据之前,等待确认应答到来的那个特定时间间隔。如果超过这个时间仍未收到确认应答,发送端将进行数据重发。最理想的是,找到一个最小时间,它能保证“确认应答一定能在这个时间内返回”。
    • TCP 要求不论处在何种网络环境下都要提供高性能通信,并且无论网络拥堵情况发生何种变化,都必须保持这一特性。为此,它在每次发包时都会计算往返时间及其偏差。将这个往返时间和偏差时间相加,重发超时的时间就是比这个总和要稍大一点的值。
    • 在 BSD 的 Unix 以及 Windows 系统中,超时都以0.5秒为单位进行控制,因此重发超时都是0.5秒的整数倍。不过,最初其重发超时的默认值一般设置为6秒左右。
    • 数据被重发之后若还是收不到确认应答,则进行再次发送。此时,等待确认应答的时间将会以2倍、4倍的指数函数延长。
    • 此外,数据也不会被无限、反复地重发。达到一定重发次数之后,如果仍没有任何确认应答返回,就会判断为网络或对端主机发生了异常,强制关闭连接。并且通知应用通信异常强行终止。

    3.5 以段为单位发送数据

    • 在建立 TCP 连接的同时,也可以确定发送数据包的单位,我们也可以称其为“最大消息长度”(MSS)。最理想的情况是,最大消息长度正好是 IP 中不会被分片处理的最大数据长度。
    • TCP 在传送大量数据时,是以 MSS 的大小将数据进行分割发送。进行重发时也是以 MSS 为单位。
    • MSS 在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出建立连接的请求时,会在 TCP 首部中写入 MSS 选项,告诉对方自己的接口能够适应的 MSS 的大小。然后会在两者之间选择一个较小的值投入使用。

    3.6 利用窗口控制提高速度

    • TCP 以1个段为单位,每发送一个段进行一次确认应答的处理。这样的传输方式有一个缺点,就是包的往返时间越长通信性能就越低。
    • 为解决这个问题,TCP 引入了窗口这个概念。确认应答不再是以每个分段,而是以更大的单位进行确认,转发时间将会被大幅地缩短。也就是说,发送端主机,在发送了一个段以后不必要一直等待确认应答,而是继续发送。如下图所示:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    •  
    • 窗口控制
    • 窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。上图中窗口大小为4个段。这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能。

    3.7 滑动窗口控制

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    滑动窗口

    • 上图中的窗口内的数据即便没有收到确认应答也可以被发送出去。不过,在整个窗口的确认应答没有到达之前,如果其中部分数据出现丢包,那么发送端仍然要负责重传。为此,发送端主机需要设置缓存保留这些待被重传的数据,直到收到他们的确认应答。
    • 在滑动窗口以外的部分包括未发送的数据以及已经确认对端已收到的数据。当数据发出后若如期收到确认应答就可以不用再进行重发,此时数据就可以从缓存区清除。
    • 收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置。这样可以顺序地将多个段同时发送提高通信性能。这种机制也别称为滑动窗口控制。

    3.8 窗口控制中的重发控制

    在使用窗口控制中, 出现丢包一般分为两种情况:

    • ① 确认应答未能返回的情况。在这种情况下,数据已经到达对端,是不需要再进行重发的,如下图:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    部分确认应答丢失

    • ② 某个报文段丢失的情况。接收主机如果收到一个自己应该接收的序列号以外的数据时,会针对当前为止收到数据返回确认应答。如下图所示,当某一报文段丢失后,发送端会一直收到序号为1001的确认应答,因此,在窗口比较大,又出现报文段丢失的情况下,同一个序列号的确认应答将会被重复不断地返回。而发送端主机如果连续3次收到同一个确认应答,就会将其对应的数据进行重发。这种机制比之前提到的超时管理更加高效,因此也被称为高速重发控制。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    高速重发控制

     

    四、网络层中的 IP 协议

    • IP(IPv4、IPv6)相当于 OSI 参考模型中的第3层——网络层。网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点通信”。
    • 网络的下一层——数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。
    • IP 大致分为三大作用模块,它们是 IP 寻址、路由(最终节点为止的转发)以及 IP 分包与组包。

    1. IP 地址

    1.1 IP 地址概述

    • 在计算机通信中,为了识别通信对端,必须要有一个类似于地址的识别码进行标识。在数据链路中的 MAC 地址正是用来标识同一个链路中不同计算机的一种识别码。
    • 作为网络层的 IP ,也有这种地址信息,一般叫做 IP 地址。IP 地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。因此,在 TCP/IP 通信中所有主机或路由器必须设定自己的 IP 地址。
    • 不论一台主机与哪种数据链路连接,其 IP 地址的形式都保持不变。
    • IP 地址(IPv4 地址)由32位正整数来表示。IP 地址在计算机内部以二进制方式被处理。然而,由于我们并不习惯于采用二进制方式,我们将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数。如下:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    1.2 IP 地址由网络和主机两部分标识组成

    • 如下图,网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP 地址的“主机标识”则不允许在同一个网段内重复出现。由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的 IP 地址都不会相互重叠。即 IP 地址具有了唯一性。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    IP地址的主机标识

    • 如下图,IP 包被转发到途中某个路由器时,正是利用目标 IP 地址的网络标识进行路由。因为即使不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    IP地址的网络标识

    1.3 IP 地址的分类

    • IP 地址分为四个级别,分别为A类、B类、C类、D类。它根据 IP 地址中从第 1 位到第 4 位的比特列对其网络标识和主机标识进行区分。
    • A 类 IP 地址是首位以 “0” 开头的地址。从第 1 位到第 8 位是它的网络标识。用十进制表示的话,0.0.0.0~127.0.0.0 是 A 类的网络地址。A 类地址的后 24 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。
    • B 类 IP 地址是前两位 “10” 的地址。从第 1 位到第 16 位是它的网络标识。用十进制表示的话,128.0.0.0~191.255.0.0 是 B 类的网络地址。B 类地址的后 16 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为65,534个。
    • C 类 IP 地址是前三位为 “110” 的地址。从第 1 位到第 24 位是它的网络标识。用十进制表示的话,192.0.0.0~223.255.255.0 是 C 类的网络地址。C 类地址的后 8 位相当于主机标识。因此,一个网段内可容纳的主机地址上限为254个。
    • D 类 IP 地址是前四位为 “1110” 的地址。从第 1 位到第 32 位是它的网络标识。用十进制表示的话,224.0.0.0~239.255.255.255 是 D 类的网络地址。D 类地址没有主机标识,常用于多播。
    • 在分配 IP 地址时关于主机标识有一点需要注意。即要用比特位表示主机地址时,不可以全部为 0 或全部为 1。因为全部为 0 只有在表示对应的网络地址或 IP 地址不可以获知的情况下才使用。而全部为 1 的主机通常作为广播地址。因此,在分配过程中,应该去掉这两种情况。这也是为什么 C 类地址每个网段最多只能有 254( 28 - 2 = 254)个主机地址的原因。

    1.4 广播地址

    • 广播地址用于在同一个链路中相互连接的主机之间发送数据包。将 IP 地址中的主机地址部分全部设置为 1,就成了广播地址。
    • 广播分为本地广播和直接广播两种。在本网络内的广播叫做本地广播;在不同网络之间的广播叫做直接广播。

    1.5 IP 多播

    • 多播用于将包发送给特定组内的所有主机。由于其直接使用 IP 地址,因此也不存在可靠传输。
    • 相比于广播,多播既可以穿透路由器,又可以实现只给那些必要的组发送数据包。请看下图:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    •  
    • IP 多播
    • 多播使用 D 类地址。因此,如果从首位开始到第 4 位是 “1110”,就可以认为是多播地址。而剩下的 28 位可以成为多播的组编号。
    • 此外, 对于多播,所有的主机(路由器以外的主机和终端主机)必须属于 224.0.0.1 的组,所有的路由器必须属于 224.0.0.2 的组。

    1.6 子网掩码

    • 现在一个 IP 地址的网络标识和主机标识已不再受限于该地址的类别,而是由一个叫做“子网掩码”的识别码通过子网网络地址细分出比 A 类、B 类、C 类更小粒度的网络。这种方式实际上就是将原来 A 类、B 类、C 类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。
    • 子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP 地址网络标识部分的位全部为 “1”,对应 IP 地址主机标识的部分则全部为 “0”。由此,一个 IP 地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由地定位自己的网络标识长度。当然,子网掩码必须是 IP 地址的首位开始连续的 “1”。
    • 对于子网掩码,目前有两种表示方式。第一种是,将 IP 地址与子网掩码的地址分别用两行来表示。以 172.20.100.52 的前 26 位是网络地址的情况为例,如下:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    • 第二种表示方式是,在每个 IP 地址后面追加网络地址的位数用 “/ ” 隔开,如下:

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    2. 路由

    • 发送数据包时所使用的地址是网络层的地址,即 IP 地址。然而仅仅有 IP 地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。
    • 该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫做静态路由控制,而后者叫做动态路由控制。
    • IP 协议始终认为路由表是正确的。然后,IP 本身并没有定义制作路由控制表的协议。即 IP 没有制作路由控制表的机制。该表示由一个叫做“路由协议”的协议制作而成。

    2.1 IP 地址与路由控制

    • IP 地址的网络地址部分用于进行路由控制。
    • 路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
    • 在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

    路由控制表与 IP 包发送

    3. IP 分包与组包

    • 每种数据链路的最大传输单元(MTU)都不尽相同,因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。
    • 任何一台主机都有必要对 IP 分片进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。
    • 经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。

    3.1 路径 MTU 发现

    • 分片机制也有它的不足。如路由器的处理负荷加重之类。因此,只要允许,是不希望由路由器进行 IP 数据包的分片处理的。
    • 为了应对分片机制的不足,“路径 MTU 发现” 技术应运而生。路径 MTU 指的是,从发送端主机到接收端主机之间不需要分片是最大 MTU 的大小。即路径中存在的所有数据链路中最小的 MTU 。
    • 进行路径 MTU 发现,就可以避免在中途的路由器上进行分片处理,也可以在 TCP 中发送更大的包。

    4. IPv6

    • IPv6(IP version 6)是为了根本解决 IPv4 地址耗尽的问题而被标准化的网际协议。IPv4 的地址长度为 4 个 8 位字节,即 32 比特。而 IPv6 的地址长度则是原来的 4 倍,即 128 比特,一般写成 8 个 16 位字节。

    4.1 IPv6 的特点

    • IP 得知的扩大与路由控制表的聚合。
    • 性能提升。包首部长度采用固定的值(40字节),不再采用首部检验码。简化首部结构,减轻路由器负担。路由器不再做分片处理。
    • 支持即插即用功能。即使没有DHCP服务器也可以实现自动分配 IP 地址。
    • 采用认证与加密功能。应对伪造 IP 地址的网络安全功能以及防止线路窃听的功能。
    • 多播、Mobile IP 成为扩展功能。

    4.2 IPv6 中 IP 地址的标记方法

    • 一般人们将 128 比特 IP 地址以每 16 比特为一组,每组用冒号(“:”)隔开进行标记。
    • 而且如果出现连续的 0 时还可以将这些 0 省略,并用两个冒号(“::”)隔开。但是,一个 IP 地址中只允许出现一次两个连续的冒号。

    4.3 IPv6 地址的结构

    • IPv6 类似 IPv4,也是通过 IP 地址的前几位标识 IP 地址的种类。
    • 在互联网通信中,使用一种全局的单播地址。它是互联网中唯一的一个地址,不需要正式分配 IP 地址。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    4.4 全局单播地址

    • 全局单播地址是指世界上唯一的一个地址。它是互联网通信以及各个域内部通信中最为常用的一个 IPv6 地址。
    • 格式如下图所示,现在 IPv6 的网络中所使用的格式为,n = 48,m = 16 以及 128 - n - m = 64。即前 64 比特为网络标识,后 64 比特为主机标识。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    全局单播地址

    4.5 链路本地单播地址

    • 链路本地单播地址是指在同一个数据链路内唯一的地址。它用于不经过路由器,在同一个链路中的通信。通常接口 ID 保存 64 比特版的 MAC 地址。

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    链路本地单播地址

    4.6 唯一本地地址

    • 唯一本地地址是不进行互联网通信时所用的地址。
    • 唯一本地地址虽然不会与互联网连接,但是也会尽可能地随机生成一个唯一的全局 ID。
    • L 通常被置为 1
    • 全局 ID 的值随机决定
    • 子网 ID 是指该域子网地址
    • 接口 ID 即为接口的 ID

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    唯一本地地址

    4.7 IPv6 分段处理

    • IPv6 的分片处理只在作为起点的发送端主机上进行,路由器不参与分片。
    • IPv6 中最小 MTU 为 1280 字节,因此,在嵌入式系统中对于那些有一定系统资源限制的设备来说,不需要进行“路径 MTU 发现”,而是在发送 IP 包时直接以 1280 字节为单位分片送出。

    4.8 IP 首部(暂略)

    5. IP 协议相关技术

    • IP 旨在让最终目标主机收到数据包,但是在这一过程中仅仅有 IP 是无法实现通信的。必须还有能够解析主机名称和 MAC 地址的功能,以及数据包在发送过程中异常情况处理的功能。

    5.1 DNS

    • 我们平常在访问某个网站时不适用 IP 地址,而是用一串由罗马字和点号组成的字符串。而一般用户在使用 TCP/IP 进行通信时也不使用 IP 地址。能够这样做是因为有了 DNS (Domain Name System)功能的支持。DNS 可以将那串字符串自动转换为具体的 IP 地址。
    • 这种 DNS 不仅适用于 IPv4,还适用于 IPv6。

    5.2 ARP

    • 只要确定了 IP 地址,就可以向这个目标地址发送 IP 数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个 IP 地址所对应的 MAC 地址。
    • ARP 是一种解决地址问题的协议。以目标 IP 地址为线索,用来定位下一个应该接收数据分包的网络设备对应的 MAC 地址。不过 ARP 只适用于 IPv4,不能用于 IPv6。IPv6 中可以用 ICMPv6 替代 ARP 发送邻居探索消息。
    • RARP 是将 ARP 反过来,从 MAC 地址定位 IP 地址的一种协议。

    5.3 ICMP

    • ICMP 的主要功能包括,确认 IP 包是否成功送达目标地址,通知在发送过程当中 IP 包被废弃的具体原因,改善网络设置等。
    • IPv4 中 ICMP 仅作为一个辅助作用支持 IPv4。也就是说,在 IPv4 时期,即使没有 ICMP,仍然可以实现 IP 通信。然而,在 IPv6 中,ICMP 的作用被扩大,如果没有 ICMPv6,IPv6 就无法进行正常通信。

    5.4 DHCP

    • 如果逐一为每一台主机设置 IP 地址会是非常繁琐的事情。特别是在移动使用笔记本电脑、只能终端以及平板电脑等设备时,每移动到一个新的地方,都要重新设置 IP 地址。
    • 于是,为了实现自动设置 IP 地址、统一管理 IP 地址分配,就产生了 DHCP(Dynamic Host Configuration Protocol)协议。有了 DHCP,计算机只要连接到网络,就可以进行 TCP/IP 通信。也就是说,DHCP 让即插即用变得可能。
    • DHCP 不仅在 IPv4 中,在 IPv6 中也可以使用。

    5.5 NAT

    • NAT(Network Address Translator)是用于在本地网络中使用私有地址,在连接互联网时转而使用全局 IP 地址的技术。
    • 除转换 IP 地址外,还出现了可以转换 TCP、UDP 端口号的 NAPT(Network Address Ports Translator)技术,由此可以实现用一个全局 IP 地址与多个主机的通信。
    • NAT(NAPT)实际上是为正在面临地址枯竭的 IPv4 而开发的技术。不过,在 IPv6 中为了提高网络安全也在使用 NAT,在 IPv4 和 IPv6 之间的相互通信当中常常使用 NAT-PT。

    5.6 IP 隧道

    太厉害了,终于有人能把TCP/IP 协议讲的明明白白了

     

    夹着 IPv4 网络的两个 IPv6 网络

    • 如上图的网络环境中,网络 A 与网络 B 之间无法直接进行通信,为了让它们之间正常通信,这时必须得采用 IP 隧道的功能。
    • IP 隧道可以将那些从网络 A 发过来的 IPv6 的包统合为一个数据,再为之追加一个 IPv4 的首部以后转发给网络 C。
    • 一般情况下,紧接着 IP 首部的是 TCP 或 UDP 的首部。然而,现在的应用当中“ IP 首部的后面还是 IP 首部”或者“ IP 首部的后面是 IPv6 的首部”等情况与日俱增。这种在网络层的首部后面追加网络层首部的通信方法就叫做“ IP 隧道”。

     

    作者:涤生_Woo

    链接:https://www.jianshu.com/p/9f3e879a4c9c

     

    展开全文
  • Android设备的USB通讯

    千次阅读 2015-12-17 14:33:24
    摘 要: AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议。该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和设备控制领域提供了条件。介绍了Android...

    摘 要: AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议。该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和设备控制领域提供了条件。介绍了Android系统下USB通信的两种模式,并给出了USB配件模式下基于AOA协议实现Android手机控制步进电机的实例。
    关键词: Android;AOA;USB通信

    最近业界的统计数据显示,智能手机与自动化及机械系统之间存在着很大的市场潜力。2011年Google推出Android开放配件协议AOA(Android Open Accessory Protocol)及配件开发工具包ADK(Accessory Development Kit)提供了Android设备与Android配件通过USB或蓝牙进行通信的API,为基于Android系统的智能设备控制外设提供了条件。利用Android,系统可以连接从家用电器到重型机械、机器人等多种设备。
    Android作为一种基于开源Linux的智能手机操作系统,广泛应用于手机、平板电脑等移动设备中。在各种Android设备提供的接口中,USB接口是常见接口,该接口的作用是为Android设备充电并通过PC端的驱动程序实现Android设备与PC的交互。如何拓展Android设备的USB接口功能是当前的研究热点之一。针对该问题,本文介绍了一种基于AOA协议实现Android设备USB通信的方案,并通过Android手机控制步进电机的案例给出了方案的实现方法。
    

    1 Android USB通信模式
    Android系统支持多种USB外围设备。根据Android设备在USB通信中充当的角色,可以将Android USB通信分为主机模式(Host Mode)和配件模式(Accessory Mode)[1]两种模式。
    1.1 主机模式
    主机模式是指Android设备充当USB主机并为总线供电。此模式下,Android设备需支持USB主机功能或OTG功能,此时Android设备的USB主机称为USB嵌入式主机EH(Embedded Host)[2]。与PC上的USB主机相比,EH设备可能无法为连接到其总线上的未识别外围设备加载驱动程序,因此它们对其目标外围设备列表TPL(Target Peripheral List)进行了定义[3]。这些外围USB设备大部分为HID设备(Human Interface Device)、BOMS设备(Bulk Only Mass Storage,如U盘)和CDC设备(Comm-
    unication Device Class,USB通信设备类,如打印机),其驱动程序已存在于Android平台的系统中(Linux Kernel),因此Android设备可以与其直接通信。
    主机模式示意图如图1所示。
    1.2 配件模式
    配件模式是指Android设备充当USB从机,外部设备充当主机并为总线供电。此模式下,外部USB设备称为Android配件。该模式为不具备主机功能的Android设备提供与USB设备交互的能力。Android设备和Android配件都必须支持AOA协议。不支持AOA协议的设备可以通过Android配件开发板(ADK板)与Android设备连接,成为Android设备的间接配件。
    配件模式示意图如图2所示。

    本文介绍的基于AOA协议的Android设备USB通信方案即采用配件模式。主机模式和配件模式在Android 3.1(API level 12)及更高的平台中直接支持。配件模式作为一个附加库也被Android 2.3.4(API level 10)支持。设备厂商可以选择是否在设备的Linux系统镜像中包含附加库。对主机和配件模式的支持最终取决于设备的硬件,而不是Android平台的等级(软件)。
    

    1.3 Android配件、ADK及AOA协议
    Android配件是指遵循AOA协议的硬件,是Android配件模式中的概念。从硬件角度讲,Android配件具有实现USB EH功能和AOA协议的微处理器以及包括USB接口在内的输入/输出接口。Android配件必须与Android平台一起工作。
    ADK是开发Android配件的参考开发包,该开发包基于Arduino公司的开源电子成型平台[4]。ADK开发包包括Android配件硬件设计文档、Android配件固件源码、Android设备程序源码。
    AOA协议是Android设备与Android配件之间进行USB通信需遵循的连接协议,该协议规定了Android配件如何检测Android设备并与其建立通信。AOA协议规定配件需具备以下4项功能[5]:
    (1)侦听自身的USB接口,等待与其连接的Android设备。
    (2)检测Android设备是否支持AOA协议。
    (3)如果需要,启动Android设备的USB配件模式。
    (4)与Android设备建立USB通信。
    2 USB配件模式开发
    Android配件模式开发需要在Android设备端和Android配件端分别进行开发。
    2.1 Android设备端开发
    Android设备端需进行以下两项工作:
    (1)确保设备支持AOA协议。设备对AOA协议是否支持由设备硬件和Android系统版本决定。
    (2)调用ADK中的API开发USB应用程序。
    ADK中与USB配件模式相关的两个类是UsbManager和UsbAccessory。UsbManager用于枚举连接的USB配件并与其通信,UsbAccessory代表Android配件并包含获取配件描述信息的方法。
    在编写程序前,需要为Android工程做以下设置工作[6]:
    (1)配置Android Mainfest文件,声明使用配件模式,指定最低SDK版本,并设置配件过滤意图。
    (2)配置accessory_filter.xml文件。accessory_filter.xml文件用于描述希望Android设备检测的USB配件的描述信息,包含manufacturer、model、version 3个属性。在Android配件的固件程序中,同样包含以上3个属性值。根据AOA协议,当Android配件连接到Android设备上时,配件会发送该属性值到Android设备。Android程序将唯一响应与其accessory_filter.xml中指定的属性值匹配的Android配件。
    Android设备端程序开发的流程如下:
    (1)发现配件并过滤。
    (2)获取与配件通信的权限。通过广播接收器(Broad-castReceiver)的方式以弹出授权对话框的形式询问用户是否允许与Android配件通信。
    (3)开始与配件通信。创建文件输入输出流代表USB批量传输端点,通过独立线程以流传输的方式实现USB通信。
    (4)终止与配件通信。通过广播接收器侦听USB配件与Android设备的断开操作,当事件发生时,关闭文件输入/输出流。
    2.2 Android配件端开发
    Android配件端需进行以下两项工作:
    (1)根据ADK中的硬件设计文档设计具有USB主控制器的硬件电路,并支持USB协议。
    (2)将AOA协议以固件代码的形式下载至Android配件的主芯片中。
    目前,已有多家公司为Android设备的配件模式开发提供专门的ADK板,ADK板将AOA协议以程序的方式烧写至芯片中,ADK板也即Android配件。目前常见的ADK板有Arduino的Arduino Mega ADK板、SparkFun的IOIO板,此外还有DIY Drones、Microchip、RT Corp、Seeed Studio、Troido等公司生产的ADK板。采用ADK板将可节省Android配件端的开发时间。
    3 系统设计
    3.1 总体设计
    构建的系统框图如图3所示。

    采用的ADK板是由英国飞特蒂亚FTDI(Future Technology Devices International Ltd.)公司生产的Android平台USB主控模块(USB Android Host Module)[7],型号为UMFT311EV,于2012年7月31日推出。UMFT311EV板具有USB主控功能和USB接口桥接功能,其特性如下:
    (1)采用USB Android主控芯片FT311D,单芯片内集成USB协议。
    (2)兼容USB 2.0全速模式(最大传输速率12 Mb/s,即1.5 MB/s,最大输出电流500 mA)。
    (3)6种接口类型,即GPIO(7路)、UART、PWM(4路)、I2C Master、SPI Master、SPI Slave。
    (4)6种接口只能单一工作,通过跳线帽和3个接口类型选择引脚选择接口类型。
    UMFT311EV板支持AOA协议,作为Android配件无需用户做配件端的开发,而且为Android设备端的程序开发提供Java驱动包。因此采用UMFT311EV板能够实现Android手机、平板与其他设备的通信,进行设备控制和数据采集,并能与现有系统快速集成,降低开发难度和开发时间。
    在此,以Android手机小米MI2和步进电机28BYJ48为例,通过UMFT311EV板的4路GPIO口实现Android手机USB控制步进电机。
    

    3.2 软件设计
    在设计Android手机端软件时,采用FTDI公司为Android平台提供的驱动包。根据该驱动包,架构如图4所示的应用程序。

    FT311驱动层提供驱动UMFT311EV板上接口的方法和实现Android应用程序与UMFT311EV板USB通信的方法。该层为用户层提供封装的方法,为用户开发程序屏蔽底层编程细节。用户层通过调用FT311驱动层的方法实现对UMFT311EV板上接口的控制。
    本实验编程采用FT311驱动层提供的配置GPIO、读GPIO、写GPIO、重置GPIO 4个方法实现对步进电机的控制,程序流程如图5所示。
    
    展开全文
  • 通信算法之二十六:5G的这么简单明了

    万次阅读 多人点赞 2019-01-20 16:23:53
    关于5G通信,常见的文章都的晦涩难懂,不忍往下看,特转载一篇,用大白话实现5G入门。 简单说,5G就是第五代通信技术,主要特点是波长为毫米级,超宽带,超高速度,超低延时。1G实现了模拟语音通信,大哥大没有...
  • 终于透了,史上最详细的RS485串口通讯

    万次阅读 多人点赞 2020-01-09 09:23:08
    RS485接口组成的半双工网络,一般是两线制,多采用屏蔽双绞线传输,这种接线方式为总线式拓扑结构在同一总线上最多可以挂接32个结点。我们知道,最初数据是模拟信号输出简单过程量,后来仪表接...
  • 基于AOA协议实现Android设备的USB通信

    万次阅读 2014-07-17 11:50:29
    摘 要: AOA协议是Google公司推出的用于实现Android设备与外围设备之间USB通信的协议。该协议拓展了Android设备USB接口的功能,为基于Android系统的智能设备应用于数据采集和设备控制领域提供了条件。介绍了...
  • 计算机通信计算机与外部设备或计算机与计算机之间的信息交换。 通信有并行通信和串行通信两种方式。在多微机系统以及现代测控系统中信息的交换多采用串行通信方式。 计算机通信是将计算机技术和通信技术的相结合...
  • 移动设备管理(MDM)与OMA(OTA)DM协议向导(一)——从WiMAX起 一、为什么需要移动设备管理(MDM)   移动电话等移动设备已经成为人们非常重要的通信工具,而且有效的移动用户数每天都在增长,移动设备的复杂性...
  • 什么是终端设备-终端设备的分类

    千次阅读 2020-09-01 10:06:27
    终端设备dao通常设置在能利用通信设施与远处计算机联接工作的方便场所,它主要由通信接口控制装置与专用或选定的输入输出装置组合而成。 终端设备分为通用的和专用的两类。 通用终端设备泛指附有通信处理控制功能的...
  • 什么是可见光通信

    千次阅读 2017-11-07 20:26:45
    什么是可见光通信? 现在有很多关于可见光通信(VLC)的讨论,事实上这个博客...在这个网站上,当我们谈论VLC时,我们倾向于的是照明源(例如灯泡),除了照明之外,还可以使用相同的光信号发送信息。所以在我们
  • 网络运维管理,是为保障电信网络与业务正常、安全、有效运行而采取的生产组织管理活动,简称运维管理或OAM。通俗点,网管也算半个运维。  目前,绝大多数电信运营商是真正意义上的现代企业,面临的问题也和...
  • 聊聊我从事过的通信行业

    千次阅读 2019-05-25 08:11:43
    想想我自己本科主修通信工程,研究生再修信息与通信工程,从本科开始就学过通信方面的历史和专业课程,后来校招去通信公司后也接受了一些通信方面的文化和情怀的熏陶。嗯,聊聊吧! 其实站在现在这个时间节点来看...
  • 1 “通信”与“通讯”傻傻分得清 传统意义上的“通讯”主要电话、电报、电传。通讯的“讯”消息(Message),媒体讯息通过通讯网络从一端传递到另外一端。媒体讯息的内容主要是话音、文字、图片和视频图像。其...
  • 网关在传输层上以实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。 2. 如何来理解网关 大家都知道,从一个房间走到另一个房间,必然要经过一扇门。同样,从一个网络...
  • 串行通信与并行通信概念

    千次阅读 2011-04-07 20:59:00
     串行通信的传输速度慢,但使用的传输设备成本低,可利用现有的通信手段和通信设备,适合于计算机的远程通信;并行通信的速度快,但使用的传输设备成本高,适合于近距离的数据传输,异步串行通信与同步串行通信: ...
  • 通信系统模型综述

    2012-05-02 21:57:06
    伴随着人类的文明、不和科学技术的发展,电信技术也是以一日千里的速度飞速发展,如今,在自然科学领域涉及“通信”这一术语时,一般指“电通信”。广义来,光通信也属于电通信,因为光也是一种电磁波。 在电通信...
  • 工业网络的“语言”——通讯标准 a) CC-Link CANopen Modbus等; b) 民用网络:TCP-IP协议 c) 民用网络VS工业网络——网络架构:     i. 民用网络架构:        ...
  • 1 引言  随着互联网技术的不断发展和...通俗意义上来家庭网络是融家庭控制网络和多媒体信息网络于一体的家庭信息化平台, 是在家庭范围内实现信息设备、通信设备、娱乐设备、家用电器、自动化设备、照明设备、
  • 半双工通信和全双工通信的区别

    千次阅读 2019-09-22 14:15:53
    单工通信(Simplex Communication)是消息只能单方向传输的工作方式。 在单工通信中,通信的信道是单向的,发送端与接收端也是固定的,即发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息。...
  • RS485通信和Modbus通信协议汇总

    万次阅读 多人点赞 2018-08-06 16:31:21
    主从模式是在半双工通讯方式上,2个或者2个以上的设备组成的通讯系统中: (1) 至少且只有一个主机,其他的都是从机 (2) 不管任何时候,从机都不能主动向主机发送数据 (3) 主机具有访问从机的权限,从机不可以...
  • ModBus通信协议

    万次阅读 2017-05-10 14:04:54
    主从模式是在半双工通讯方式上,2个或者2个以上的设备组成的通讯系统中: (1) 至少且只有一个主机,其他的都是从机 (2) 不管任何时候,从机都不能主动向主机发送数据 (3) 主机具有访问从机的权限,从机不可以...
  • 通信理论

    千次阅读 2018-06-08 13:22:55
    1.1. 软、硬件共享计算机网络允许网络上的用户共享网络上各种不同类型的硬件设备,可共享的硬件资源有:高性能计算机、大容量存储器、打印机、图形设备、通信线路、通信设备等。共享硬件的好处是提高硬件资源的使用...
  • 太厉害了,终于有人能把...然而在很多情况下,它只是利用 IP 进行通信必须用到的协议群的统称。具体来说,IP 或 ICMP、TCP 或 UDP、TELNET 或 FTP、以及 HTTP 等都属于 TCP/IP 协议。 一图看完本文 一、 计算机...
  • 1.背景介绍  要想了解什么是TCP/IP协议,就要知道什么是网络协议。书本上的定义:网络协议是为计算机网络中进行数据交换而建立的...对于计算机来说,两台机器之间的通信就要制定各种各样的协议,例如:文件传输使...
  • Linux块设备驱动总结

    千次阅读 2016-03-26 08:36:06
    《Linux设备驱动程序》第十六章 块设备驱动程序读书笔记 简介 一个块设备驱动程序主要通过传输固定大小的随机数据来访问设备 Linux内核视块设备为与字符设备相异的基本设备类型 Linux块设备驱动程序接口使得块...
  • 联网常见通信协议与通讯协议梳理【上】- 通讯协议1 “通信”与“通讯”傻傻分得清传统意义上的“通讯”主要电话、电报、电传。通讯的“讯”消息(Message),媒体讯息通过通讯网络从一端传递到另外一端。媒体...
  • IO说白了就是输入输出,宏观角度可以分为IO设备和IO接口两个部分,IO设备就是输入输出设备,IO设备的工作方式可以由程序进行控制的。IO接口可以理解为 “计算机和其他计算机”,或者 ,“程序与计算机的IO设备”...
  • 串口通信详解

    万次阅读 多人点赞 2020-09-08 21:33:44
    一、通信的基础概念 (1)通信的发展历史 通信:狼烟 ---> 信件 ---> 电子通信(电报、电话、网络信号)。... 通信的传输方法是经过编码后的通信信息如果在传输介质上传输的过程。 总结: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 73,488
精华内容 29,395
关键字:

一般所讲的通信设备是指