是否所有连接Internet的事物都使用相同的“应用程序-TCP-IP-硬件”堆栈进行通信?


15

我不是特别精通互联网,而物联网技术对我来说尤其令人困惑。我正在阅读这份有关互联网结构的斯坦福白皮书。在图2中,它表示一台计算机(PC)将用来通过Internet创建,处理并将消息发送到另一台计算机的软件“堆栈”的表示形式。

  • 是否所有类型的计算机-智能手机/电视/游戏机等都使用这种格式?

  • 操作系统重要吗?

  • (在这方面)蜂窝互联网和Wifi /以太网之间有什么区别吗?

  • 似乎没有“应用程序”层的单功能设备怎么办?例如,网络连接的摄像头,电灯开关或恒温器。



3
最好每个问题只问一个问题-但是对于这些非常基本的问题来说有点困难。如果您有后续问题,请务必尝试使其更具体。
肖恩·胡利哈内

所有设备都有一个应用程序层。网络连接的电灯开关的应用程序层是在收到命令时打开和关闭灯的软件。
user253751 '17

@immibis,这听起来简直太疯狂了,但是协议栈层并不是设备可以拥有的属性。在TCP / IP中,应用程序层包含在IP计算机网络上的进程间通信中使用的通信协议和接口方法。设备可以托管一个系统,而该系统可能正在执行应用程序,但是设备不具有应用程序层。TCP / IP本身是一个概念模型。
julian

@SYS_V当我说“设备具有应用程序层”时,我的意思是“设备具有一些实现TCP / IP描述为应用程序层的软件组件”
user253751 '17

Answers:


26

在这篇文章中将要解决的问题中可能存在一些误解或误解。

  • 在图2中,它表示一台计算机(PC)将用来在Internet上创建,处理和发送消息的软件“堆栈”的表示形式。

  • 是否所有类型的计算机-智能手机/电视/游戏机等都使用这种格式?

  • (在这方面)蜂窝互联网和Wifi /以太网之间有什么区别吗?

  • 似乎没有“应用程序”层的单功能设备怎么办?例如,网络连接的摄像机,电灯开关或恒温器。

这些误解的存在需要对以下内容进行解释(以便为以后的讨论提供背景):

  • 互联网是什么
  • 什么是TCP / IP协议套件
  • 什么是应用程序

然后将直接解决这些问题。

请注意,鉴于它们的重要性和复杂性,整个系列的书都是在TCP / IP协议套件上编写的。这里的定义和解释将主要来自Wikipedia,TCP / IP图解第一卷第二版: Stevens和Fall 的协议以及IBM的TCP / IP教程和技术概述

1.互联网

互联网在技术上是一个广域网(WAN) ,而是把它作为一种超网络的(网络的网络)或多种不同的聚合更加有用的方式相互连接的网络作品。这是通过Internet的一部分路由路径的图片:

路径可视化

  • 互联网由许多连接的网络组成
  • 一个网络可能包含1个或多个系统(主机
  • 连接的系统通常在某种硬件平台上运行
  • 连接到网络的系统类型及其运行的硬件存在很大差异

可以在Arstechnica文章“ Internet的工作方式”中找到有关Internet的工作方式的有趣信息:海底光纤,罐子中的大脑和同轴电缆

那么,在连接到不同网络的不同硬件平台上运行的不同系统又如何能够相互通信呢?在如此庞大的异构系统和网络之间如何进行通信?所有这些如何同时进行?

2. Internet协议套件

答案由Internet协议套件(也称为TCP / IP协议套件)提供。在Internet体系结构的设计过程中考虑了这些问题(TCP / IP说明,第1.1节:体系结构原理):

有几个目标指导了Internet体系结构的创建。在[C88]中,Clark叙述了主要目标是“开发一种有效利用现有互连网络的复用技术”。该声明的实质是Internet体系结构应该能够互连多个不同的网络,并且多个活动应该能够在最终互连的网络上同时运行

Internet协议套件(Wikipedia):

Internet协议套件是Internet和类似计算机网络上使用的概念模型和通信协议集。

互联网协议套件提供了端到端的数据通信,指定了应如何打包,寻址,传输,路由和接收数据。此功能分为四个抽象层,用于根据涉及的网络范围对所有相关协议进行排序。

考虑TCP / IP协议套件的一种方法是作为规范,说明在不同系统和不同网络上运行的进程如何相互通信。本质上,TCP / IP协议套件提供了进程间通信的标准。

正确实现TCP / IP协议套件的任何系统都可以使用其提供的功能,以允许其进程通过Internet进行通信。实际上,为了使进程可以通过Internet与在其他网络上的远程系统上运行的其他进程进行通信,系统必须使用符合标准的TCP / IP套件协议。

TCP / IP协议套件

3.应用

应用软件(维基百科):

应用程序(简称应用程序)是一种计算机程序,旨在执行一组协调的功能,任务或活动,以使用户受益。应用程序的示例包括文字处理器,电子表格,会计应用程序,Web浏览器,媒体播放器,航空飞行模拟器,控制台游戏或照片编辑器。集体名词应用程序软件是指所有应用程序。这与主要与运行计算机有关的系统软件形成对比。

应用软件

可以将应用程序视为在系统上运行的用户空间进程。除上面列出的示例外,它还可以包括诸如(非内核模式)计算机病毒,Web服务器,相机应用程序和传感器数据聚合程序之类的程序。

当应用程序通过Internet传输和接收数据时,它必须利用其主机系统的TCP / IP协议套件实现。从应用程序层(维基百科):

在TCP / IP中,应用程序层包含在Internet协议(IP)计算机网络之间的进程间通信中使用的通信协议和接口方法。应用层仅使通信标准化,并依赖基础传输层协议来建立主机到主机的数据传输通道并管理客户端服务器或对等网络模型中的数据交换。

TCP / IP协议套件的应用层包括诸如文件传输协议(FTP),域名系统(DNS)以及可能最著名的超文本传输​​协议(HTTP)之类的协议。

例如,应用程序层协议HTTP指定如何在(通常)不同系统上运行的2个进程之间传输数据:客户端应用程序,Web浏览器和服务器应用程序,Web服务器进程。

澄清潜在的误解

  1. 在图2中,它表示一台计算机(PC)将用来通过Internet创建,处理并将消息发送到另一台计算机的软件“堆栈”的表示形式。

TCP / IP协议套件不是软件堆栈。Technopedia

软件堆栈是一组程序,它们协同工作以产生结果或实现共同的目标。软件堆栈还指以特定的和定义的顺序朝着共同目标运行的任何应用程序集,或者指一组作为一组工作的实用程序或例行应用程序。可安装文件,产品的软件定义和修补程序可以包含在软件堆栈中。LAMP(Linux,Apache,MYSQL,Perl或PHP或Python)是一种流行的基于Linux的软件堆栈。WINS(Windows Server,Internet Explorer,.NET,SQL Server)是一种流行的基于Windows的软件堆栈。

而是一个协议栈,通常由内核(也来自Technopedia)实现:

协议栈是指同时运行的一组协议,用于实现网络协议套件。

堆栈中的协议确定分层网络模型(例如OSI或TCP / IP模型)的互连性规则。为了成为一个协议栈,协议必须具有互操作性,能够在网络层之间垂直连接并且在每个传输段的端点之间水平连接。


  1. 是否所有类型的计算机-智能手机/电视/游戏机等都使用这种格式

TCP / IP协议套件是与硬件和操作系统无关的通信规范,而不是格式。如果在一个硬件平台上运行的进程需要与在不同硬件平台上的远程系统上运行的进程进行通信,并且通信是通过Internet进行的,则系统必须

  • 正确实现TCP / IP协议套件,并
  • 必须使用此套件中的适当协议来完成进程间通信

  1. (在这方面)蜂窝互联网和Wifi /以太网之间有什么区别吗?

我对这个问题的解释是“移动设备连接到GSM网络的方式与移动设备连接到WiFi网络的方式是否有所不同?”

区别在于网络接口层。

该问题在该问题所链接的文章的图表中暴露了对TCP / IP协议套件的不良描述。供参考,如下图:

糟糕的TCP / IP图

最低层称为“硬件”,应称为链路层媒体访问控制(MAC)层网络接口层

从IBM的“ TCP / IP教程和技术概述”第34页:

网络接口层(也称为链路层或数据链路层)是实际网络硬件的接口。该接口可以提供也可以不提供可靠的传递,并且可以是面向数据包或流的。实际上,TCP / IP在这里没有指定任何协议,但是可以使用几乎任何可用的网络接口,这说明了IP层的灵活性。示例包括IEEE 802.2,X.25(本身是可靠的),ATM,FDDI甚至是SNA。

这是一个正确而高级的描述(来自《 TCP / IP指南》):

TCP / IP堆栈的高级图

网络接口层的讨论之所以有意义是因为,在这一层,蜂窝/移动设备连接到GSM网络与WiFi网络的方式有所不同。

  • 当连接到GSM网络时,用于处理移动设备和基站收发器(BTS)之间的连接的网络接口层协议通常由3G指定

  • 当连接到WiFi无线访问点(WAP)时,所使用的协议由IEEE 802.11标准指定。


  1. 似乎没有“应用程序”层的单功能设备怎么办?例如,网络连接的摄像头,电灯开关或恒温器

如前所述,TCP / IP协议套件的应用程序层中的协议提供了有关如何在进程之间交换应用程序数据的标准。

这些层是概念性的。它们不驻留在系统或硬件平台上。

网络连接的摄像机,电灯开关和恒温器可能正在运行的进程通过互联网与远程系统上运行的进程进行通信(检查固件更新,与服务器的数据交换等)。这些进程或应用程序将利用TCP / IP协议套件的实现来完成此进程间通信。

TCP / IP协议套件和嵌入式系统(“ IoT”)

尽管有各种各样的应用程序使用运行在传统PC或服务器上的不同应用程序层协议,但是在硬件平台如何连接到它们各自的访问点(网络接口/数据链路层)方面并没有太大差异。它主要通过以太网有线或无线方式完成。

对于通过TCP / IP进行通信的各种嵌入式系统而言,情况有所不同。这是一个说明(来自Postscapes):

物联网和TCP / IP 1

物联网和TCP / IP 2

有关更多信息,请参见以下文章:

了解物联网背后的协议

物联网标准和协议

物联网技术指南


在此详细信息方面,我的netadmin成员感到遗憾的是,没有关于TCP / IP的字眼,这意味着IP上的TCP,TCP完全未绑定到IP,它也已在IPX网络上实现(即使sigle是附近,它们是2个非常不同的协议)
Tensibai'4

1
@Tensibai IPX上的TCP是否与SPX基本上相同(即可靠的基于端口的传输版本)?-但这让我想起了这样的说法,即两个希望通过Internet(即,跨不同网络)进行通信的主机必须实现TCP / IP的说法并不完全正确:网络1上的主机A和网络3上的主机B可能会说例如,即使连接网络2是纯TCP / IP,也要使用IPX / SPX,前提是网络1和3中有隧道网关...
Hagen von Eitzen

2
@hagen不,SPX等同于TCP,但绝对不能与TCP系统互连,因此为什么要开发IP over TCP,以允许IP和IPX上的系统之间使用简单的第3层路由器进行端到端TCP通信。是的,互联网主要依靠IP,MPLS和路由协议(我可能会忘记一些),TCP在总体路由中不起作用,只是在它上面流通。
Tensibai '17

@Tensibai如果我犯了一个或多个错误,请让我知道,我将尽力纠正它们
julian

@SYS_V并不是一个真正的错误,一些快捷方式使我有些困扰。让我们说从TCP通信的角度来看是可以的:)对于愿意研究问题的人,有所有必要的信息。我觉得您在第一段中对OP有点不礼貌,我明天将尝试(通过计算机)提出修改建议,以解决我的问题:)
Tensibai

12

是否所有类型的计算机-智能手机/电视/游戏机等都使用这种格式?

为了在互联网上交换东西,它必须经过某个地方的IP堆栈。

操作系统重要吗?

IP协议由RFC 791定义,因此OS / Firmware必须遵守该协议,无论它是什么。

(在这方面)蜂窝互联网和Wifi /以太网之间有什么区别吗?

简化一点,这里的区别在于第1层(物理)无线电信号与电线上的电信号。有关开放系统互连模型(OSI模型)维基百科页面的更多详细信息。

它们都用于在其特定介质上转置第3层(网络)(此处为IP)。

似乎没有“应用程序”层的单功能设备怎么办?例如,网络连接的摄像机,电灯开关或恒温器。

应用层与特定的通信协议(HTTP,SSH等)相关,例如,它不一定是Chrome或Firefox之类的应用。
通常,那些协议将在TCP之上实现,而某些协议则在UDP之上实现,这是因为希望不阻塞等待确认,或者获取过时的数据包没有任何意义(语音呼叫,流传输)。还有其他第4层协议,但通常用于特定用途,例如ICMP for ping。当您希望确保某些数据到达目的地时,选择TCP是协议。

对于“远程设备”(例如您的示例中的恒温器),它可能会使用现有的协议(例如HTTP)或使用专有协议来发送其数据,该协议仍将位于应用程序层,因为它将不仅仅是传输协议。
它可能仅在第4层上完成,但是这需要创建一个新协议,而开销通常不值得,并且会使系统与其他系统不兼容,在我看来,使用开放标准是一种更好的方法。


3
也许值得澄清的是,TCP-IP在任何操作系统(从mbed / arduino到MC Windows和Linux)中都是相当普遍的“必须具备”。
肖恩·霍利汉

确实,对于高级协议,声音是如此隐含,以至于我忘记了。
Tensibai '17

答案1和答案2是非答案,答案3是使用OSI参考模型而不是TCP / IP协议套件进行解释的。本文中的答案均未解决问题中出现的概念性错误。
julian

2
@Sys_v我不是写Novell的人:)
Tensibai '17

5

尽管确实有任何互联网连接的设备都将使用TCP / IP(或UDP)进行通信,但这确实是使事情变得有趣的堆栈的下一个层次。

任何现代物联网设备都将使用TLS提供加密和身份验证。从理论上讲,这可以防止其他任何人观察或干扰正在传递的消息。TCP / IP堆栈的重要考虑因素是,可以轻松观察传输的许多信息-这通常很容易导致安全漏洞。

设备不需要“从源头”连接到互联网,因此不需要通过蓝牙实现TCP(例如)。您可能还会看到使用移动电话协议(例如常规SMS或文本)的IoT设备是它们的最后一跳。最终,这些协议(以某种方式针对已安装的环境选择)很可能会通过集线器设备桥接到“ Internet”。


关于第二段的前提,恐怕我们甚至会遇到比今天晚些时候设计的设备,而仍然忽略了加密货币
Hagen von Eitzen

1
现代意义是使用当今的最佳实践设计的,而不仅仅是简单的事情。
肖恩·霍利哈内

4

所有要使用基于IP的TCP的设备都需要一个TCP / IP堆栈。

该协议是标准化的,因此来自不同制造商或使用不同操作系统的设备可以相互理解。

请注意,TCP确保数据包到达,否则将通知发送方其丢失。当您无法承受丢失任何数据而又不了解数据(例如与银行的通信)时,将使用TCP。

还有UDP,它发送数据包和“希望它们到达那里”。例如,这可用于流音乐或视频,其中丢失几帧不是致命的。

重要的是标准化。


2

堆栈本身是一个虚拟的概念。堆栈中的每一层都会修改通过物理介质(无线电波或其他电子信号)发送的最终位。没有规则说堆栈中的每一层都必须以单个离散的代码或硬件单元进行设计。例如,iEthernet芯片结合了TCP,IP,MAC和PHY层,使开发人员可以执行TLS和应用层软件的任务。

就是说,所有位都必须符合所涉及的各种协议,因此,通常更容易将每一层设计为单独的实体,因此可以对其进行独立测试和验证。大多数设备,包括智能手机,智能电视和游戏机,通常都从专门从事某些领域的第三方购买芯片。例如,大多数电话仅使用几种不同的蓝牙芯片中的一种。这意味着制造商不必担心每个新产品都会重新发明轮子。

从理论上讲,某些小型专用设备可能只有一个带有嵌入式SoC(片上软件)的处理器,该处理器将所有网络层(应用程序,TLS,TCP,IP,PHY)作为单个离散的代码单元进行处理。我现在找不到任何具体示例,但是如果一些小型,低功耗或专用功能设备将堆栈的所有各层组合到一个单元中以减少功耗(延长电池寿命),这也不会令我感到惊讶。更大,更复杂的产品(例如电视,电话和游戏系统)可能至少具有3层(应用程序,操作系统和硬件),而烤面包机可能只有1或2层。


注意:我并不是在说我链接的特定烤面包机有1或2层,只是说如果按照这种方式进行设计(这是一种单一用途的设备)将是合乎逻辑的。


烤面包机将如何不能具有所有层次?您可以将网络电缆插入其中或对WiFi波产生反应-因此它实现了PHY层。In可以与本地和远程设备(例如您的iPhone)进行通信-因此它实现了IP层。它要求安全地传输数据(图像)-因此,它可以更好地实现TCP。某些部分必须理解传输的数据,因此我们当然在顶层有一个应用层。---(嗯,如果他们不使用蓝牙而不是联网...)
Hagen von Eitzen

@HagenvonEitzen协议规定了放置的层,但我的观点是,TCP / IP“堆栈”中的一个“层”可能不是软件/硬件“堆栈”中的单个离散“层”。我举了一个芯片组的例子,该芯片组本身就实现了四层。在硬件/软件方面,这只是实现连接的“堆栈”中的一个“层”。使用该芯片和实现自己的TLS的应用程序会导致两层堆栈;物理组件与OP中描述的四个逻辑层不一致。
phyrfox
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.