导航:首页 > 网络共享 > sonic软件网络协议栈

sonic软件网络协议栈

发布时间:2023-03-06 16:40:01

‘壹’ 如何测试TCP/IP协议栈来修复网络连接故障

在我们修复Windows网络连接时,要确保本地TCP/IP栈没有问题。本文将一步步地指导您进行本地主机连接DNS服务器和默认网关服务器的能力测试,并介绍如何测试主机名解析。

在“检查IP配置”中,我阐述了如何确定哪个IP地址是我们的系统使用的主地址。接下来,我们会验证IP地址配置是正常工作的,以及本地TCP/IP堆栈没有问题。

首先,我们需要执行的测试是PING本地主机地址。有几种不同的方法可以实现这个步骤。其中一个是输入下面的命令:

PING LOCALHOST

当我们输入这个命令时,Windows将PING地址127.0.0.1。不管我们的机器的地址是什么,Windows总会使用127.0.0.1作为本地主机地址。因此,对于上面所列出来的命令,另外一个替代的命令是:

Ping 127.0.0.1

输入这个命令时,我们应该可以查看到一个成功的PING,如同使用其它的PING命令一样。我们可以看到图A所显示的例子。

PING本地主机地址对诊断远程主机连接问题没有什么作用。然而,它却可以允许我们确认我们的本地TCP/IP
栈运行是否正确。当我们PING本地主机地址时接收到目的主机无法到达的错误信息时,这往往意味着TCP/IP的配置是不正确的,或者本地TCP/IP栈
的某个部分出错了。

依据我的个人经验,我们通常可以通过删除计算机的TCP/IP协议来处理这个问题,然后重新设置。

PING默认网关

在本系列的前面的部分文章中,我提到有几种不同的TCP/IP配置部分需要文档化,它们是故障修复过程所必需的。其中有默认网关的IP地址和主DNS服务器的信息。

假设我们尝试连接的是远程网络或者在企业网络的不同分片上的主机,那么我们下一步需要尝试的是PING默认网关。我们可以简单地通过在PING命令
后添加默认网关的IP地址来完成。比如,如图B,请注意我的TCP/IP配置列出了我的默认网关地址是147.100.100.100。然后,我会直接
PING这个地址。这就验证了本地机器可以连接到默认网关。同时,它也告诉我们本地网络的连接工作正常,至少在IP地址层上是正常的。

PING DNS服务器

目前,我们已经确定在本地计算机和默认网关之间的IP层连接是正常的。然而,这并不保证主机名被解析到正确的IP地址。在这一系列的文章的第一部分
“使用PING命令来修复网络连接故障”中,我已经探讨了如何使用目的主机的正式域名和PING命令来验证DNS服务器是否正常工作。还有几种其它的方法
我们可以用来简单地测试DNS名字解析。

其中一个是,我们可以PING DNS服务器的IP地址,如图C所示。这并不保证名字解析是正确工作的,但是它肯定可以验证本地机器能够连接到DNS服务器上。

另外一个方法是使用Nslookup命令来验证域名解析是正确工作的。我们只需简单地输入Nslookup,后面加上远程主机的正式域名。Nslookup命令就应该能够将域名解析到一个IP地址,如图D所示。

如果我们不经常使用Nslookup,那么一开始上面的图象可能会有点误导我们。首先,这个屏幕似乎在报告一个错误。如果我们更仔细点观察,我们可
以看到返回的信息的第一部分是来自于本地DNS服务器。这是因为所引用的IP地址是与DNS服务器的IP地址相匹配的。然而,返回的信息的后面部分为我们
提供的是我们所要查询的主机的IP地址。只要列出了这个IP地址,那么DNS查询就是成功的。

如果域名解析过程失败了,那么就可以肯定存在一个DNS问题。实际问题可能是许多不同的DNS服务器问题中的其中一个。比如,转发的DNS服务器地
址可能是不正确的,或者DNS服务器可能并不访问因特网,这些都是连接更高级DNS服务器所必须的。类似的,DNS服务器的DNS服务可能已经中断。典型
地,由于许多客户往往都依赖于一个DNS服务器,因此这些类型的问题将会影响到其它客户。

如果DNS域名解析成功了,那么,重要的是我们要验证域名解析过程中返回的IP地址。我们可以通过对比返回的IP地址和远程主机正在使用的实际的IP地址来进行验证。这些IP地址必须是相匹配的,但是,其中可能会有不匹配的情况,它将造成连接失败。

当出现IP地址不匹配时,可能是客户端感染了恶意软件或者是DNS中毒了。DNS中毒指的是DNS缓存中被写入无效的或者不正确的IP地址。

当出现这样一个问题时,我会建议客户端机器的进行恶意软件扫描。同时对间谍软件和病毒进行扫描是很重要的,因为它们都会引起这种问题。一旦清除了恶意软件的问题,那么可以尝试清空DNS缓存。我们可以输入下面的命令来清空DNS缓存:

IPCONFIG /FLUSHDNS

我们可以看看这个例子,如图E所示:

其中需要记住的重要一点是, DNS缓存包含不准确IP地址,并不总是意味着发生了DNS中毒。因为有时主机被指派了新的IP地址后,DNS缓存需要一段时间才会得到修改后的IP地址。

总结

在本文中,我已经阐述了如何验证本地TCP/IP协议栈是否正确工作。接下来,我还继续阐述了如何测试本地主机与DNS服务器和默认网关服务器交互
的能力,以及如何测试主机域名解析。在本系列接下来的内容中,我将探讨可以使用PING命令来检测的几个常见问题,同时我还将开始探讨路由问题。

‘贰’ Thread协议栈基础

Thread协议栈是可靠,经济高效,低功耗,无线D2D(设备到设备)通信的开放标准。它是专为连接家庭应用而设计的,其中需要基于IP的网络,并且可以在协议栈中使用各种应用层。

这些是Thread协议栈和网络的一般特性:

图1显示了Thread协议栈的概述。

该标准基于在2.4GHz频带中以250kbps运行的IEEE 802.15.4 [IEEE802154] PHY(物理层)和MAC(媒体访问控制层)。该规范的IEEE 802.15.4-2006版本用于Thread协议栈。

802.15.4 MAC层用于基本的消息处理和拥塞控制。该MAC层包括设备用于监听干净信道的CSMA(Carrier Sense Multiple Access,载波侦听多路访问)机制,以及用于处理重试和确认消息的链路层以用于相邻设备之间的可靠通信。基于由软件协议栈的较高层建立和配置的密钥,被MAC层用于对消息的加密和完整性保护。网络层建立在这些基础机制上,以在网络中提供可靠的端对端通信。

在由运行Thread协议栈的设备组成的系统中,这些设备都不代表单点故障。虽然系统中有许多设备执行特殊功能,但是Thread协议栈的设计使得它们可以被替换,而不会影响Thread网络中正在进行的通信。例如,一个常眠的子设备需要一个父设备进行通信,因此这个父设备代表它的通信失败单点。但是,如果常眠设备的父设备不可用,常眠设备可以并将会选择另一个父设备,因此该转换不应该对用户可见。

虽然系统设计用于没有单点故障,但在某些拓扑结构下,将存在没有备份功能的单个设备。例如,在具有单个网关的系统中,如果网关断电,则无法切换到另一个网关。

路由器或边界路由器可以为Thread网络中的某些功能承担Leader角色。这个Leader需要在网络内作出决定。例如,Leader分配路由器地址并允许新的路由器请求。Leader角色是被选举的,如果Leader失败,会由另一个路由器或边界路由器承担Leader角色。正是这种自主操作确保没有单点故障。

边界路由器是一种特定类型的路由器,提供从802.15.4网络到其他物理层(例如,Wi-Fi和以太网)上的相邻网络的连接。边界路由器为802.15.4网络中的设备提供服务,包括用于离网操作(off-network operations)的路由服务。Thread网络中可能有一个或多个边界路由器。

路由器为网络设备提供路由服务。路由器还为尝试加入网络的设备提供加入和安全服务。路由器是设计为不休眠的。路由器可以降级其功能并成为REED(Router-eligible End Devices,符合路由器的终端设备)。

REED有能力成为路由器,但是由于网络拓扑或条件,这些设备不作为路由器工作。这些设备通常不转发消息或为Thread网络中的其他设备提供加入或安全服务。如果需要,Thread网络管理REED成为路由器,且无需用户交互。

常眠终端设备是主机设备。他们只通过他们的父路由器进行通信,不能转发其他设备的消息。

Thread协议栈中的设备支持[RFC 4291]中指定的IPv6寻址架构。设备配置1个或多个ULA(Unique Local Address,唯一本地地址)或GUA(Global Unicast Address,全局单播地址)地址。

启动网络的设备选择一个/64前缀,然后在整个Thread网络中使用。该前缀是本地分配的全局ID(Locally Assigned Global ID),通常称为ULA前缀[RFC 4193],可以称为网格本地ULA前缀(mesh local ULA prefix)。Thread网络还可以具有一个或多个边界路由器,每个边界路由器可以具有或可以不具有可以用于生成附加GUA的前缀。Thread网络中的设备使用其扩展MAC地址(Extended MAC address)来导出其[RFC 4944]第6节中定义的接口标识符(interface identifier),并且基于此,通过已知的本地前缀FE80 :: 0/64配置链路本地IPv6地址,如[RFC 4862]和[RFC 4944]所述。

设备还支持适当的多播地址(multicast addresses)。这包括链路本地所有节点组播(link-local all node multicast),链路本地全路由器组播(link-local all-router multicast)和区域本地组播(realm-local multicast)。

加入Thread网络的每个设备都将分配一个16位短地址,如[IEEE 802.15.4]中所规定。对于路由器,该地址使用地址字段中的较高位分配,低位设置为0,表示路由器地址。然后,对于子设备使用其父设备的高位和适当的低位来为其地址分配一个16位的短地址。这允许Thread网络中的任何其他设备通过使用其地址字段的高位来了解子设备的路由位置。

图2说明了Thread短地址。

所有设备使用[RFC 4944]和[RFC 6282]中定义的6LoWPAN。

在Thread网络中使用头部压缩(Header compression),设备传输消息尽可能多地压缩IPv6报头,以最小化发送的数据包的大小。

支持网格包头(mesh header),用于更有效地压缩网格内的消息,以及针对如“路由和网络连接”部分中所述的链路层转发(link layer forwarding)。网格标头(mesh header)还允许消息的端到端分段(end-to-end fragmentation),而不是[RFC 4944]中指定的逐跳分段(hop by hop fragmentation)。Thread协议栈使用路由选择配置(route-over configuration)。

这些设备不支持[RFC 6775]中规定的邻居发现(neighbor discovery),因为DHCPv6用于向路由器分配地址。终端设备和REED由他们的路由器父节点分配短地址。然后,该短地址用于配置用于网络内通信的网格(Mesh)本地ULA。

有关6LoWPAN使用和配置的更多详细信息,请参见“6LoWPAN的Thread用法(Thread Usage of 6LoWPAN)”白皮书。Thread规范的第3章详细说明了使用的具体6LoWPAN配置。

设备支持ICMPv6(Internet Control Message Protocol version 6,Internet控制消息协议版本6)协议[RFC 4443]和ICMPv6错误消息,以及回显请求(echo request)和回显回复消息(echo reply messages)。

Thread协议栈支持在[RFC 768]中定义的UDP(用户数据报协议),用于设备之间的消息传递。

Thread协议栈支持Thread网络中所有路由器之间的全网格连接(full mesh connectivity)。

实际拓扑基于Thread网络中路由器的数量。如果只有一个路由器或边界路由器,则形成具有单个路由器的基本星形拓扑。如果有多个路由器,则自动形成网格(Mesh)拓扑。图3说明了Thread网络的基本拓扑结构和设备类型。

网格网络(Mesh Networks)通过允许射频转发其他射频的消息,使射频系统更可靠。例如,如果节点不能直接向另一个节点发送消息,则网格网络(Mesh Networks)通过一个或多个中间节点转发消息。如“路由和网络连接”一节中所讨论的,Thread网络的性质使得所有路由器节点彼此之间保持路由和连接,因此网格不断维护和连接。Thread网络中通常有最多32个活动路由器的限制。但是,64个路由器地址用于允许回收路由器地址。

在网格网络(Mesh Networks)中,常眠终端设备或REED不会为其他设备路由。这些设备将消息发送到作为路由器的父设备。该父路由器处理其子设备的路由操作。

Thread网络通常最多有32个活动路由器,它们使用基于设备路由表的消息的下一跳路由(next-hop routing)。设备路由表由协议栈维护,以确保所有路由器都具有Thread网络中任何其他路由器的连接和最新路径。使用RIP(Routing Information Protocol,路由信息协议)算法(来自[RFC 1058]和[RFC 2080]的算法,但不采用其特定的消息格式)。所有路由器与其他路由器使用MLE(Mesh Link Establishment),以压缩格式交换其到Thread网络中的其他路由器的路由成本(cost of routing)。

注意:从IP的角度来看,Thread网络支持路由器和主机。主机是常眠终端设备或REED。

MLE消息(请参阅“Thread规范”第4章“消息链路建立(Message Link Establishment)” 中针对Thread进行的扩展[draft-kelsey-intarea-mesh-link-establishment-06]) 用于建立和配置安全射频链路,检测邻近设备,以及维护Thread网络中设备之间的路由成本。使用单跳链路本地单播(single-hop link local unicasts)和路由器之间多播(multicasts between Routers)来传输MLE消息。

随着拓扑和物理环境的变化,MLE消息用于识别,配置和保护邻近设备的链路。MLE还用于分发跨Thread网络共享的配置值,如通道(channel)和PAN(Personal Area Network,个人区域网络)ID。这些消息可以由MPL(Multicast Protocol for Low power and Lossy Networks,低功耗和有损网络的多播协议)指定的简单洪泛转发(forwarded with simple flooding)。(有关详细信息,请参阅[draft-ietf-roll-trickle-mcast-09])。

在建立两个设备之间的路由成本时,MLE消息还确保考虑了非对称链路成本(asymmetric link costs)。802.15.4网络中的非对称链路成本(asymmetric link costs)很常见。为了确保双向通信是可靠的,考虑双向链路的成本是很重要的。

按需路由发现(On-demand route discovery)通常用于低功耗802.15.4网络。然而,由于路由发现请求洪泛网络(route discovery requests flooding the network),按需路由发现(on-demand route discovery)在网络开销和带宽方面是昂贵的。

在Thread网络中,所有路由器定期交换包含到所有邻居路由器链路成本信息(link cost information to all neighbor Routers)的单跳MLE广告包(single-hop MLE advertisement packets),以及到Thread网络中所有其他路由器的路径开销(path costs to all other Routers)。通过这些定期的本地更新,所有路由器都具有Thread网络中任何其他路由器的最新路径开销信息,因此不需要按需路由发现。如果路由不再可用,路由器可以在到达目的地的下一个最合适的路由上进行选择。这种自愈路由机制允许路由器快速检测其他路由器是否已经脱离Thread网络,并计算最佳路径以维护与Thread网络中所有其他设备的连接。

每个方向的链路质量(link quality in each direction)基于来自该邻近设备的传入消息的链路成本(link cost on incoming messages from that neighboring device)。此传入链路成本(incoming link cost)映射到从0到3的链路质量(link quality)。值为0表示未知成本。链路成本(link cost is a measure of RSSI)是接收到的消息高于接收等级的RSSI(接收信号强度指示)的度量。

表1总结了链路质量和链路成本。

图4示出了Thread网络上的各种链路成本的示例。

Thread网络中任何其他节点的路径开销就是到达该节点的链路成本的最小值。路由器监控这些成本,即使网络的射频链路质量或拓扑变化,并通过使用周期性MLE广告消息在Thread网络传播新的成本。路由成本基于两个设备之间的双向链路质量。

为了说明一个简化的例子,想象一下预先委托的网络(pre-commissioned network),其中共享安全材料,所有的设备同时启动。每个路由器将周期性地发送初始填充的到单跳邻居成本的广告。在内部,每个路由器将存储未在广告中发送的下一跳信息(next hop information)。

前几个广告的路径成本等于链路成本,因为已知的唯一路由器是立即邻居,如图5所示。

但是,随着路由器开始收听来自邻居的广告,其中包含两跳或更多跳的其他路由器的成本,它们的表填充了多跳路径成本,然后传播得更远,直到最终在所有路由器之间存在如图6和图7所示的连接信息网络。

当路由器从邻居接收到新的MLE广告时,它或者已经具有该设备的邻居表项,或者添加一个。MLE广告包含来自邻居的进入成本(incoming cost from the neighbor),因此在路由器的邻居表中更新(updated in the Router’s neighbor table)。MLE广告还包含其他路由器的更新的路由信息​​(updated routing information for other Routers),并且该信息在设备路由表中更新(updated in the device routing table)。

通过查看子设备的地址的高位来确定父路由器地址(Parent Router address),可以实现到子设备的路由。一旦设备知道父路由器,它就具有该设备的路径开销信息和下一跳路由信息(path cost information and next-hop routing information)。

活动路由器的数量仅限于可以包含在单个802.15.4数据包中的路由和成本信息的数量。此限制目前为32个路由器,但提供了64个活动路由器地址以允许老化掉路由器地址(aging out of Router addresses)。

设备使用IP路由转发数据包(IP routing to forward packets)。设备路由表(device routing table)填充有路由器的网格本地ULA地址的压缩形式和适当的下一跳(compressed form of a mesh local ULA address for Routers and the appropriate next hop)。

距离向量路由(Distance vector routing)用于获取到Thread网络上路由器地址的路由(get routes to Router addresses)。当在Thread网络上进行路由时,该16位地址的高6位定义了目标路由器的路由器地址。如果目的地址的低位为0,则路由器为最终目的地址。否则,目的路由器负责根据16位目的地址的较低位转发到最终目的地。

对于超出Thread网络的路由,边界路由器通知Leader其所服务的特定前缀(particular prefix(es) it serves),并且该信息作为MLE数据包中的Thread网络数据分发(distributed as Thread Network data within the MLE packets)。Thread网络数据包括:前缀数据(prefix data),它是前缀本身,6LoWPAN上下文(6LoWPAN context),边界路由器(Border Routers)和该前缀的DHCPv6服务器(DHCPv6 server for that prefix)。如果设备要使用该前缀配置IPv6地址,则使用SLAAC(Stateless Address Autoconfiguration,无状态地址自动配置)或联系相应的DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)服务器。Thread网络数据还包括路由服务器列表(a list of routing servers),它们是默认的边界路由器的路由器地址。

Leader被指定做出决策,选择REED成为路由器或允许路由器降级为REED。Leader也分配和管理路由器地址。然而,此路由Leader中包含的所有信息都存在于其他路由器中,并且如果路由Leader变得无法访问,则另一个路由器将自主被选择并作为Leader接管,而无需用户干预。

虽然在Thread协议栈中使用UDP消息传递,但仍然需要可靠的消息传递。这是使用一系列轻量级机制完成的,如下所示:

加入设备(joining device)必须经历各个阶段才能参与Thread网络:

所有加入都是Thread网络中用户启动的。一旦加入,设备就可以完全参与Thread网络,并可以与Thread网络内外的其他设备和服务交换应用层信息。

加入设备(joining device)必须发现Thread网络,并与路由器建立联系(establish contact with a Router)以进行调试(commissioning)。加入设备扫描所有信道(scans all channels),在每个信道上发出信标请求(issues a beacon request),并等待信标响应(waits for beacon responses)。信标包含一个有效载荷,包括网络SSID(Service Set Identifier,服务集标识符)和允许加入信标的许可证(a permit joining beacon),指示Thread网络是否正在接受新的成员。一旦设备发现Thread网络,它将使用MLE消息来建立一个相邻的路由器(establish a neighboring Router),通过它可以执行调试(perform commissioning)。

如果设备已经获得了调试信息(obtained commissioning information),因为它已经有足够的信息直接附加到Thread网络,则不需要发现。

Thread提供两种调试方法:

注意:仅在通过信标有效载荷中的许可证加入标志(joining solely via the permit joining flag in the beacon payload)的典型802.15.4加入方法不在Thread网络中使用。这种方法最常用于没有用户界面或到设备的带外频道的按钮类型加入(push button type joining)。在有多个网络可用的情况下,该方法可能存在设备转向(device steering)问题,并且也可能存在安全问题。

具有调试信息(commissioning information)的加入设备(joining device)与父路由器联系,然后通过父路由器交换MLE链路配置消息(exchanging MLE link configuration messages)附加到Thread网络。设备作为终端设备(end device)或REED附加到Thread网络,并由父路由器分配16位短地址,如图8所示。

一旦REED已经附加到Thread网络,它可能会发出一个地址请求(issue an address request)成为一个路由器,然后由Leader分配一个路由器地址。

一旦设备连接到Thread网络,就需要有各种各样的信息来保持其在网络中的参与。MLE提供服务以在整个网络中分发网络数据,并在邻居之间交换链路成本(link costs)和安全帧计数器(security frame counters)。

MLE消息分发或交换以下信息:

注意 :MLE消息是被加密的,除非是在发现时,加入设备获得所需的安全资料过程中。

DHCPv6 [RFC 3315]是一种基于UDP的客户端 - 服务器协议,用于管理网络中设备的配置。DHCPv6使用UDP从DHCP服务器请求数据。

边界路由器上的DHCPv6服务用于配置:

所有设备都支持ICMPv6错误消息,以及回显请求( echo request)和回显回应消息( echo reply messages)。

设备上的应用层可以访问一组设备管理和诊断信息,这些信息可以在本地使用或收集并发送到其他管理设备。

Thread协议栈从802.15.4 MAC层使用的信息包括:

Thread协议栈从网络层使用的信息包括:

由于各种原因,在现场操作的设备可能会意外重置或故障重置。已重置的设备需要重新启动网络操作,无需用户干预。为此,需要将一组信息存储在非易失性存储中。这包括:

‘叁’ 协议栈是什么意思

协议栈(Protocol Stack)是指网络中各层协议的总和,其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。使用最广泛的是英特网协议栈,由上到下的协议分别是:应用层(HTTP,FTP,TFTP,TELNET,DNS,EMAIL等),运输层(TCP,UDP),网络层(IP),链路层(WI-FI,以太网,令牌环,FDDI,MAC等),物理层。

‘肆’ 《计算机网络》解释以下名词:协议栈、客户、服务器、客户-服务器方式。

协议栈怎么说呢就是指分层结构中定义硬件、软件在不同的级别如何协调工作的一组协议。
如TCP/IP协议栈中包括网络层的IP协议,传输层的TCP、UDP协议,应用层的HTTP、FTP协议等等等等。
==============
客户的定义就多了,对于各行各业都没有固定的意思,我摘抄了三种:
1、客户指的是购买或者使用本站的产品或者服务的群体
2、指咨询项目交付成果的使用者,同时也是该项目的定购人和支付人。
3、客户指的是产品和服务的受益者。
==============
服务器的接司就多啦:自己慢慢看:http://www.oaprinter.com/club/dispbbs.asp?boardid=63&id=16828
==============
客户-服务器(C/S)方式这个就更简单啦:请看这个地方:http://www.c111.net/htm/bbs/index.php?mods=topicdisplay&forumid=2&postid=37&p=1

阅读全文

与sonic软件网络协议栈相关的资料

热点内容
网络红歌热歌在哪里听 浏览:482
乡镇网络安全管理制度 浏览:997
网络协议连接不成功 浏览:398
怎么有了5g信号网络经常上不去 浏览:124
为什么苹果手机切换网络会要输入密码 浏览:543
钉钉设备网络异常怎么回事 浏览:135
4兆网络下载多少千兆 浏览:180
资质异常网络监测 浏览:611
手机自己网络好打游戏很卡 浏览:51
网络测试平台有哪些 浏览:603
苹果手机有网络没有4g 浏览:135
电信卡网络哪个好 浏览:24
网络工程师考试一题多少分 浏览:505
无线网络的信号是怎么回事 浏览:301
一体机网络机顶盒怎么切换 浏览:409
网络的英语怎么写作文 浏览:234
usb共享网络和4g网卡哪个快 浏览:179
关闭网络发现会影响使用电脑吗 浏览:112
未识别网络重启路由器又恢复正常 浏览:54
网络服务组是什么意思 浏览:981

友情链接