关于网络通信:Matter技术调研

申明:本文大部分文字依赖ChatGPT实现写作,用于帮忙相熟理解相干技术,如有错漏敬请指出。技术细节需参考Spec:https://csa-iot.org/developer-resource/specifications-downloa... 背景Matter技术的背景是智能家居市场中存在着互操作性和互联互通的问题。在过来,不同品牌的智能家居设施通常应用各自独立的通信协议,导致设施之间无奈无缝地进行通信和互动。这给用户带来了不便,限度了设施之间的互操作性。 Matter的指标是解决这个问题,提供一个凋谢的、通用的规范和协定,使得各种智能家居设施可能通过雷同的通信协议进行连贯和管制。通过对立的规范,Matter心愿实现智能家居设施之间的互操作性和互联互通,为用户提供更好的应用体验。 实用场景Matter技术实用于智能家居畛域的各种场景,包含但不限于: 照明管制:通过Matter协定,用户能够应用一个应用程序或语音助手管制不同品牌的智能灯泡,调整亮度、色彩等设置。家庭平安:Matter容许不同品牌的智能安全设备(如门锁、摄像头)进行互联,提供对立的治理和监控接口。温度和能源管理:应用Matter协定的智能恒温器、智能插座等设施能够集成在一起,实现更智能化的温度和能源管理。娱乐零碎:通过Matter技术,不同品牌的智能音箱、智能电视等设施能够无缝连贯,提供对立的娱乐管制和互动体验。 技术要点和框架:Matter技术的要害要点和框架包含: IP网络连接:Matter应用IP网络作为设施之间的通信根底,通过Wi-Fi、蓝牙和Thread等协定建设设施之间的连贯。星散成:Matter容许设施和云平台进行集成,通过云服务实现设施的近程管制和治理。安全性和隐衷爱护:Matter协定对设施和数据的安全性进行了思考,包含身份验证、数据加密等措施,爱护用户的隐衷和平安。互操作性:Matter提供了一组对立的数据模型和命令集,确保不同品牌的设施能够了解和相应雷同的指令,实现互操作性。 技术难点和实现细节:在设计Matter技术时,可能波及以下难点和实现细节: 设施兼容性:将各种不同品牌和类型的智能家居设施纳入Matter的规范之下,确保设施之间的兼容性是一个挑战。Matter所做的实现如下: Matter通过一系列机制来解决设施兼容性的问题,使得不同品牌的智能家居设施能够相互通信和互操作。以下是Matter解决设施兼容性的要害机制: 凋谢规范和协定:Matter采纳凋谢的规范和协定,使得不同厂商和设施都能遵循雷同的通信标准。这种对立的标准化办法促成了不同品牌设施之间的互操作性。通用数据模型:Matter定义了通用的数据模型,其中蕴含设施性能、状态和命令的形容。不同品牌的设施能够依据这个通用数据模型来示意和替换信息,从而实现互操作性。星散成和近程管制:Matter容许设施与云平台进行集成,使得用户能够通过云服务来管制和治理智能家居设施。通过对立的云接口,用户能够不便地近程管制各种品牌的设施,无论它们是基于Wi-Fi、蓝牙还是Thread等通信技术。平安认证和加密:Matter对设施之间的通信进行平安认证和加密,确保数据的保密性和完整性。设施在连贯到Matter网络之前须要通过身份验证,并应用加密技术来爱护通信过程中的数据安全。通过以上机制,Matter协定可能解决设施兼容性的问题,使得不同品牌的智能家居设施能够在对立的规范下相互通信和协同工作。这样,用户能够应用对立的应用程序或语音助手来治理和管制各种智能家居设施,无需为每个设施应用不同的利用或工具。 规范制订和协定标准Matter采纳了一种技术分层构造,以实现设施之间的互操作性和互联互通。上面是Matter的技术分层: 物理层(Physical Layer): 物理层是最底层的层级,波及到设施之间的物理连贯和通信介质,例如Wi-Fi、蓝牙、Thread等。Matter并不间接定义物理层,而是建设在现有的物理层技术之上,利用它们来实现设施的互联互通。网络层(Network Layer): 网络层解决设施之间的寻址、路由和转发,确保设施可能在网络上相互通信。Matter应用IP技术作为网络层的根底,采纳IPv6协定来调配寰球惟一的地址,并反对多种网络传输技术。传输层(Transport Layer): 传输层负责在设施之间建设牢靠的通信连贯,并提供数据传输的可靠性和完整性。Matter应用Transport Layer Security(TLS)协定来加密和爱护设施之间的通信,确保数据的安全性。应用层(Application Layer): 应用层是最高层的层级,包含设施的性能、属性和命令的形容,以及设施之间的互操作标准。Matter应用通用数据模型(Common Application Layer,CAL)来定义设施的性能和交互方式,以确保不同品牌的设施能够相互理解和协同工作。通过这种分层构造,Matter实现了设施之间的互操作性和互联互通。每个层级负责不同的性能和工作,确保了规范的灵活性和可扩展性。这样,Matter可能适应不同的物理连贯、网络传输和利用需要,使得智能家居设施可能在对立的规范下实现互联互通。 与同类技术的横向比拟:技术长处毛病Matter- 凋谢规范,多家厂商反对- 实现多品牌设施互操作性- 反对星散成和近程管制- 强调安全性和隐衷爱护- 制订和推广规范须要工夫和协调- 须要设施和厂商的反对和兼容性Zigbee- 低功耗、低成本的无线通信协定- 实用于大规模智能家居网络- 自组织和自修复能力- 网络范畴无限,须要网关进行连贯- 一些设施厂商反对无限Z-Wave- 高可靠性和安全性- 反对大范畴笼罩的无线通信- 实用于大规模智能家居网络- 须要专用硬件反对- 设施抉择无限HomeKit- Apple生态系统反对- 强调安全性和隐衷爱护- 反对多种通信技术- 只实用于Apple设施和生态系统- 品牌和设施抉择无限SmartThings- 多品牌设施反对- 强调星散成和近程管制- 反对自定义自动化规定- 局部性能须要云服务反对- 兼容性和稳定性存在问题技术设计的trade-off衡量考量:在Matter技术的设计中,可能须要衡量以下方面: 通用性与性能:Matter谋求通用性和互操作性,但在某些状况下,为了满足不同设施的要求,可能须要进行一些性能上的斗争。安全性与便利性:Matter重视安全性和隐衷爱护,但在设计中须要找到平衡点,以确保用户可能不便地应用和治理智能家居设施。规范推广与工夫老本:Matter的推广须要工夫和资源,须要在各方之间达成共识,并激励设施厂商进行反对和适配。衡量推广老本和效益是一个重要思考因素。请留神,以上内容是基于我在2021年9月之前的常识。对于Matter技术的最新倒退和细节,请参考官网文档、新闻来源或官网公布的申明以获取最精确和最新的信息。

May 29, 2023 · 1 min · jiezi

关于网络通信:DPI技术调研

申明:本文大部分文字依赖ChatGPT实现写作,用于帮忙相熟理解相干技术,如有错漏敬请指出。 背景DPI(Deep Packet Inspection)是一种网络数据包深度解析技术,它的背景是随着互联网的倒退和网络应用的一直增多,网络安全、流量治理等问题变得越来越严厉,传统的防火墙、路由器等设施曾经无奈满足对网络流量的深度剖析和管制,因而须要一种新的技术来解决这些问题。DPI技术的冀望解决的问题是在网络层面上对流量进行实时剖析和管制,进步网络安全性、保障网络性能和服务质量。 实用场景DPI技术广泛应用于网络安全、流量治理、内容过滤、服务质量保障等畛域。具体的利用场景包含但不限于:入侵检测、流量管制、利用辨认、网络监管等。 网络安全和威逼检测:DPI技术能够通过查看网络流量的内容和特色,辨认和阻止恶意软件、网络攻击和未经受权的拜访等网络安全威逼。例如,DPI能够辨认出蕴含病毒或恶意软件的网络流量,并对其进行阻断或隔离解决,以爱护网络的平安和稳定性。网络优化和服务质量保障:DPI技术能够通过剖析网络流量的特色和需要,优化网络资源的调配和治理,以进步网络服务的品质和性能。例如,DPI能够辨认出网络流量的类型和优先级,依据不同的利用场景和需要,进行带宽管制、流量整形和QoS保障等策略,以优化网络的带宽利用率和服务质量。网络管理和监控:DPI技术能够通过实时监测和剖析网络流量的特色和趋势,辨认网络故障和异样,以及治理和管制网络资源的应用和拜访。例如,DPI能够辨认出网络流量的起源和目的地、协定和应用程序等信息,进行网络流量剖析和统计,以便管理员理解网络的状态和性能,并采取必要的措施进行治理和保护。内容散发和广告投放:DPI技术能够通过辨认网络流量的内容和特色,实现精准的内容散发和广告投放。例如,DPI能够辨认出用户的趣味和需要,依据其浏览历史和行为习惯,推送相干的内容和广告,以进步用户的满意度和转化率。技术框架和概要设计DPI技术蕴含的次要技术要点和框架包含:流量采集、协定解析、特色匹配和动作执行。其中,流量采集是指获取网络流量数据包,协定解析是指对数据包进行协定解析,特色匹配是指辨认数据包中的特色信息,动作执行是指依据特色匹配后果对数据包进行相应的解决和管制。 流量采集:DPI技术须要采集网络流量的数据包,以进行后续的解决和剖析。通常能够应用抓包工具、网络镜像和嗅探器等技术来实现网络流量的采集。同时,为了进步采集的效率和精度,能够应用多线程、数据缓存和高速缓存等技术来优化流量采集的过程。协定解析:DPI技术须要对网络流量中的协定进行解析,以辨认出流量的类型和特色。通常能够应用协定解析器、正则表达式和语法分析等技术来实现协定解析。同时,为了进步协定解析的速度和精度,能够应用优化算法、预处理和缓存等技术来优化协定解析的过程。特色匹配:DPI技术须要依据网络流量的特色,进行特色匹配和辨认,以实现网络流量的分类和剖析。通常能够应用正则表达式、字符串匹配和哈希算法等技术来实现特色匹配。同时,为了进步特色匹配的速度和准确性,能够应用多线程、并行处理和硬件加速等技术来优化特色匹配的过程。动作执行:DPI技术须要依据网络流量的特色和匹配后果,进行相应的动作执行,以实现网络流量的管制和治理。通常能够应用策略引擎、路由器和防火墙等技术来实现动作执行。同时,为了进步动作执行的速度和可靠性,能够应用流水线、硬件加速和决策缓存等技术来优化动作执行的过程。技术挑战和实现细节DPI技术的次要难点和实现细节包含: 高效的数据包解决能力DPI的实现须要可能疾速、精确地解析和辨认大量的数据包;DPI实现高效的数据包解决能力,须要从多个方面进行优化。以下是几个常见的办法和相干的论文: 多线程解决:通过应用多线程技术,能够将数据包的解决工作分解成多个子工作,调配给多个线程并行处理。这种办法能够进步数据包解决的效率和吞吐量。GPU减速:应用GPU进行数据包解决能够大幅提高处理速度。GPU在数据并行处理上具备很强的性能,能够充分利用GPU的计算能力,实现高效的数据包解决。压缩算法:通过应用压缩算法,能够缩小数据包的处理量,从而进步处理速度。常见的压缩算法有哈夫曼编码、LZ77和LZ78等。流水线技术:通过应用流水线技术,能够将数据包的解决流程分成多个阶段,每个阶段能够并行处理多个数据包。这种办法能够进步解决效率,升高提早。FPGA减速:应用FPGA进行数据包解决能够提供高性能、低功耗的解决方案。FPGA能够定制硬件电路,能够实现高效的数据包解决,从而进步处理速度和吞吐量。精密的特色匹配算法DPI中的特色匹配是指对网络数据包进行深度解析后,提取其中的要害特色并与事后定义好的特色进行匹配,以实现对网络流量的辨认和分类。罕用的特色匹配算法包含正则表达式、Aho-Corasick自动机和多模式串匹配算法等,上面别离进行简述: 正则表达式匹配算法: 正则表达式是一种形容文本模式的语言,能够用于示意一类字符串的特色。DPI中,能够应用正则表达式来匹配特定的字符串模式,以实现网络数据包的辨认和分类。常见的正则表达式引擎有RE2和PCRE等。Aho-Corasick自动机: Aho-Corasick自动机是一种基于字典树的多模式匹配算法,可能高效地在一组文本中匹配多个关键字。在DPI中,能够利用Aho-Corasick自动机对预约义的特色汇合进行建模,并对网络数据包进行疾速匹配和辨认。多模式串匹配算法: 多模式串匹配算法是指对多个模式串进行匹配的算法,通常包含KMP算法、Boyer-Moore算法和Shift-Or算法等。在DPI中,能够将预约义的特色汇合视为多个模式串,应用多模式串匹配算法对网络数据包进行疾速匹配和辨认。有时针对加密的数据包也能够做一些匹配操作: 解密数据包: 如果DPI设施具备解密TLS数据包的能力,能够通过解密数据包的形式获取明文数据,从而实现特色匹配。这种办法须要DPI设施具备较强的计算和存储能力,并且须要留神隐衷和法律等方面的问题。利用SNI信息: 在TLS握手阶段,客户端会发送Server Name Indication(SNI)信息,用于批示服务器哪个域名须要被拜访。DPI设施能够利用SNI信息进行特色匹配,从而辨认和分类网络数据包。利用证书信息: TLS协定中,服务器通常会向客户端发送数字证书,用于证实服务器身份和提供公钥加密。DPI设施能够利用证书信息进行特色匹配,从而辨认和分类网络数据包。利用流量剖析: DPI设施能够通过剖析流量的大小、流向、工夫和频率等特色,以及TLS握手和传输过程中的其余特色,来揣测数据包的内容和特色,从而实现特色匹配。安全性和可靠性在DPI技术的理论利用中,思考安全性和可靠性十分重要。以下是一些常见的办法和伎俩: 避免攻打: DPI设施须要具备进攻DDoS、坑骗、欺诈、僵尸网络等攻打的能力,能够通过入侵检测、流量过滤、黑白名单等技术实现。爱护隐衷: DPI设施须要爱护用户的隐衷和敏感信息,不应该存储和剖析用户的集体数据,能够采纳数据脱敏、加密传输等技术实现。高可靠性: DPI设施须要具备高可靠性和可用性,能够采纳负载平衡、热备份、灾备等技术实现。平安审计: DPI设施须要记录和审计数据包的处理过程和后果,以及操作人员的行为和权限,能够采纳日志记录、审计跟踪等技术实现。平安降级: DPI设施须要及时降级和修复安全漏洞和问题,能够采纳自动更新、补丁治理、破绽扫描等技术实现。系统监控: DPI设施须要进行零碎性能监控和事件监控,及时发现和解决系统故障和异常情况,能够采纳零碎性能指标、事件告警等技术实现。须要留神的是,平安和可靠性是一个系统性的问题,须要综合思考技术、治理、法律等多个方面,采纳综合伎俩和策略进行保障。 与同类技术的横向比拟DPI技术与其余网络流量剖析和控制技术相比,具备不同的优缺点。以下是DPI技术与一些同类技术的比拟: 技术名称长处毛病流量控制技术能够限度网络带宽应用,防止网络拥塞无奈对不同利用、协定等进行精密的管制传统防火墙技术对网络流量进行根本的过滤和管制,实用于网络安全爱护无奈进行深度的应用层剖析和管制IDS/IPS技术能够进行入侵检测和攻打防备,进步网络安全性无奈对流量进行精密的管制和治理SDN技术能够进行流量管制和服务质量保障,具备灵活性和可编程性对网络设备和技术的要求较高,实现简单DPI技术能够进行深度剖析和管制,可能实现对不同利用、协定等的辨认和管制对设施性能和计算资源的要求较高,可能会对网络性能产生肯定影响从表格能够看出,DPI技术在对网络流量进行深度剖析和管制方面具备劣势,可能实现对不同利用、协定等的精密辨认和管制。然而,DPI技术对设施性能和计算资源的要求较高,可能会对网络性能产生肯定影响,这是其绝对劣势所在。 技术优缺点衡量在DPI技术的设计中,须要衡量以下因素: 精度和性能:DPI技术须要在保障精度的前提下,尽可能地进步解决性能,以防止对网络性能产生过大的影响。安全性和隐衷爱护:DPI技术须要思考安全性和隐衷爱护问题,防止敏感数据泄露和歹意攻打。可扩展性和灵活性:DPI技术须要具备肯定的可扩展性和灵活性,以适应不同的网络环境和需要。老本和效益:DPI技术的设计还须要思考老本和效益的均衡,以确保技术的实用性和可行性。在理论利用中,DPI技术的设计须要综合思考以上因素,依据具体利用场景和需要,做出衡量取舍。例如,在网络安全畛域,须要重点思考安全性和隐衷爱护问题;在网络优化和服务质量保障畛域,须要更加重视精度和性能的均衡。同时,DPI技术的设计还须要思考到不同网络设备和环境的要求,防止适度依赖特定的硬件和软件,以进步可扩展性和灵活性。在实践中,DPI技术的设计须要通过一直的优化和改良,能力逐步达到最优的平衡点,以满足不同利用场景和需要的要求。

May 9, 2023 · 1 min · jiezi

关于网络通信:Mac-终端配置代理

当咱们在Mac电脑装置VPN工具,拜访一些须要的网站的时候,咱们在浏览器能够失常拜访,然而在终端则无奈应用代理去申请连贯。 这对咱们浏览一些网站影响不大,然而当咱们须要给Mac装置一些工具的时候,就会显得特地不不便。所以想要给Mac终端也增加代理。 1. 首先查看代理的端口 首先确保关上咱们VPN工具,而后再查看本地代理端口。 能够看到咱们本地的代理地址。 2. 配置环境变量 进入家目录后,批改.zshrc文件,增加以下内容: alias proxy='export all_proxy=http://127.0.0.1:10871'alias unproxy='unset all_proxy'有的文章说设置socks,我这里设置后无奈连贯,所以改用http形式 使批改失效: source .zshrc3. 应用代理 执行命令proxy则示意应用代理执行命令unproxy则示意勾销代理

March 6, 2023 · 1 min · jiezi

关于网络通信:ACL配置

应用根本ACL过滤数据流量 目标:应用根本acl配置禁止192.168.20.0网段拜访服务器//在交换机接配置2个vlan 10 20vlan batch 10 20//在不同接口配置vlan[g0/0/2] port link-type access port default vlan 10[g0/0/1] port link-type access port default vlan 20[g0/0/3] port link-type trunk port trunk allow-pass vlan 10 20//在路由器上配置[Huawei-GigabitEthernet0/0/0.10]dot1q termination vid 10[Huawei-GigabitEthernet0/0/010]ip add 192.168.10.254 24[Huawei-GigabitEthernet0/0/0.20]dot1q termination vid 20[Huawei-GigabitEthernet0/0/020]ip add 192.168.20.254 24[Huawei-GigabitEthernet0/0/1]ip add 10.1.1.254 24配置ACL[Huawei]acl 2000[Huawei-acl-basic-2000]rule 5 deny source 192.168.20.0 0.0.0.255[Huawei-GigabitEthernet0/0/0]traffic-filter inbound acl 2000应用高级ACL配置不同网段禁止互访 // 路由器设置[Huawei-GigabitEthernet0/0/1]ip add 10.1.1.1 24[Huawei-GigabitEthernet0/0/2]ip add 10.1.2.1 24//acl配置[Huawei-acl-adv-3001]rule 5 deny ip source 10.1.1.0 0.0.0.255 destination 10.1.2.0 0.0.0.255[Huawei-acl-adv-3002]rule 10 deny ip source 10.1.2.0 0.0.0.255 destination 10.1.1.0 0.0.0.255[Huawei-GigabitEthernet0/0/1]traffic-filter inbound acl 3001[Huawei-GigabitEthernet0/0/2]traffic-filter inbound acl 3002配置有些省略,但外围配置具在。 ...

October 22, 2022 · 1 min · jiezi

关于网络通信:IO模型与吃饭的那些事

瞎写的,大家看了图个乐,说得不对欢送斧正。阻塞IO万香楼倒闭了,明天是第一天接待人,张三是第一个客人,他看了眼菜单,对recvfrom说道:“给我来碗臊子面吧,多放臊子。”,recvfrom客气道:“好,稍等哈,我立马给你做”。这一做就是20分钟过来了,前面排队的前面李四、王五、马六不违心了。李四不耐烦的道:“老板你能不能快点的啊,这这么搞等吃到饭都要晕倒了啊!” 非阻塞IOrecvfrom对李四客气道:“不好意思哈,我这臊子筹备得有点少,我抵偿你个EWOULDBLOCK吧,你先换一家哈。”,李四想了下持续等上来也没啥意义,便转身走了。 IO复用模型王五和马六感觉都排了这么久了,想了下,走了也不是方法,下家是不是也要这样排队等都不晓得呢,正好这时候涌入了一大批人。王五想了想道:“老板,这样吧,我这正好有两套号码牌fd,你先拿来用一下,每个人点菜之后你给发一张,你做好了之后,你放到指定号码牌上,而后让你那个8岁娃select/poll|epoll看着点,如果做好了就让你娃依据号码牌说一声,而后咱们本人来取就好了。”老板露出感谢的眼神,对王五连连鸣谢。于是大家有序点餐,老板的大骨头饭和卤肉饭倒是管够,好几个人点到了就间接拿到手就去坐着吃了,还有好几个人点了些京酱肉丝、臊子面啥的都还没筹备好,便坐到旁边宁静的刷着手机期待了起来。 信号驱动IO模型王五和马六坐了好一会,马六看到老板小孩看那些号码牌,跑来跑去的,老汗都冒出来了,于是捅了捅旁边的王五:“你那个号码牌都给老板了,其实没必要看着吧,你让老板对应号的菜做好了叫一声SIGIO指定的号不就行了么?” 王五一拍大腿:“诶,是这个情理,我去说一声哈。” 异步IO模型正好这时,老板媳妇来了,老板感觉很多人都等了挺久了,于是对他媳妇说:“我这里的菜做好后,你等会依照这个号码牌,找到对应号码的客人,把饭端过去给他们吧,这样也不必客人老是跑来跑去的。他们只有点好菜去坐着就行了。”

May 13, 2022 · 1 min · jiezi

关于网络通信:标准和非标poe交换机如何选择

近年来,PoE供电技术的发展势头越来越强劲。凭借简化用电设施的装置和部署、节能,平安等一系列劣势,PoE供电成为无线笼罩、安防监控、以及智能电网等场景的新宠。在技术交换中,困惑最多的其中就有POE的问题。 明天就由小编与大家独特理解PoE交换机的重要指标,帮忙大家理解PoE交换机技术参数,以便于用户抉择更适合适宜本人的PoE交换机产品。 一、交换机类别 1、网络形成形式 接入层交换机、汇聚层交换机、外围层交换机 2、OST模型 第二层交换机、第三层交换机、第四层交换机……第七层交换机 3、交换机的可管理性 可管理型交换机、不可管理型交换机。区别在于对SNMP/RMON等网管协定的反对 二、如何分别规范和非标PoE交换机 1、规范POE交换机:合乎IEEE802.3af、802.3at规范,就是规范POE交换机(俗称48V),残缺的POE包含供电端设施(PSE, Power Sourcing Equipment)和受电端设施(PD, Power Device)两局部,poe交换机为PSE设施的一种。PSE是为终端供电的设施,也是POE以太网供电过程的管理者。PD是承受供电的终端设备(48V国标设施含有PD芯片)。 2.非标准POE交换机:相同则为非标准POE交换机(“非标准”简称”非标”俗称24V,然而非标有48V、24V、12V、5V等)。 要判断一台交换机是一般交换机还是PoE交换机,办法很简略,用肉眼从产品外观即可判断。看产品标签正规厂家出厂的产品,都会有产品标签,一般来说在产品底部。仔细阅读标签上的产品信息,便能判断一二。看交换机面板,如果底部标签上没有上述信息,则可查看面板。有的品牌会将交换机名称和型号印在面板PVC上,而且面板上的LED指示灯往往也带有PoE标记。 3、看电源参数 应用外置电源的PoE交换机,其电源适配器上往往标有具体的参数,从供电电压来判断,如果为48V的话则为PoE交换机,如果为9V/12V的通常是一般交换机。 应用内置电源的交换机无奈看到电源参数,但有的产品会在产品标签上标注额定功率,如果功率的数值较大(通常大于150W),则根本能够判断为PoE交换机。 三、交换机次要参考参数 1、线速是什么? 线速是指交换机的端口上每秒钟传输的bit数,单位为bps(bit per second,即每秒传输多少bit,一个bit也就是一个二进制数0或者1)。 2、背板带宽是什么? 热交换机的背板带宽,是交换机接口处理器或接口卡和数据总线间所能吞吐的最大数据量。背板带宽标记了交换机总的数据交换能力,单位为Gbps,也叫替换带宽。所以只有模块交换机(领有可扩大插槽,可灵便扭转端口数量)才有这个概念,固定端口交换机是没有这个概念的,并且固定端口交换机的背板容量和替换容量大小是相等的。背板带宽决定了各板卡(包含可扩大插槽中尚未装置的板卡)与替换引擎间连接带宽的最高下限。因为模块化交换机的体系结构不同,背板带宽并不能齐全无效代表交换机的真正性能。固定端口交换机不存在背板带宽这个概念。 计算公式:端口数×相应端口速率×2(全双工模式) 24口百兆+2口千兆:242100+221000=8.8Gbps 3、吞吐量是什么? 吞吐量(也称为整机包转发率)是指网络、设施、端口或其余设施在单位工夫内胜利地传送数据的数量(以比特、字节等为测量单位),也就是说吞吐量是指在没有帧失落的状况下,设施可能接管并转发的最大数据速率。 4、包转发率是什么? 对于网络设备而言,除了吞吐量这个重要指标以外,报文转发率,也就是常说的包转发率是掂量网络设备性能的另一个次要指标。包转发率个别是指以64字节数据包的全双工吞吐量,该指标既包含吞吐量指标也涵盖了报文转发率指标。 上面以一个1000Mbps的线速端口计算一下其最大包转发率。1000Mbps=1,000,000,000bps/(84*8bit)≈1,488,095pps=1.488Mpps依照此算法以此类推,能够得出以下罕用线速端口的包转发率:万兆线速端口包转发率14.88Mpps千兆线速端口包转发率1.488Mpps百兆线速端口包转发率0.1488Mpps 包转发率=千兆端口数量×1.488Mpps+百兆端口数量0.1488Mpps+其余类型端口数相应计算方法。 24口百兆口,2个千兆口:21.488+240.1488≈6.6Mbps 5、线速替换:是指可能依照网络通信线上的数据传输速度实现无瓶颈的数据交换。其实现首先依ASIC芯片,通过专用硬件实现协定解析和数据包的转发,而不是通过软件形式依交换机的CPU实现。线速替换的实现还借助于分布式解决技术,交换机多个端口的数据流可能同时进行解决。因而局域网交换机能够看做是CPU、RISC和 ASIC并用的并行处理设施。 6,PoE供电功率 既然是PoE交换机,必看的关乎其供电性能的参数就是PoE供电功率,包含PoE供电规范和总的PoE功率两个方面。PoE供电规范有af和at规范,前者容许端口最大供电功率为15.4W,后者许端口最大供电功率为30W,所以反对at规范的PoE交换机更好。 四、规范POE交换机的供电过程 1、检测: poe交换机先输入很小的电压,检测到含有反对IEEE802.3at/af规范芯片的受电端设施(反对IEEE802.3at/af规范芯片简称”PD”)。 2、PD分类:检测到PD后, poe交换机对PD设施进行分类,并评估PD设施的功率。 3、供电:在启动期内(个别小于15s), poe交换机从低电压向PD供电,直到供够PD所需的电压,为PD设施提供稳固牢靠的直流电。 4、断电:若PD设施断开, poe替换机会疾速(个别在300~400ms之内)进行对PD供电,并反复检测过程以检测线缆的终端是否连贯PD设施。总的PoE功率个别都会在产品说明书中明确阐明,示意的是整个PoE交换机能够提供的最大供电功率。 五、POE交换机抉择时的注意事项 1、PoE交换机型号比拟多,端口数有4、8、16、24,端口传输速率有百兆和千兆的,供电功率有100W、200W、300W、400W的,须要什么端口数和端口传输速率的,都须要抉择正确。 2、网线品质的好坏对PoE供电的胜利与否至关重要,个别举荐应用超五类网线、六类网线以及超六类网线。网线的外部材质也很重要,不要应用什么铝线、铜包铝线、铜包铁线、铁芯线等,应用无氧铜网线最佳。 间隔在80米内实践上PoE供电的间隔在100米,但鉴于市场上网线质量以及环境的影响,理论采纳的供电间隔尽量维持在80米内。 3、PoE交换机尽量不要抉择非标的。非标的之所以还存在一是因为成本低,尽管非标有些场合也能够应用。但非标的PoE交换机存在安全隐患,比方烧坏与之连贯的网络设备。应用非标PoE交换机时,其供电电压和受电设备电压肯定要统一。 POE供电只是泛滥工程项目供电形式的一种,还有很多其余形式,都有各自的适用性,无所谓好坏,大家可依据我的项目需要和施工难度抉择应用。 官网:http://www.xmjisujia.cn 公众号:极速佳

November 5, 2021 · 1 min · jiezi

关于网络通信:github无法提交443问题

获取几个ip,而后配置本地hosts1.https://github.com.ipaddress.... 140.82.113.4 github.com 2.https://fastly.net.ipaddress.... 199.232.69.194 github.global.ssl.fastly.net 3.https://github.com.ipaddress....185.199.108.153 assets-cdn.github.com185.199.109.153 assets-cdn.github.com185.199.110.153 assets-cdn.github.com185.199.111.153 assets-cdn.github.com 刷新本地dns缓存windows: ipconfig/flushdns

October 13, 2021 · 1 min · jiezi

关于网络通信:网络是怎样连接的总概览

1.1 网络的全貌首先来看下浏览器拜访Web服务器这一过程的全貌。拜访Web服务器并显示网页这一过程蕴含了浏览器和Web服务器之间的一系列交互,在这些交互实现后,浏览器才会将Web服务器接管到的数据显示在屏幕上。 浏览器和Web服务器之间的交互: 浏览器向Web服务器发送申请Web服务器依据申请向浏览器发送响应而要实现应用程序之间的交互,须要一个可能在浏览器和Web服务器之间传递申请和响应的机制1。它不仅可能将数字信息搬运到指定目的地2,还能在任何状况下都可能将申请和响应3准确无误地发送给对方,防止在交互过程中数据产生失落或损坏状况。 这种搬运数字信息的机制是由操作系统中的网络控制软件,以及交互机、路由器等设施分工合作来实现的。它的基本思路就是将数字信息宰割成一个个的小块,而后装入被称为包4(packet)的容器中来运送,通过许多交换机和路由器的接力5,就能够将数据包一步步搬运到目的地。 而网络就是由这个负责搬运数字信息的机制,再加上浏览器和Web服务器组合而成。 1.2 Web浏览器当用户在浏览器中输出申请网址URL之后,浏览器就会依照肯定的规定去剖析该网址的含意,而后依据其含意生成申请音讯,接着浏览器会委托那个搬运数字信息的机制6,将申请发送给Web服务器。 1.3 协定栈、网卡这部分是搬运数字信息的机制内容。在这个机制内,次要是通过协定栈和网卡来将申请的数字信息转换为电信号发送到网络中去的。 协定栈:又叫网络控制软件。它的次要性能有: 将浏览器接管到的音讯打包,而后加上目标地址等管制信息在通信谬误时从新发送包调节数据发送的速率网卡:负责以太网或无线网络通信的硬件。 协定栈将打好包的数据交给网卡,而后网卡将包转换为电信号并通过网线发送进来1.4 集线器、交换机、路由器依据接入互联网的模式不同7,则接入互联网的通信设施也各不相同。因而在这里只能先假如客户端计算机是连贯到家庭或公司的局域网中,而后再通过ADSL和光纤到户(FTTH)等宽带接入互联网。 在这样的场景中,网卡发送到网络包会通过交换机等设施,达到用来接入互联网的路由器,路由器前面就是互联网,网络运营商会负责将包送到目的地。 1.5 接入网、网络运营商接下来,数据从路由器登程,进入了互联网的外部。互联网的入口线路称为接入网,接入网连贯到签约的网络运营商,并接入被称为接入点8的设施。 接入网:能够用电话线、ISDN、ADSL、有线电视、光线、专线等多种通信线路来接入互联网,这些通信线路统称为接入网 接入点:它的实体是一台专为运营商设计的路由器。接入点的前面就是互联网的骨干局部了(能够了解为离你家最近的邮局) 互联网骨干:在骨干网中存在很多运营商和大量的路由器,这些路由器相互连接,组成一张微小的网,而网络包就在其中通过若干路由器的接力,最终被发送到指标Web服务器上。 留神:路由器岂但在规模上存在差别,在路由器间的连贯形式上也存在差别。家庭和公司局域网中个别采纳以太网线进行连贯,而互联网中除了以太网连贯之外,还会应用比拟古老的电话技术和最新的光通信技术来传送网络包。 1.6 防火墙、缓存服务器通过骨干网之后,网络包最终送达了Web服务器所在的局域网中。接着它会遇到防火墙,防火墙会对进入的包进行查看。在查看完之后,网络包接下来还可能会遇到缓存服务器,如果要拜访的网页数据正好在缓存服务器中可能找到,那就间接从中读出数据。此外,在大型网站中,可能还会装备将音讯公布到多台Web服务器上的负载均衡器,还有可能会应用通过散布在整个互联网中的缓存服务器来散发内容的服务。通过这些机制后,网络包才会达到Web服务器。 1.7 Web服务器当网路包达到Web服务器之后,数据会被解包,并还原为原始的申请音讯,而后交给Web服务器程序。这个操作和客户端一样,都是通过操作系统中的协定栈来实现。之后,Web服务器程序会剖析申请音讯的含意,并依照其中的批示将数据装入响应音讯中,而后发回给客户端。 响应音讯回到客户端的过程和之前申请音讯发送的过程正好相同。当响应达到客户端之后,浏览器会从中读取出网页的数据并显示在屏幕上。至此,拜访Web服务器的一系列操作就全副实现了。 负责搬运数字信息的机制 ↩ 数字信息是因为申请和响应都是由 0 和 1 组成的 ↩ 申请和响应的实质都是电信号和光信号,这些信号可能会因受到杂音等的烦扰而损坏 ↩ 包相似于函件或者包裹,交换机和路由器相当于邮局或者快递公司的分拣解决区 ↩ 实际上就是依据管制信息对这些包进行分拣 ↩ 具体就是委托操作系统中的网络控制软件/协定栈将音讯发送给服务器 ↩ 客户端计算机能够通过家庭或公司的局域网接入互联网,也能够独自间接接入互联网 ↩ 接入点:Point of Presence,PoP ↩

May 12, 2021 · 1 min · jiezi

关于网络通信:小白看了也能懂的TCPIP基础

作者:hackett 微信公众号:加班猿 TCP/IP(Transmission Control Protocol/Internet Protocol)传输控制协议/网际协议)是指可能在多个不同网络间实现信息传输的协定簇。TCP/IP协定不仅仅指的是TCP 和IP两个协定,而是指一个由FTP、SMTP、TCP、UDP、IP等协定形成的协定簇, 只是因为在TCP/IP协定中TCP协定和IP协定最具代表性,所以被称TCP/IP协定。——《百度百科》 经典的OSI七层模型,TCP/IP被分为4层,每层的协定的工作形式不一样,所封装的下层数据的形式也不一样。 一、IP地址1、Windows下“win+r”弹出关上程序或资源的窗口,输出“cmd”后回车,用命令ipconfig即可查看电脑的IP地址(我用的是WiFi,所以看的是无线局域WLAN) 2、Linux下在终端输出 ifconfig -a 命令查看本人的IP地址 二、域名12位数字组成的IP地址难记,IP地址还有一个别名称作域名,IP地址和域名是一一对应的常见的域名后缀有com、net、org。一般来说.com是商业机构用的,.net网络服务供应商应用,.org是一些组织应用,当初没有什么限度。 1、咱们能够关上阿里云万网域名官网 2、咱们查下hackett这个名字的域名后缀为wiki是否曾经被注册,能够看到hackett.wiki这个域名曾经被注册了,想要注册只能选其余域名后缀或其余名字注册。 3、这是我本人19年底注册的域名hackett.wiki域名。 三、MAC地址MAC地址用于在网络中惟一标示一个网卡,一台设施若有一或多个网卡,则每个网卡都须要并会有一个惟一的MAC地址,由网络设备制造商生产时写在硬件外部。MAC地址是6Byte(48位)通常示意为12个16进制数,每2个16进制数之间用冒号隔开,如18:56:80:FA:DC:E1就是一个MAC地址 Windows下用ipconfig -all查看 Linux下在终端输出ifconfig命令查看 四、端口号IP地址是用来查找和发现网络中的地址的,端口号是用来进行程序互相通信的(打个比方:IP地址是一栋楼,端口就是进出这栋楼的入口),一个端口16Byte,即2^16=65536个,1~1023为公认的端口绑定了某些服务协定,不能轻易调配,从1024---49151是被注册的端口,也成为“用户端口”,其余的为长期端口。 罕用的有: FTP : 21TELNET : 23SMTP : 25DNS : 53TFTP : 69HTTP : 80SNMP : 161SSH :22五、IP数据报IP数据报的首部是5X4=20Byte,IP数据报=首部+数据局部 版本号:4位,0100示意IPV4,0110标记IPV6首部长度:4位,示意首部的长度,包含可选字段服务类型:最小时延、最大吞吐量、最高可靠性、最小破费4种,每种占1位总长度:报头长度+数据局部长度=总长度(16位)最多能够2^16=65536字节标识:16位,当数据报因为长度超过网络的MTU而必须分片时,依据分片中的标识字段是否雷同判断这些分片是否同一个数据报的分片,以此来进行分片的重组。通常每发送一份报文它的值就会加 1。标记:3位,只有2位有意义。第二位MF(More Fragment)位1示意前面还有‘’分片”的数据报,为0示意已到最初一个数据报;第三位DF(Don’t Fragment)为1意思是“不能分片”。只有当DF=0时才容许分片。偏移:13 位,在接管方进行数据报重组时用来标识分片的程序。生存工夫:8 位,用于设置数据报能够通过的最多的路由器个数。TTL 的初始值由源主机设置(通常为 32 或 64),每通过一个解决它的路由器,TTL 值减 1。如果一个数据报的 TTL 值被减至 0,它将被抛弃。协定:8 位,用来标识是哪个协定向 IP 传送数据。ICMP 为 1,IGMP 为 2,TCP 为 6,UDP 为 17,GRE 为 47,ESP 为 50。首部校验和:依据 IP 首部计算的校验和码。源 IP 和目标 IP :数据报头还会蕴含该数据报的发送方 IP 和接管方 IP。选项:是数据报中的一个可变长、可选的信息,不罕用,多用于平安、军事等畛域。六、IP的地址的分类IP的地址分成4类ipv4地址占4个字节(32位) ...

October 15, 2020 · 1 min · jiezi

关于网络通信:数据是怎么一步一步到服务器的

当咱们在浏览器输出www.baidu.com,回车当前,是怎么显示百度页面的?首先通过DNS查问IP首先咱们要晓得查问服务器都是通过IP来查找的,那么第一步就要查问www.baidu.com这个域名对应的IP是什么,这时候就须要去查问DNS服务器,那这个DNS服务器的地址咱们怎么晓得呢?个别DNS服务器地址能够主动获取或者手动设置 DNS服务器地址晓得了,那浏览器是怎么去查DNS服务器的呢?这就须要调用Socket库,外面封装了通过域名查问IP的办法,这个办法里具体做了什么,咱们前面再说,留神一点:查问DNS服务器应用的是UDP,而且DNS服务器不是一台,是很多台组成的DNS服务网互相接力,实现域名查找。 组装HTTP包www.baidu.com对应的IP咱们拿到了,接下来就要正式开始咱们的旅程了。 首先,浏览器查问这个地址属于http申请,那咱们就要组装对应的http包,http包个别分为申请头和申请体, 在浏览器按f12能够查看每个申请的http报文,如下 因为咱们只是在地址栏输出了www.baidu.com,没有申请体,平时咱们提交表单等其余操作时,在这里能够看到对应的申请体。申请头都是键值对,每个键都有对应的含意。而申请体的格局就各种各样了,个别依据申请头的Content-type字段来决定。 组装TCP包在组装TCP数据之前,我先解释一下TCP/IP协定,精确来说,它应该是叫TCP/IP协定簇,指的是可能在不同网络间实现信息传输的协定簇,外面包含FTPSMTPTCPUDPIP等等,因为外面TCP和IP具备代表性,所以把它叫做TCP/IP协定。 浏览器在组装好HTTP报文当前,会调用Socket库里相应的办法来把报文委托给TCP/IP协定栈来解决。 先通过socket(参数)来取得socket描述符。通过connect(参数)来和服务端建设链接。通过write(参数)来发送数据。通过read(参数)来获取数据。最初close(描述符)敞开socket。在解释下面操作之前,咱们要分明TCP是面向连贯的,客户端和服务端通信首先须要建设连贯,而后能力通信。其实这个连贯就是两边的套接字连贯造成一个虚构的管道,下文用socket示意套接字。 发送数据,咱们首先来看一下前三步。 第一步通过socket(参数)来取得socket描述符。先来介绍一下什么是描述符,描述符能够了解为一种事物的索引,例如文件描述符,操作系统如果要操作文件,须要通过文件描述符来拜访文件,socket描述符也是一样,操作socket须要通过socket描述符。前面的操作都是通过socket来实现,所以咱们首先要取得socket描述符。能够通过netstat -ano查看本机创立的socket。 第二步通过connect(参数)来和服务端建设链接。这里就是咱们面试常常被问到的三次握手了,咱们简略的回顾一下什么是三次握手,首先客户端会生成一个SYN比特位为1的TCP包发送给服务端,服务端接管到当前也会发一个SYN比特位为1的TCP包给客户端,然而这个TCP包里还蕴含了一个确认收到客户端包的ACK号,最初客户端收到服务端发过来的包当前会返回一个确认号ACK给服务端,这样客户端和服务端就建设连贯了,客户端的socket和服务端的socket就像是通过一个管道连接起来了。 第三步通过write(参数)来发送数据。连贯建设好当前,就要开始发送数据了,在调用read办法里会将数据委托给TCP模块来解决,TCP模块承受到数据后,会在申请包后面加上TCP头部,外面蕴含发送方和接管方的端口,用来查找具体连贯哪个socket。 TCP模块收到数据并不会马上发送数据,因为数据怎么发送是应用程序来管制的,有的程序是一次性发送所有数据,有的的确逐字节或者逐行发送,如果TCP模块接到数据就马上发送,那可能会呈现发送一堆小包的状况,导致网络效率降落。那TCP在什么时候发送数据呢?当TCP收到数据当前,会放入缓冲区,当数据达到一个网络包的最大长度时,或者期待超过肯定工夫时,就会执行发送操作。 HTTP申请音讯个别不会很长,一个网络包就能装下,但如果申请数据很大,超过了一个网络包的最大容量,这就须要对包进行拆分,拆分后的每个包后面都加上TCP头部, 第四步通过read(参数)来获取数据。和发送数据一样,接管的数据会先暂存在缓冲区,当调用read办法获取数据时,会先从缓冲区中取数据,如果缓冲区中还没有数据,则挂起以后线程,等接管到返回数据当前,先判断数据包是否残缺,如果不残缺则持续接管剩下的数据包,接管完当前按程序连接起来还原出原始的数据,最初将数据交给应用程序。 第五步最初close(描述符)敞开socket。这就是咱们相熟的四次挥手,再来回顾一下四次挥手,当服务器响应音讯后,这时申请过程就完结了,服务器一方会发动断开过程,这是HTTP1.0,如果是HTTP1.1则是客户端发动端口过程,两者只是结尾不一样,过程都是一样的。 首先客户端程序调用close办法,TCP模块会生成蕴含端口信息的TCP头部,外面FIN比特位为1,服务端收到FIN为1的TCP头部时,会将本人的socket标记改为断开状态,而后返回给客户端一个ACK号。服务端同样也会调用close办法来敞开socket,发送一个FIN为1的TCP头部包给客户端,而后客户端会返回一个ACK号给服务端。至此单方就断开连接了。 下面提到的三次握手和四次挥手如图 组装IP包TCP模块在执行连贯、收发和断开等操作时,都须要委托IP模块将包发送给通信对象。IP模块会在TCP包后面加上IP头部和MAC头部,IP头部里记录了源IP和目标IP,MAC头部里记录了下一个路由设施的MAC地址。这里要明确一点,IP头部是IP协定,而MAC头部是以太网协定(以太网能够简略的了解成局域网)。 IP头部中的IP地址是固定不变的,始终是目标服务器的IP地址,然而MAC头部中的MAC地址是变动的,当申请包达到第一个路由器时,路由器会依据路由表查出下一个路由器的MAC地址,而后将此MAC地址替换原MAC地址,再持续转发。一个申请包从客户端到服务端个别会通过多个路由器。 那是怎么从IP失去MAC地址的呢?这就须要通过ARP(Address Resolution Protocol)来查问,ARP其实就是一种播送,把包发给以太网中所有设施,当其中设施发现包中IP是本人的,就会返回信息通知本人的MAC地址。当然这种每次都播送太耗性能了,所以会有ARP缓存,如果以前查过此IP的MAC地址,那ARP缓存中会有记录,间接查缓存就行了,如果缓存中没有再进行ARP播送。能够通过arp -a命令来查看本地ARP缓存记录。 网卡IP生成的包只是存在内存中的一串数字信息,无奈间接发送给对方,因而咱们须要将数字信息转换为电或光信号,能力在网线中传输,负责这一步的就是网卡。然而光有网卡还不行,还须要网卡驱动,各种硬件设施都有本人的驱动程序,当然网卡也不例外,驱动程序就是硬件厂商开发的专用程序。 网卡驱动从IP模块获取包之后,会将其复制到网卡内的缓冲区中,而后向MAC模块(这里MAC模块和IP中的MAC头部辨别开)发送发送命令,MAC模块从缓冲区中取出包,并在结尾加上报头和起始帧分界符,在开端加上用于检测谬误的FCS帧校验序列。 用电信号来示意数字信息时,就须要让0和1两种比特别离对应特定的电压和电流,通过电信号来读取数字信息过程则相同。在测量电压和电流时,必须判断每个比特的界线在哪里,如果数字信号有间断的0或者1,则很难判断界线在哪。要解决这个问题,能够增加一个用于参照的时钟信号,它是一串平均变动的电信号。将数字信号和时钟叠加在一起传输就能够了,读取数字信号减去时钟信号就能够了。 集线器加上报头、起始帧分界符和FCS之后,就能够将包通过网线发送进来了。发送信号分为两种,应用集线器的半双工模式(同一时刻只能发送或者接管)和应用交换机的全双工模式(同一时刻发送和接管能够并行)。当初根本都是交换机的全双工模式了。 在半双工模式下,为了防止信号碰撞,首先要判断网线中是否有其余信号在传输,如果有,则须要期待其余信号传输结束再进行传输,网卡中MAC模块将包从报头到FCS按每个比特转换成电信号,而后由PHY/MAU(两者传输速率不同)模块将信号转换为可在网线中传输的格局后通过网线发送进来。 集线器将信号发送给所有连贯在它下面的线路,传输两头可能因为噪声等烦扰,信号达到接管设施(交换机或路由器)当前可能会失真,传输过程能够通过各种伎俩来缩小烦扰,如双绞线等。接管设施接管到包当前,会通过FCS来校错,如果出错就会抛弃包(TCP模块有重传机制,如果没收到ACK信号,会进行重传)。 交换机交换机接管到包,首先信号达到PHY/MAU模块(和集线器一样),而后将信号转为通用格局到MAC模块,MAC模块再将信号转为数字信息,而后通过开端的FCS校错。交换机有多个端口,每个端口和计算机中的网卡相似,只是它的端口没有MAC地址,不会校验包是否是传给本人的,而是接管所有的包放入缓冲区中。 交换机中保护着一张MAC地址和端口的映射表。当收到包时,替换机会将发送方MAC地址和连贯的端口记录在映射表中,这样下次接管到包的目标MAC地址是这台机器的话,就能够间接通过映射表找到。有时候也须要删除映射表中的记录,比方笔记本电脑从a区域拿到了b区域,此时映射表中此笔记本的MAC地址还对应a区域的端口,因而保留映射表记录的时候须要设置生效工夫,过了生效工夫会主动删除。 交换机传输信号应用的是全双工模式,也就是发送和接管能够同时进行,而且此模式下,不会发送信号碰撞。 路由器网络包通过交换机达到路由器,路由器再转发到下一个路由器,这个转发和交换机相似,也是通过查表来判断转发的指标,不过两者还是有区别的,路由器是基于IP设计的,而交换机是基于以太网设计的。 路由器分为转发模块和端口模块,端口模块中蕴含各种端口用来接管和转发网络包,转发模块中有一张路由表,依据包中的IP地址和路由表中信息来指定端口转发。 首先路由器通过端口将包接管进来,这个过程取决于端口对应的通信技术,如果是以太网端口,就依照以太网标准工作,如果是无线局域网端口,就依照无线局域网的标准工作。接管到包当前先判断包中MAC地址是不是本人的,如果不是本人的则间接抛弃,如果是本人的则交给转发模块,接下来转发模块会依据接管到的包的IP头部中接管方IP地址在路由表中查问对应的端口,最初通过对应的端口转发进来。 路由器工作过程看起来和交换机很相似,然而两者还是有区别的,首先路由器各个端口都是有MAC地址和IP地址的,这和计算机中网卡一样,也就是路由器会成为发送方或者接管方。而交换机不是,它的端口没有MAC地址,不会成为发送方或者接管方,交换机用作包的转发。而且交换机是依据MAC头部中的MAC地址来转发的,而路由器是依据IP头部中的IP地址来转发的。 在交换机中,须要匹配MAC地址和地址表中完全一致的记录,而路由器则匹配IP地址中的网络号局部,上面是一张简略的路由器路由表 在这里解释一下什么是子网掩码,IP地址个别分为网络号和主机号,子网掩码就是用来辨别网络号和主机号,比方一个IP地址:10.11.6.54,子网掩码是:255.255.255.0。子网前三位都是255,对应二进制都是1,那前三位示意网络号,前面一位是主机号。那10.11.6.54对应的网络号是10.11.6,主机号是54。 后面说的路由器只匹配IP地址中的网络号局部,那IP地址是10.11.6结尾的都会匹配到第一条记录。如果找不到匹配记录,则会匹配最初一个0.0.0.0默认路由。 路由器包的转发和计算机相似,先查问路由表中对应的转发记录,如果对应的网关是IP,则下一个转发地址就是这个网关IP,如果网关地址是空的,则下一个转发地址是包中目标IP,而后通过ARP获取IP对应的MAC地址,接着改写原包中MAC头部中目标IP的MAC地址。 个别路由器前面连着互联网,转发端口连着ADSL(电话线)或者FTTH(光纤)等等。 互联网接入路由器信号从以太网路由器达到互联网接入路由器进入互联网。 互联网接入路由器根本工作流程和以太网路由器一样,然而其中会有一点区别。互联网接入路由器接管到以太网包当前,会取出IP包,而后会在其头部加上MAC头部(BAS的MAC地址)、PPPoE头部和PPP头部,而后发给ADSL Modem(猫)。 ADSL Modem(猫)ADSL Modem叫做调制解调器,因电话线中传递的只能是模仿电信号,而猫能够将数字信号转换为模仿电信号。 ADSL Modem接管到互联网接入路由器传过来的包当前,会将包拆分成很多个信元(十分小的数据块),而后将这些信元转换成电信号发送进来。这里的电信号和以太网中的电信号有点不一样,以太网中应用的是方波,而这里应用的是圆滑波。 ADSL Modem将信元转换成电信号当前,信号会进入分离器,而后ADSL信号会和电话信号一起从电话线传输进来,这个分离器的作用就是将ADSL信号和电话信号拆散。 ...

August 10, 2020 · 1 min · jiezi

关于网络通信:网络协议笔记七应用层2

十四、流媒体协定三个名词系列名词系列一:AVI、MPEG、RMVB、MP4、MOV、FLV、WebM、WMV、ASF、MKV。例如 RMVB 和 MP4名词系列二:H.261、 H.262、H.263、H.264、H.265。名词系列三:MPEG-1、MPEG-2、MPEG-4、MPEG-7。 视频是什么?其实就是疾速播放一连串间断的图片。每一张图片,咱们称为一帧。 只有每秒钟帧的数据足够多,也即播放得足够快。比方每秒30 帧,以人的眼睛的敏感水平,是看不出这是一张张独立的图片的,这就是咱们常说的帧率(FPS)。 每一张图片,都是由像素组成的,假如为 1024*768(这个像素数不算多)。每个像素由RGB 组成,每个 8 位,共 24 位。 每秒钟的视频有多大?30 帧 × 1024 × 768 × 24 = 566,231,040Bits = 70,778,880Bytes如果一分钟呢?4,246,732,800Bytes,曾经是 4 个 G 了。 这个数据量切实是太大,基本没方法存储和传输。编码,就是看如何用尽量少的 Bit 数保留视频,使播放的时候画面看起来依然很精美。编码是一个压缩的过程。 视频和图片的压缩过程有什么特点?之所以可能对视频流中的图片进行压缩,因为视频和图片有这样一些特点。 空间冗余:图像的相邻像素之间有较强的相关性,一张图片相邻像素往往是突变的,不是渐变的,没必要每个像素都残缺地保留,能够隔几个保留一个,两头的用算法计算出来。工夫冗余:视频序列的相邻图像之间内容类似。一个视频中间断呈现的图片也不是渐变的,能够依据已有的图片进行预测和推断。视觉冗余:人的视觉系统对某些细节不敏感,因而不会每一个细节都留神到,能够容许失落一些数据。编码冗余:不同像素值呈现的概率不同,概率高的用的字节少,概率低的用的字节多,相似霍夫曼编码(Huffman Coding)的思路。 视频编码的两大流派流派一:ITU(International Telecommunications Union)的 VCEG(Video CodingExperts Group),这个称为国际电联下的 VCEG。既然是电信,可想而知,他们最后做视频编码,次要偏重传输。名词系列二,就是这个组织制订的规范。流派二:ISO(International Standards Organization)的 MPEG(Moving PictureExperts Group),这个是ISO 旗下的 MPEG,原本是做视频存储的。例如,编码后保留在 VCD 和 DVD 中。当然起初也缓缓偏重视频传输了。名词系列三,就是这个组织制订的规范。 起初,ITU-T(国际电信联盟电信标准化部门,ITU Telecommunication StandardizationSector)与 MPEG 联结制订了 H.264/MPEG-4 AVC, 这才是咱们要重点关注的。 通过编码之后,生动活泼的一帧一帧的图像,就变成了一串串让人看不懂的二进制,这个二进制能够放在一个文件外面,依照肯定的格局保存起来,这就是名词系列一。 如何看直播?当然,这个二进制也能够通过某种网络协议进行封装,放在互联网上传输,这个时候就能够进行网络直播了。 网络协议将编码好的视频流,从主播端推送到服务器,在服务器上有个运行了同样协定的服务端来接管这些网络包,从而失去外面的视频流,这个过程称为接流。 ...

August 4, 2020 · 5 min · jiezi

关于网络通信:网络协议笔记五传输层2

十一、套接字Socket基于 TCP 和 UDP 协定的 Socket 编程。Socket 编程进行的是端到端的通信,往往意识不到两头通过多少局域网,多少路由器,因此可能设置的参数,也只能是端到端协定之上网络层和传输层的。 在网络层,Socket 函数须要指定到底是 IPv4 还是 IPv6,别离对应设置为 AF_INET 和AF_INET6。另外,还要指定到底是 TCP 还是 UDP。还记得咱们后面讲过的,TCP 协定是基于数据流的,所以设置为 SOCK_STREAM,而 UDP 是基于数据报的,因此设置为SOCK_DGRAM。 基于 TCP 协定的 Socket 程序函数调用过程TCP 的服务端要先监听一个端口,个别是先调用 bind 函数,给这个 Socket 赋予一个 IP地址和端口。为什么须要端口呢?要晓得,你写的是一个应用程序,当一个网络包来的时候,内核要通过 TCP 头外面的这个端口,来找到你这个应用程序,把包给你。为什么要 IP地址呢?有时候,一台机器会有多个网卡,也就会有多个 IP 地址,你能够抉择监听所有的网卡,也能够抉择监听一个网卡,这样,只有发给这个网卡的包,才会给你。 当服务端有了 IP 和端口号,就能够调用 listen 函数进行监听。在 TCP 的状态图外面,有一个 listen 状态,当调用这个函数之后,服务端就进入了这个状态,这个时候客户端就能够发动连贯了。 在内核中,为每个 Socket 保护两个队列。一个是曾经建设了连贯的队列,这时候连贯三次握手曾经结束,处于 established 状态;一个是还没有齐全建设连贯的队列,这个时候三次握手还没实现,处于 syn_rcvd 的状态。 接下来,服务端调用 accept 函数,拿出一个曾经实现的连贯进行解决。如果还没有实现,就要等着。在服务端期待的时候,客户端能够通过 connect 函数发动连贯。先在参数中指明要连贯的IP 地址和端口号,而后开始发动三次握手。内核会给客户端调配一个长期的端口。一旦握手胜利,服务端的 accept 就会返回另一个 Socket。 监听的 Socket 和真正用来传数据的 Socket 是两个,一个叫作监听 Socket,一个叫作已连贯 Socket。 ...

August 4, 2020 · 2 min · jiezi

关于网络通信:网络协议笔记五传输层2

十一、套接字Socket基于 TCP 和 UDP 协定的 Socket 编程。Socket 编程进行的是端到端的通信,往往意识不到两头通过多少局域网,多少路由器,因此可能设置的参数,也只能是端到端协定之上网络层和传输层的。 在网络层,Socket 函数须要指定到底是 IPv4 还是 IPv6,别离对应设置为 AF_INET 和AF_INET6。另外,还要指定到底是 TCP 还是 UDP。还记得咱们后面讲过的,TCP 协定是基于数据流的,所以设置为 SOCK_STREAM,而 UDP 是基于数据报的,因此设置为SOCK_DGRAM。 基于 TCP 协定的 Socket 程序函数调用过程TCP 的服务端要先监听一个端口,个别是先调用 bind 函数,给这个 Socket 赋予一个 IP地址和端口。为什么须要端口呢?要晓得,你写的是一个应用程序,当一个网络包来的时候,内核要通过 TCP 头外面的这个端口,来找到你这个应用程序,把包给你。为什么要 IP地址呢?有时候,一台机器会有多个网卡,也就会有多个 IP 地址,你能够抉择监听所有的网卡,也能够抉择监听一个网卡,这样,只有发给这个网卡的包,才会给你。 当服务端有了 IP 和端口号,就能够调用 listen 函数进行监听。在 TCP 的状态图外面,有一个 listen 状态,当调用这个函数之后,服务端就进入了这个状态,这个时候客户端就能够发动连贯了。 在内核中,为每个 Socket 保护两个队列。一个是曾经建设了连贯的队列,这时候连贯三次握手曾经结束,处于 established 状态;一个是还没有齐全建设连贯的队列,这个时候三次握手还没实现,处于 syn_rcvd 的状态。 接下来,服务端调用 accept 函数,拿出一个曾经实现的连贯进行解决。如果还没有实现,就要等着。在服务端期待的时候,客户端能够通过 connect 函数发动连贯。先在参数中指明要连贯的IP 地址和端口号,而后开始发动三次握手。内核会给客户端调配一个长期的端口。一旦握手胜利,服务端的 accept 就会返回另一个 Socket。 监听的 Socket 和真正用来传数据的 Socket 是两个,一个叫作监听 Socket,一个叫作已连贯 Socket。 ...

August 4, 2020 · 2 min · jiezi

关于网络通信:网络协议笔记五应用层

十二、HTTP 协定十三、HTTPS 协定十四、流媒体协定十五、P2P协定

July 31, 2020 · 1 min · jiezi

关于网络通信:网络协议笔记四传输层

九、UDP 协定TCP 和 UDP 有哪些区别?TCP 是面向连贯的,UDP 是面向无连贯的。所谓的建设连贯,是为了在客户端和服务端保护连贯,而建设肯定的数据结构来保护单方交互的状态,用这样的数据结构来保障所谓的面向连贯的个性。 TCP 提供牢靠交付。 通过 TCP 连贯传输的数据,无差错、不失落、不反复、并且按序达到。咱们都晓得 IP 包是没有任何可靠性保障的, 一旦收回去只能事在人为,而UDP 继承了 IP 包的个性,不保障不失落,不保障按程序达到。 TCP 是面向字节流的。发送的时候发的是一个流,没头没尾。 IP 包可不是一个流,而是一个个的 IP 包。之所以变成了流,这也是 TCP 本人的状态保护做的事件。而UDP 继承了 IP 的个性,基于数据报的,一个一个地发,一个一个地收。 TCP 是能够有拥塞管制的。 它意识到包抛弃了或者网络的环境不好了,就会依据状况调整本人的行为,看看是不是发快了,要不要发慢点。UDP 就不会,利用让我发,我就发,管它洪水滔天。 因此TCP 其实是一个有状态服务, 艰深地讲就是有脑子的,外面准确地记着发送了没有,接管到没有,发送到哪个了,应该接管哪个了,错一点儿都不行。而 UDP 则是无状态服务。 艰深地说是没脑子的,天真无邪的,收回去就收回去了。 咱们能够这样比喻,如果 MAC 层定义了本地局域网的传输行为,IP 层定义了整个网络端到端的传输行为, 这两层根本定义了这样的基因:网络传输是以包为单位的,二层叫帧,网络层叫包,传输层叫段。 咱们抽象地称为包。包独自传输,自行选路,在不同的设施封装解封装,不保障达到。 基于这个基因,生下来的孩子 UDP 齐全继承了这些个性,简直没有本人的思维。 UDP 包头发送的时候,我晓得我发的是一个 UDP 的包,收到的那台机器咋晓得的呢?所以在 IP 头外面有个 8 位协定,这里会寄存,数据外面到底是 TCP 还是 UDP,当然这里是 UDP。于是,如果咱们晓得 UDP 头的格局,就能从数据外面,将它解析进去。 当我发送的 UDP 包达到指标机器后,发现 MAC 地址匹配,于是就取下来,将剩下的包传给解决 IP 层的代码。把 IP 头取下来,发现指标 IP 匹配,接下来而后就给传输层解决,解决完后,内核的事件根本就干完了,外面的数据应该交给应用程序本人去解决。 ...

July 31, 2020 · 3 min · jiezi

关于网络通信:网络协议三链路层和网络层

六、ICMP与pingICMP协定的格局ping 是基于 ICMP 协定工作的。ICMP全称Internet Control Message Protocol,就是互联网管制报文协定。ICMP 报文是封装在 IP 包外面的。因为传输指令的时候,必定须要源地址和指标地址。它自身非常简单。ICMP 报文有很多的类型,不同的类型有不同的代码。最罕用的类型是被动申请为 8,被动申请的应答为 0。 查问报文类型罕用的ping 就是查问报文,是一种被动申请,并且取得被动应答的 ICMP 协定。所以,ping 发的包也是合乎 ICMP 协定格局的,只不过它在前面减少了本人的格局。对 ping 的被动申请,进行网络抓包,称为ICMP ECHO REQUEST。同理被动申请的回复,称为ICMP ECHO REPLY。比起原生的 ICMP,这外面多了两个字段,一个是标识符(标识是申请还是回复),另一个是序号(每个收回的报文都有序号)。 在选项数据中,ping 还会寄存发送申请的工夫值,来计算往返工夫,阐明途程的长短。 过错报文类型起点不可达为 3,源克制为 4,超时为 11,重定向为 5。过错报文的构造绝对简单一些。除了后面还是 IP,ICMP 的前 8 字节不变,前面则跟上出错的那个 IP 包的 IP 头和 IP 注释的前 8 个字节。 ping:查问报文类型的应用ping 命令执行的时候,源主机首先会构建一个 ICMP 申请数据包,ICMP 数据包内蕴含多个字段。最重要的是两个,第一个是类型字段,对于申请数据包而言该字段为 8;另外一个是顺序号,次要用于辨别间断 ping 的时候收回的多个数据包。每收回一个申请数据包,顺序号会主动加 1。为了可能计算往返工夫 RTT,它会在报文的数据局部插入发送工夫。 主机 B 会构建一个 ICMP 应答包,应答数据包的类型字段为 0,顺序号为接管到的申请数据包中的顺序号,而后再发送进来给主机 A。 在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则阐明指标主机不可达;如果接管到了 ICMP 应答包,则阐明指标主机可达。此时,源主机会查看,用以后时刻减去该数据包最后从源主机上收回的时刻,就是 ICMP 数据包的时间延迟。 ...

July 30, 2020 · 1 min · jiezi

关于网络通信:网络协议三链路层和网络层

六、ICMP与pingICMP协定的格局ping 是基于 ICMP 协定工作的。ICMP全称Internet Control Message Protocol,就是互联网管制报文协定。ICMP 报文是封装在 IP 包外面的。因为传输指令的时候,必定须要源地址和指标地址。它自身非常简单。ICMP 报文有很多的类型,不同的类型有不同的代码。最罕用的类型是被动申请为 8,被动申请的应答为 0。 查问报文类型罕用的ping 就是查问报文,是一种被动申请,并且取得被动应答的 ICMP 协定。所以,ping 发的包也是合乎 ICMP 协定格局的,只不过它在前面减少了本人的格局。对 ping 的被动申请,进行网络抓包,称为ICMP ECHO REQUEST。同理被动申请的回复,称为ICMP ECHO REPLY。比起原生的 ICMP,这外面多了两个字段,一个是标识符(标识是申请还是回复),另一个是序号(每个收回的报文都有序号)。 在选项数据中,ping 还会寄存发送申请的工夫值,来计算往返工夫,阐明途程的长短。 过错报文类型起点不可达为 3,源克制为 4,超时为 11,重定向为 5。过错报文的构造绝对简单一些。除了后面还是 IP,ICMP 的前 8 字节不变,前面则跟上出错的那个 IP 包的 IP 头和 IP 注释的前 8 个字节。 ping:查问报文类型的应用ping 命令执行的时候,源主机首先会构建一个 ICMP 申请数据包,ICMP 数据包内蕴含多个字段。最重要的是两个,第一个是类型字段,对于申请数据包而言该字段为 8;另外一个是顺序号,次要用于辨别间断 ping 的时候收回的多个数据包。每收回一个申请数据包,顺序号会主动加 1。为了可能计算往返工夫 RTT,它会在报文的数据局部插入发送工夫。 主机 B 会构建一个 ICMP 应答包,应答数据包的类型字段为 0,顺序号为接管到的申请数据包中的顺序号,而后再发送进来给主机 A。 在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则阐明指标主机不可达;如果接管到了 ICMP 应答包,则阐明指标主机可达。此时,源主机会查看,用以后时刻减去该数据包最后从源主机上收回的时刻,就是 ICMP 数据包的时间延迟。 ...

July 30, 2020 · 1 min · jiezi

关于网络通信:网络协议二链路层和网络层

四、从物理层到 MAC层五、交换机与 VLAN六、ICMP与ping七、网关八、路由协定

July 30, 2020 · 1 min · jiezi

从输入url到显示网页发生了什么

在浏览器中输入url到显示网页主要包含两个部分: 网络通信+页面渲染 互联网内各网络设备间的通信都遵循TCP/IP协议,利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。分层由高到低分别为:应用层、传输层、网络层、数据链路层。发送端从应用层往下走,接收端从数据链路层网上走 1.浏览器的地址栏输入URL并按下回车 我们常见的RUL是这样的:www.baidu.com,域名通常由3部分组成:协议 域名 端口号 协议:主要是HTTP协议,HTTPS协议,FTP协议,FILe协议域名:url中间部分为域名或者IP端口号:通常默认都是隐藏的 http默认端口号为80 https默认端口号为443 涉及知识点: 跨域在前端进行数据请求时,由于浏览器的同源策略,协议,域名,端口号有一个不同会存在跨域请求,需要进行跨域处理,相关的跨域方法点击user-gold-cdn.xitu.io/2018/11/19/… 2.DNS域名解析 互联网上每一台计算机的唯一标识是它的IP地址,但是IP地址并不方便记忆。用户更喜欢用方便记忆的网址去寻找互联网上的其它计算机,也就是上面提到的百度的网址。所以互联网设计者需要在用户的方便性与可用性方面做一个权衡,这个权衡就是一个网址到IP地址的转换,这个过程就是DNS解析,即实现了网址到IP地址的转换解析过程DNS解析是一个递归查询的过程。 上述图片是查找www.google.com的IP地址过程。首先在本地域名服务器中查询IP地址,如果没有找到的情况下,本地域名服务器会向根域名服务器发送一个请求,如果根域名服务器也不存在该域名时,本地域名会向com顶级域名服务器发送一个请求,依次类推下去。直到最后本地域名服务器得到google的IP地址并把它缓存到本地,供下次查询使用。从上述过程中,可以看出网址的解析是一个从右向左的过程: com -> google.com -> www.google.com。但是你是否发现少了点什么,根域名服务器的解析过程呢?事实上,真正的网址是www.google.com.,并不是我多打了一个.,这个.对应的就是根域名服务器,默认情况下所有的网址的最后一位都是.,既然是默认情况下,为了方便用户,通常都会省略,浏览器在请求DNS的时候会自动加上,所有网址真正的解析过程为: . -> .com -> google.com. -> www.google.com.。DNS优化DNS缓存和DNS负载均衡DNS缓存DNS存在着多级缓存,从离浏览器的距离排序的话,有以下几种: 浏览器缓存,系统缓存,路由器缓存,IPS服务器缓存,根域名服务器缓存,顶级域名服务器缓存,主域名服务器缓存。 在你的chrome浏览器中输入:chrome://dns/,你可以看到chrome浏览器的DNS缓存。 系统缓存主要存在/etc/hosts(Linux系统)中: DNS负载均衡真实的互联网世界背后存在成千上百台服务器,大型的网站甚至更多。但是在用户的眼中,它需要的只是处理他的请求,哪台机器处理请求并不重要。DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡,又叫做DNS重定向 3.建立TCP连接 在通过DNS域名解析后,获取到了服务器的IP地址,在获取到IP地址后,便会开始建立一次连接,这是由TCP协议完成的,主要通过三次握手进行连接。 第一次握手: 建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。这里需要了解下ACK,SYN的意义 完成TCP连接后开使向服务器进行请求 4.向服务器发送请求 完整的HTTP请求包含请求起始行、请求头部、请求主体三部分。 5.服务器接受响应 服务器在收到浏览器发送的HTTP请求之后,会将收到的HTTP报文封装成HTTP的Request对象,并通过不同的Web服务器进行处理,处理完的结果以HTTP的Response对象返回,主要包括状态码,响应头,响应报文三个部分。状态码主要包括以下部分: 1xx:指示信息–表示请求已接收,继续处理。2xx:成功–表示请求已被成功接收、理解、接受。3xx:重定向–要完成请求必须进行更进一步的操作。4xx:客户端错误–请求有语法错误或请求无法实现。5xx:服务器端错误–服务器未能实现合法的请求。 响应头主要由Cache-Control、 Connection、Date、Pragma等组成。响应体为服务器返回给浏览器的信息,主要由HTML,css,js,图片文件组成。 6.页面渲染 如果说响应的内容是HTML文档的话,就需要浏览器进行解析渲染呈现给用户。整个过程涉及两个方面:解析和渲染。在渲染页面之前,需要构建DOM树和CSSOM树。 在浏览器还没接收到完整的 HTML 文件时,它就开始渲染页面了,在遇到外部链入的脚本标签或样式标签或图片时,会再次发送 HTTP 请求重复上述的步骤。在收到 CSS 文件后会对已经渲染的页面重新渲染,加入它们应有的样式,图片文件加载完立刻显示在相应位置。在这一过程中可能会触发页面的重绘或重排。这里就涉及了两个重要概念:Reflow和Repaint。 Reflow,也称作Layout,中文叫回流,一般意味着元素的内容、结构、位置或尺寸发生了变化,需要重新计算样式和渲染树,这个过程称为Reflow。Repaint,中文重绘,意味着元素发生的改变只是影响了元素的一些外观之类的时候(例如,背景色,边框颜色,文字颜色等),此时只需要应用新样式绘制这个元素就OK了,这个过程称为Repaint。 所以说Reflow的成本比Repaint的成本高得多的多。DOM树里的每个结点都会有reflow方法,一个结点的reflow很有可能导致子结点,甚至父点以及同级结点的reflow。 7.关闭TCP连接或继续保持连接 通过四次挥手关闭连接(FIN ACK, ACK, FIN ACK, ACK)。 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

July 6, 2019 · 1 min · jiezi

HTTPHTTP-的15个常见知识点复习

前言自从入职新公司到现在,我们前端团队内部一直在做 ????每周一练 的知识复习计划,我之前整理了一个 每周一练 之 数据结构与算法 学习内容,大家也快去看看~~ 最近三周,主要复习 网络基础 相关的知识,今天我把这三周复习的知识和参考答案,整理成本文,欢迎各位朋友互相学习和指点,觉得本文不错,也欢迎点赞哈????????。 特别喜欢现在的每周学习和分享,哈哈哈~~???? ????推荐一个 github 仓库 —— 《awesome-http》,内容挺棒的。 注:本文整理资料来源网络,有些图片/段落找不到原文出处,如有侵权,联系删除。一. 简述浏览器输入 URL 地址后发生的事情1.1 描述浏览器向 DNS 服务器查找输入 URL 对应的 IP 地址。NS 服务器返回网站的 IP 地址。浏览器根据 IP 地址与目标 web 服务器在 80 端口上建立 TCP 连接。浏览器获取请求页面的 HTML 代码。浏览器在显示窗口内渲染 HTML 。窗口关闭时,浏览器终止与服务器的连接。1.2 TCP 知识点补充参考文章:《TCP三次握手和四次挥手协议》 建立 TCP 需要三次握手才能建立,而断开连接则需要四次握手。整个过程如下图所示: TCP三次握手: 所谓的三次握手,是指建立一个 TCP 连接时,需要客户端和服务器端总共发送三个包,三次握手的目的是连接服务器的指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小信息,在 SOCKET 编程中,客户端执行 connect() 时,将会触发三次握手: TCP四次挥手: TCP连接的拆除需要发送四个包,客户端或者服务器端均可主动发起挥手动作,在SOCKET编程中,任何一方执行close()即可产生挥手操作。 2. 请介绍常见的 HTTP 状态码(至少五个)状态码是由 3 位数组成,第一个数字定义了响应的类别,且有五种可能取值: ...

June 22, 2019 · 4 min · jiezi

VXLAN学习笔记(一)

VXLAN理解本文章是基于H3C VXLAN配置手册的一些理解和心得体会。本人计算机专业出身,从事软件开发,目前转入云网络相关工作,所以重新开始学习网络知识。VXLAN是第一个要学习的任务,顾作为总结性的输出,目的是帮助个人理解和帮助后来人理解,如果有不对的地方也希望大神指点。VXLAN概念VXLAN(Virtual eXtensible LAN,可扩展虚拟局域网络)是基于 IP 网络、采用“MAC in UDP”封装形式的二层 VPN 技术PS:理解VXLAN网络之前首先要理解二三层转发的基本原理。(MAC地址学习,路由选择等)因为通过定义可以看出,VXLAN技术是VPN技术的一种。所以了解VXLAN首先应该理解什么是VPN技术,VPN技术又包括L2VPN和L3VPN。VPN定义虚拟专用网络。VXLAN目的就是要在三层网络上构建一个虚拟的二层网络。VXLAN的优点云计算出现后对网络要求得不到满足有如下三方面:虚拟机规模受网络设备表项规格的限制网络隔离能力有限虚拟机迁移范围受限VXLAN出现解决上述三点不足:VXLAN将管理员规划的同一区域内的VM发出的原始报文封装成新的UDP报文,并使用物理网络的IP和MAC地址作为外层头,这样报文对网络中的其他设备只表现为封装后的参数。VXLAN引入了类似VLAN ID的用户标识,称为VXLAN网络标识VNI(VXLAN Network Identifier),由24比特组成,支持多达16M的VXLAN段,有效得解决了云计算中海量租户隔离的问题。VXLAN将VM发出的原始报文进行封装后通过VXLAN隧道进行传输,隧道两端的VM不需感知传输网络的物理架构。(可以理解为在同一个二层网路下,对于MAC地址变更等不会有影响)VXLAN模型充分理解模式是理解VXLAN技术的核心VXLAN 技术将已有的三层物理网络作为 Underlay 网络,在其上构建出虚拟的二层网络,即 Overlay 网络。Overlay和Underlay可以理解为是一组概念,简单理解就是Underlay是实际的物理网络,而Overlay是逻辑网络。对于用户来说不感知物理网络的组网形式,只知道Overlay的逻辑网络环境。Overlay网络是有逻辑节点与逻辑链路组成。根据图中的内容理解图中组成VXLAN网络的基本元素。VM(Virtual Machine,虚拟机):在一台服务器上可以创建多台虚拟机,不同的虚拟机可以属于不同的 VXLAN。VTEP(VXLAN Tunnel End Point,VXLAN 隧道端点):VXLAN 的边缘设备。边缘设备是与核心设备相对的概念,指数据中心网络中与服务器直接相连的交换机设备。VTEP具体的设备形态暂时不需要考虑,我们只需要关系它具有哪些功能即可。VXLAN 隧道:两个 VTEP 之间的点到点逻辑隧道。隧道概念:隧道技术是一种封装技术,即一种网络协议将其他网络协议的数据报文封装在自己的报文中,然后在网络中传输。封装后的数据报文在网络中传输的路径,成为隧道。虚拟点对点连接。核心设备:IP核心网络中的设备。核心设备不参与VXLAN处理,仅需 要根据封装后报文的目的IP地址对报文进行三层转发通过图中可以看出核心设备并不做VXLAN的封装与解封装,所以核心设备只做了路由转发功能。VSI(Virtual Switch Instance,虚拟交换实例):VTEP 上为一个 VXLAN 提供二层交换服务的 虚拟交换实例。VSI在VXLAN网络中很重要的概念。VTEP的配置源头就来自VSIVXLAN ID 和VSI 是一对一的关系,所以每增加一个VXLAN ID的二层网络都要有唯一的VSI实例与之对应。虚拟交换机:VSI可以看成是能够实现交换机功能的软件程序,MAC地址学习、MAC地址老化、泛洪等。从图中可以看出每个VSI实例分别配置在了多个需要交互的VTEP上。AC(Attachment Circuit,接入电路)VTEP 连接本地站点的物理电路或虚拟电路。在 VTEP 上,与 VSI 关联的三层接口称为 AC三层接口能够配置IP地址,二层接口不能配置IP地址。接入电路可以理解为与VM与VTEP间连接的接口。通过模型理解VXLAN网络根据模型不难看出,物理网络虽然是跨了三层网络,但是VTEP之下的VM之间互相认为彼此是二层可达的,也就是说他们之间是通过二层MAC地址相互通信的。每个VXLAN ID构成了一个隔离的二层网络。因此可以认为图中VXLAN ID 10和VXLAN ID 20是相互隔离的。如果他们是二层MAC地址相互通信,那么必然涉及到MAC地址的学习功能,所以VSI需要实现MAC地址学习功能。相同的VXLAN ID 的VM之间都会维护一张MAC-IP的ARP信息表。这也是MAC地址学习的结果。思考问题:如果同一个VXLANID网络下的VM都要走VTEP之间的网络进行MAC地址学习,必然会带来网络流量带宽的占用,由于VTEP之间是三层网络。而且MAC学习是一个需要经常执行的操作。如何解决呢?ARP抑制机制(后边介绍到)VXLAN报文格式标记位:“I”位为 1 时,表示 VXLAN 头中的 VXLAN ID 有效;为 0,表示 VXLAN ID 无效。其他位保留未用,设置为 0。VXLAN ID:用来标识一个 VXLAN 网络,长度为 24 比特。VXLAN运行机制识别接收到的报文所属的 VXLAN,以便将报文的源 MAC 地址学习到 VXLAN 对应的 VSI,并在该 VSI 内转发该报文。对于从 VXLAN 隧道上接收到的 VXLAN 报文, VTEP 根据报文中携带的 VXLAN ID 判断该报文所属的 VXLAN。(找到对应的VSI)学习虚拟机的 MAC 地址。根据学习到的 MAC 地址表项转发报文VXLAN运行机制理解个人理解MAC地址学习包括两部分VSI需要记录AC接口与MAC地址的绑定关系(本地MAC地址学习)VSI需要记录tunnel与MAC地址的绑定关系(远端MAC地址学习)想像一下VSI是一个交换机,交换机有两个Interface接口一个连接本地站点的网络(Interface1),一个连接远端站点网络(Interface2)。其中本地站点即一个VM(MAC地址)与Interface1接口有个对应关系,记录MAC地址与Interface1的绑定,通过学习得来。(谁发送到这个接口数据,VSI将数据解出来查看MAC地址,那源MAC就对应这个接口啦)同样对于远端MAC地址:静态配置。动态学习:三层数据包进来的Interface有VXLAN ID,对应一个VSI,拆掉UDP信息,找到二层网络帧中的源MAC地址,此时MAC与入口的Interface2就建立了绑定关系。Interface2叫做隧道接口,因为是从VXLAN隧道对接的。VM 也需要通过ARP广播报文知道自己需要的IP地址所对应的MAC地址,否者不知道向哪里发送。ARP泛洪抑制ARP抑制简单立即就是为了方式VM发送的ARP广播报文在网络中频繁的发送,而采取的一种机制原理:就是在VM发送ARP广播之后,VSI先判断是否记录了这个MAC地址与IP地址的关系,如果记录了这个关系表,VSI会做ARP代答。即不会再网络中发送ARP报文,让对端VM回答ARP响应。只有在VSI中没有记录MAC地址与IP地址的关系时,才会发送ARP报文,然后双方的VSI再次进行MAC学习记录记录IP与MAC的关系。泛洪抑制的原理就是将泛洪后的MAC地址表项记录下来。因为Overlay上都是可以看做是一个二层网络,A、B网络会通过ARP进行MAC地址与IP地址的关系记录,此时,如果VTEP上记录了其他虚拟机的MAC的话,(记录其他虚拟机MAC地址信息的表叫做ARP泛洪抑制表项),就不会广播到整个三层网络减少核心网流量,代理应答这个MAC地址请求。图中7,8操作就是泛洪抑制后的结果,而之前的就是泛洪的过程。转发泛洪流量1.上文中提到的VSI将ARP报文在网络中转发的机制叫做转发泛洪流量。2.VTEP节点只会接受泛洪流量包,并且转发给本地站点,而不会转发给其他VTEP,目的为了防止网络报文的回环。 ...

April 20, 2019 · 1 min · jiezi

物联网高并发编程之P2P技术NAT详解

物联网高并发编程之P2P技术之NAT技术本时代由于 IPv6 的崛起建议各位看官先滑到文章最后看以下NAT现阶段的状况再决定要不要使用您宝贵的时间观看此片文章IPv4协议和NAT的由来今天,无数快乐的互联网用户在尽情享受Internet带来的乐趣。他们浏览新闻,搜索资料,下载软件,广交新朋,分享信息,甚至于足不出户获取一切日用所需。企业利用互联网发布信息,传递资料和订单,提供技术支持,完成日常办公。然而,Internet在给亿万用户带来便利的同时,自身却面临一个致命的问题:构建这个无所不能的Internet的基础IPv4协议已经不能再提供新的网络地址了。2011年2月3日中国农历新年, IANA对外宣布:IPv4地址空间最后5个地址块已经被分配给下属的5个地区委员会。2011年4月15日,亚太区委员会APNIC对外宣布,除了个别保留地址外,本区域所有的IPv4地址基本耗尽。一时之间,IPv4地址作为一种濒危资源身价陡增,各大网络公司出巨资收购剩余的空闲地址。其实,IPv4地址不足问题已不是新问题,早在20年以前,IPv4地址即将耗尽的问题就已经摆在Internet先驱们面前。这不禁让我们想去了解,是什么技术使这一危机延缓了尽20年。要找到问题的答案,让我们先来简略回顾一下IPv4协议。IPv4即网际网协议第4版——Internet Protocol Version 4的缩写。IPv4定义一个跨越异种网络互连的超级网,它为每个网际网的节点分配全球唯一IP地址。如果我们把Internet比作一个邮政系统,那么IP地址的作用就等同于包含城市、街区、门牌编号在内的完整地址。IPv4使用32bits整数表达一个地址,地址最大范围就是232 约为43亿。以IP创始时期可被联网的设备来看,这样的一个空间已经很大,很难被短时间用完。然而,事实远远超出人们的设想,计算机网络在此后的几十年里迅速壮大,网络终端数量呈爆炸性增长。更为糟糕的是,为了路由和管理方便,43亿的地址空间被按照不同前缀长度划分为A,B,C,D类地址网络和保留地址。其中,A类网络地址127段,每段包括主机地址约1678万个。B类网络地址16384段,每段包括65536个主机地址。IANA向超大型企业/组织分配A类网络地址,一次一段。向中型企业或教育机构分配B类网络地址,一次一段。这样一种分配策略使得IP地址浪费很严重,很多被分配出去的地址没有真实被利用,地址消耗很快。以至于二十世纪90年代初,网络专家们意识到,这样大手大脚下去,IPv4地址很快就要耗光了。于是,人们开始考虑IPv4的替代方案,同时采取一系列的措施来减缓IPv4地址的消耗。正是在这样一个背景之下,本期的主角闪亮登场,它就是网络地址转换——NAT。NAT是一项神奇的技术,说它神奇在于它的出现几乎使IPv4起死回生。在IPv4已经被认为行将结束历史使命之后近20年时间里,人们几乎忘了IPv4的地址空间即将耗尽这样一个事实——在新技术日新月异的时代,20年可算一段漫长的历史。更不用说,在NAT产生以后,网络终端的数量呈加速上升趋势,对IP地址的需求剧烈增加。此足见NAT技术之成功,影响之深远。说它神奇,更因为NAT给IP网络模型带来了深远影响,其身影遍布网络每个角落。根据一份最近的研究报告,70%的P2P用户位于NAT网关以内。因为P2P主要运行在终端用户的个人电脑之上,这个数字意味着大多数PC通过NAT网关连接到Internet。如果加上2G和3G方式联网的智能手机等移动终端,在NAT网关之后的用户远远超过这个比例。然而当我们求本溯源时却发现一个很奇怪的事实:NAT这一意义重大的技术,竟然没有公认的发明者。NAT第一个版本的RFC作者,只是整理归纳了已被广泛采用的技术。NAT的工作模型和特点NAT的概念模型NAT名字很准确,网络地址转换,就是替换IP报文头部的地址信息。NAT通常部署在一个组织的网络出口位置,通过将内部网络IP地址替换为出口的IP地址提供公网可达性和上层协议的连接能力。什么是内部网络IP地址?RFC1918规定了三个保留地址段落:10.0.0.0-10.255.255.255;172.16.0.0-172.31.255.255;192.168.0.0-192.168.255.255。这三个范围分别处于A,B,C类的地址段,不向特定的用户分配,被IANA作为私有地址保留。这些地址可以在任何组织或企业内部使用,和其他Internet地址的区别就是,仅能在内部使用,不能作为全球路由地址。这就是说,出了组织的管理范围这些地址就不再有意义,无论是作为源地址,还是目的地址。对于一个封闭的组织,如果其网络不连接到Internet,就可以使用这些地址而不用向IANA提出申请,而在内部的路由管理和报文传递方式与其他网络没有差异。对于有Internet访问需求而内部又使用私有地址的网络,就要在组织的出口位置部署NAT网关,在报文离开私网进入Internet时,将源IP替换为公网地址,通常是出口设备的接口地址。一个对外的访问请求在到达目标以后,表现为由本组织出口设备发起,因此被请求的服务端可将响应由Internet发回出口网关。出口网关再将目的地址替换为私网的源主机地址,发回内部。这样一次由私网主机向公网服务端的请求和响应就在通信两端均无感知的情况下完成了。依据这种模型,数量庞大的内网主机就不再需要公有IP地址了。NAT转换过程示意图实际过程远比这个复杂,NAT处理报文的几个关键特点:**网络被分为私网和公网两个部分,NAT网关设置在私网到公网的路由出口位置,双向流量必须都要经过NAT网关;网络访问只能先由私网侧发起,公网无法主动访问私网主机; NAT网关在两个访问方向上完成两次地址的转换或翻译,出方向做源信息替换,入方向做目的信息替换; NAT网关的存在对通信双方是保持透明的; NAT网关为了实现双向翻译的功能,需要维护一张关联表,把会话的信息保存下来。随着后面对NAT的深入描述,会发现这些特点是鲜明的,但又不是绝对的。其中第二个特点打破了IP协议架构中所有节点在通讯中的对等地位,这是NAT最大的弊端,为对等通讯带来了诸多问题,当然相应的克服手段也应运而生。事实上,第四点是NAT致力于达到的目标,但在很多情况下,NAT并没有做到,因为除了IP首部,上层通信协议经常在内部携带IP地址信息。这些我们稍后解释。一对一的NAT如果一个内部主机唯一占用一个公网IP,这种方式被称为一对一模型。此种方式下,转换上层协议就是不必要的,因为一个公网IP就能唯一对应一个内部主机。显然,这种方式对节约公网IP没有太大意义,主要是为了实现一些特殊的组网需求。比如用户希望隐藏内部主机的真实IP,或者实现两个IP地址重叠网络的通信。一对多的NATNAT最典型的应用场景就如同图片“NAT转换过程示意图”描述的,一个组织网络,在出口位置部署NAT网关,所有对公网的访问表现为一台主机。这就是所谓的一对多模型。这种方式下,出口设备只占用一个由Internet服务提供商分配的公网IP地址。面对私网内部数量庞大的主机,如果NAT只进行IP地址的简单替换,就会产生一个问题:当有多个内部主机去访问同一个服务器时,从返回的信息不足以区分响应应该转发到哪个内部主机。此时,需要NAT设备根据传输层信息或其他上层协议去区分不同的会话,并且可能要对上层协议的标识进行转换,比如TCP或UDP端口号。这样NAT网关就可以将不同的内部连接访问映射到同一公网IP的不同传输层端口,通过这种方式实现公网IP的复用和解复用。这种方式也被称为端口转换PAT、NAPT或IP伪装,但更多时候直接被称为NAT,因为它是最典型的一种应用模式。按照NAT端口映射方式分类在一对多模型中,按照端口转换的工作方式不同,又可以进行更进一步的划分。为描述方便,以下将IP和端口标记为(nAddr:nPort),其中n代表主机或NAT网关的不同角色。全锥形NAT其特点为:一旦内部主机端口对(iAddr:iPort)被NAT网关映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);任何一个外部主机发送到(eAddr:ePort)的报文将会被转换后发到(iAddr:iPort)。限制锥形NAT其特点为:一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有 (iAddr:iPort)向特定的外部主机hAddr发送过数据,主机hAddr从任意端口发送到(eAddr:ePort)的报文将会被转发到(iAddr:iPort)。端口限制锥形NAT其特点为:一旦内部主机端口对(iAddr:iPort)被映射到(eAddr:ePort),所有后续的(iAddr:iPort)报文都会被转换为(eAddr:ePort);只有(iAddr:iPort)向特定的外部主机端口对(hAddr:hPort)发送过数据,由 (hAddr:hPort)发送到(eAddr:ePort)的报文将会被转发到(iAddr:iPort)。对称型NAT其特点为:NAT网关会把内部主机“地址端口对”和外部主机“地址端口对”完全相同的报文看作一个连接,在网关上创建一个公网“地址端口对”映射进行转换,只有收到报文的外部主机从对应的端口对发送回应的报文,才能被转换。即使内部主机使用之前用过的地址端口对去连接不同外部主机(或端口)时,NAT网关也会建立新的映射关系。事实上,这些术语的引入是很多混淆的起源。现实中的很多NAT设备是将这些转换方式混合在一起工作的,而不单单使用一种,所以这些术语只适合描述一种工作方式,而不是一个设备。比如,很多NAT设备对内部发出的连接使用对称型NAT方式,而同时支持静态的端口映射,后者可以被看作是全锥型NAT方式。而有些情况下,NAT设备的一个公网地址和端口可以同时映射到内部几个服务器上以实现负载分担,比如一个对外提供WEB服务器的站点可能是有成百上千个服务器在提供HTTP服务,但是对外却表现为一个或少数几个IP地址。NAT的限制与解决方案IP端到端服务模型IP协议的一个重要贡献是把世界变得平等。在理论上,具有IP地址的每个站点在协议层面有相当的获取服务和提供服务的能力,不同的IP地址之间没有差异。人们熟知的服务器和客户机实际是在应用协议层上的角色区分,而在网络层和传输层没有差异。一个具有IP地址的主机既可以是客户机,也可以是服务器,大部分情况下,既是客户机,也是服务器。端到端对等看起来是很平常的事情,而意义并不寻常。但在以往的技术中,很多协议体系下的网络限定了终端的能力。正是IP的这个开放性,使得TCP/IP协议族可以提供丰富的功能,为应用实现提供了广阔平台。因为所有的IP主机都可以服务器的形式出现,所以通讯设计可以更加灵活。使用UNIX/LINUX的系统充分利用了这个特性,使得任何一个主机都可以建立自己的HTTP、SMTP、POP3、DNS、DHCP等服务。与此同时,很多应用也是把客户端和服务器的角色组合起来完成功能。例如在VoIP应用中,用户端向注册服务器登录自己的IP地址和端口信息过程中,主机是客户端;而在呼叫到达时,呼叫处理服务器向用户端发送呼叫请求时,用户端实际工作在服务器模式下。在语音媒体流信道建立过程后,通讯双向发送语音数据,发送端是客户模式,接收端是服务器模式。而在P2P的应用中,一个用户的主机既为下载的客户,同时也向其他客户提供数据,是一种C/S混合的模型。上层应用之所以能这样设计,是因为IP协议栈定义了这样的能力。试想一下,如果IP提供的能力不对等,那么每个通信会话都只能是单方向发起的,这会极大限制通信的能力。细心的读者会发现,前面介绍NAT的一个特性正是这样一种限制。没错,NAT最大的弊端正在于此——破坏了IP端到端通信的能力。NAT的弊端NAT在解决IPv4地址短缺问题上,并非没有副作用,其实存在很多问题。首先,NAT使IP会话的保持时效变短。因为一个会话建立后会在NAT设备上建立一个关联表,在会话静默的这段时间,NAT网关会进行老化操作。这是任何一个NAT网关必须做的事情,因为IP和端口资源有限,通信的需求无限,所以必须在会话结束后回收资源。通常TCP会话通过协商的方式主动关闭连接,NAT网关可以跟踪这些报文,但总是存在例外的情况,要依赖自己的定时器去回收资源。而基于UDP的通信协议很难确定何时通信结束,所以NAT网关主要依赖超时机制回收外部端口。通过定时器老化回收会带来一个问题,如果应用需要维持连接的时间大于NAT网关的设置,通信就会意外中断。因为网关回收相关转换表资源以后,新的数据到达时就找不到相关的转换信息,必须建立新的连接。当这个新数据是由公网侧向私网侧发送时,就会发生无法触发新连接建立,也不能通知到私网侧的主机去重建连接的情况。这时候通信就会中断,不能自动恢复。即使新数据是从私网侧发向公网侧,因为重建的会话表往往使用不同于之前的公网IP和端口地址,公网侧主机也无法对应到之前的通信上,导致用户可感知的连接中断。NAT网关要把回收空闲连接的时间设置到不发生持续的资源流失,又维持大部分连接不被意外中断,是一件比较有难度的事情。在NAT已经普及化的时代,很多应用协议的设计者已经考虑到了这种情况,所以一般会设置一个连接保活的机制,即在一段时间没有数据需要发送时,主动发送一个NAT能感知到而又没有实际数据的保活消息,这么做的主要目的就是重置NAT的会话定时器。其次,NAT在实现上将多个内部主机发出的连接复用到一个IP上,这就使依赖IP进行主机跟踪的机制都失效了。如网络管理中需要的基于网络流量分析的应用无法跟踪到终端用户与流量的具体行为的关系。基于用户行为的日志分析也变得困难,因为一个IP被很多用户共享,如果存在恶意的用户行为,很难定位到发起连接的那个主机。即便有一些机制提供了在NAT网关上进行连接跟踪的方法,但是把这种变换关系接续起来也困难重重。基于IP的用户授权不再可靠,因为拥有一个IP的不等于一个用户或主机。一个服务器也不能简单把同一IP的访问视作同一主机发起的,不能进行关联。有些服务器设置有连接限制,同一时刻只接纳来自一个IP的有限访问(有时是仅一个访问),这会造成不同用户之间的服务抢占和排队。有时服务器端这样做是出于DOS攻击防护的考虑,因为一个用户正常情况下不应该建立大量的连接请求,过度使用服务资源被理解为攻击行为。但是这在NAT存在时不能简单按照连接数判断。总之,因为NAT隐蔽了通信的一端,把简单的事情复杂化了。我们来深入理解NAT一下对IP端到端模型的破坏力。NAT通过修改IP首部的信息变换通信的地址。但是在这个转换过程中只能基于一个会话单位。当一个应用需要保持多个双向连接时,麻烦就很大。NAT不能理解多个会话之间的关联性,无法保证转换符合应用需要的规则。当NAT网关拥有多个公有IP地址时,一组关联会话可能被分配到不同的公网地址,这通常是服务器端无法接受的。更为严重的是,当公网侧的主机要主动向私网侧发送数据时,NAT网关没有转换这个连接需要的关联表,这个数据包无法到达私网侧的主机。这些反方向发送数据的连接总有应用协议的约定或在初始建立的会话中进行过协商。但是因为NAT工作在网络层和传输层,无法理解应用层协议的行为,对这些信息是无知的。NAT希望自己对通信双方是透明的,但是在这些情况下这是一种奢望。此外,NAT工作机制依赖于修改IP包头的信息,这会妨碍一些安全协议的工作。因为NAT篡改了IP地址、传输层端口号和校验和,这会导致认证协议彻底不能工作,因为认证目的就是要保证这些信息在传输过程中没有变化。对于一些隧道协议,NAT的存在也导致了额外的问题,因为隧道协议通常用外层地址标识隧道实体,穿过NAT的隧道会有IP复用关系,在另一端需要小心处理。ICMP是一种网络控制协议,它的工作原理也是在两个主机之间传递差错和控制消息,因为IP的对应关系被重新映射,ICMP也要进行复用和解复用处理,很多情况下因为ICMP报文载荷无法提供足够的信息,解复用会失败。IP分片机制是在信息源端或网络路径上,需要发送的IP报文尺寸大于路径实际能承载最大尺寸时,IP协议层会将一个报文分成多个片断发送,然后在接收端重组这些片断恢复原始报文。IP这样的分片机制会导致传输层的信息只包括在第一个分片中,NAT难以识别后续分片与关联表的对应关系,因此需要特殊处理。NAT穿越技术前面解释了NAT的弊端,为了解决IP端到端应用在NAT环境下遇到的问题,网络协议的设计者们创造了各种武器来进行应对。但遗憾的是,这里每一种方法都不完美,还需要在内部主机、应用程序或者NAT网关上增加额外的处理。应用层网关应用层网关(ALG)是解决NAT对应用层协议无感知的一个最常用方法,已经被NAT设备厂商广泛采用,成为NAT设备的一个必需功能。因为NAT不感知应用协议,所以有必要额外为每个应用协议定制协议分析功能,这样NAT网关就能理解并支持特定的协议。ALG与NAT形成互动关系,在一个NAT网关检测到新的连接请求时,需要判断是否为已知的应用类型,这通常是基于连接的传输层端口信息来识别的。在识别为已知应用时,再调用相应功能对报文的深层内容进行检查,当发现任何形式表达的IP地址和端口时,将会把这些信息同步转换,并且为这个新连接创建一个附加的转换表项。这样,当报文到达公网侧的目的主机时,应用层协议中携带的信息就是NAT网关提供的地址和端口。一旦公网侧主机开始发送数据或建立连接到此端口,NAT网关就可以根据关联表信息进行转换,再把数据转发到私网侧的主机。很多应用层协议实现不限于一个初始连接(通常为信令或控制通道)加一个数据连接,可能是一个初始连接对应很多后续的新连接。比较特别的协议,在一次协商中会产生一组相关连接,比如RTP/RTCP协议规定,一个RTP通道建立后占用连续的两个端口,一个服务于数据,另一个服务于控制消息。此时,就需要ALG分配连续的端口为应用服务。ALG能成功解决大部分协议的NAT穿越需求,但是这个方法也有很大的限制。因为应用协议的数量非常多而且在不断发展变化之中,添加到设备中的ALG功能都是为特定协议的特定规范版本而开发的,协议的创新和演进要求NAT设备制造商必须跟踪这些协议的最近标准,同时兼容旧标准。尽管有如Linux这种开放平台允许动态加载新的ALG特性,但是管理成本仍然很高,网络维护人员也不能随时了解用户都需要什么应用。因此为每个应用协议开发ALG代码并跟踪最新标准是不可行的,ALG只能解决用户最常用的需求。此外,出于安全性需要,有些应用类型报文从源端发出就已经加密,这种报文在网络中间无法进行分析,所以ALG无能为力。探针技术STUN和TURN所谓探针技术,是通过在所有参与通信的实体上安装探测插件,以检测网络中是否存在NAT网关,并对不同NAT模型实施不同穿越方法的一种技术。STUN服务器被部署在公网上,用于接收来自通信实体的探测请求,服务器会记录收到请求的报文地址和端口,并填写到回送的响应报文中。客户端根据接收到的响应消息中记录的地址和端口与本地选择的地址和端口进行比较,就能识别出是否存在NAT网关。如果存在NAT网关,客户端会使用之前的地址和端口向服务器的另外一个IP发起请求,重复前面的探测。然后再比较两次响应返回的结果判断出NAT工作的模式。由前述的一对多转换模型得知,除对称型NAT以外的模型,NAT网关对内部主机地址端口的映射都是相对固定的,所以比较容易实现NAT穿越。而对称型NAT为每个连接提供一个映射,使得转换后的公网地址和端口对不可预测。此时TURN可以与STUN绑定提供穿越NAT的服务,即在公网服务器上提供一个“地址端口对”,所有此“地址端口对”接收到的数据会经由探测建立的连接转发到内网主机上。TURN分配的这个映射“地址端口对”会通过STUN响应发给内部主机,后者将此信息放入建立连接的信令中通知通信的对端。这种探针技术是一种通用方法,不用在NAT设备上为每种应用协议开发功能,相对于ALG方式有一定普遍性。但是TURN中继服务会成为通信瓶颈。而且在客户端中增加探针功能要求每个应用都要增加代码才能支持。中间件技术这也是一种通过开发通用方法解决NAT穿越问题的努力。与前者不同之处是,NAT网关是这一解决方案的参与者。与ALG的不同在于,客户端会参与网关公网映射信息的维护,此时NAT网关只要理解客户端的请求并按照要求去分配转换表,不需要自己去分析客户端的应用层数据。其中UPnP就是这样一种方法。UPnP中文全称为通用即插即用,是一个通用的网络终端与网关的通信协议,具备信息发布和管理控制的能力。其中,网关映射请求可以为客户动态添加映射表项。此时,NAT不再需要理解应用层携带的信息,只转换IP地址和端口信息。而客户端通过控制消息或信令发到公网侧的信息中,直接携带公网映射的IP地址和端口,接收端可以按照此信息建立数据连接。NAT网关在收到数据或连接请求时,按照UPnP建立的表项只转换地址和端口信息,不关心内容,再将数据转发到内网。这种方案需要网关、内部主机和应用程序都支持UPnP技术,且组网允许内部主机和NAT网关之间可以直接交换UPnP信令才能实施。中继代理技术准确说它不是NAT穿越技术,而是NAT旁路技术。简单说,就是在NAT网关所在的位置旁边放置一个应用服务器,这个服务器在内部网络和外部公网分别有自己的网络连接。客户端特定的应用产生网络请求时,将定向发送到应用代理服务器。应用代理服务器根据代理协议解析客户端的请求,再从服务器的公网侧发起一个新的请求,把客户端请求的内容中继到外部网络上,返回的相应反方向中继。这项技术和ALG有很大的相似性,它要求为每个应用类型部署中继代理业务,中间服务器要理解这些请求。特定协议的自穿越技术在所有方法中最复杂也最可靠的就是自己解决自己的问题。比如IKE和IPsec技术,在设计时就考虑了到如何穿越NAT的问题。因为这个协议是一个自加密的协议并且具有报文防修改的鉴别能力,其他通用方法爱莫能助。因为实际应用的NAT网关基本都是NAPT方式,所有通过传输层协议承载的报文可以顺利通过NAT。IKE和IPsec采用的方案就是用UDP在报文外面再加一层封装,而内部的报文就不再受到影响。IKE中还专门增加了NAT网关是否存在的检查能力以及绕开NAT网关检测IKE协议的方法。NAT的应用和实现NAT的应用NAT在当代Internet中被广泛采用,小至家庭网关,大到企业广域网出口甚至运营商业务网络出口。其实NAT在用户身边随处可见,一般家庭宽带接入的ADSL Modem和SOHO路由器都内置了NAT功能,WindowsXP支持网络连接共享,一个用户连接到公网可能会经过多层NAT而对此一无所知。很多企业也为节约IP费用采用NAT接入Internet,但是相比家庭用户有更复杂的需求。NAT多实例应用在VPN网络中,多实例路由意味着一个物理拓扑上承载多个逻辑拓扑,网络终端被分配到相互隔离的逻辑拓扑中,彼此之间没有路由的通路。但在访问Internet或者一些关键服务器资源时,被隔离的网络之间又存在共享资源的需求。NAT的多实例实现就是跨越这种逻辑拓扑的方法,把一个空间的网络地址映射到另一个空间。NAT的高可靠性组网提高网络可靠性是一个广泛的需求,NAT作为私网到公网的关键路径自然也需要高可靠性。当一个设备提供多个公网接口时,在多接口上部署NAT可以提供更高带宽和多ISP就近访问的能力。但是,当部署多个出口时,访问的流量可能会从不匹配的接口返回,这就要求NAT方案有良好的路由规划和部署合适的策略保证这种流量能够正确处理。在多个物理设备承担NAT功能时,不同设备之间的信息备份和流量分担也是一个组网难题。同时转换源和目的地址的应用前面我们介绍的所有NAT应用中,由内网向外网访问过程中,都是将源地址进行转换而目的地址保持不变,报文反方向进入时则处理目的地址。但有一些特殊应用需要在由内向外的IP通路上,替换目的IP地址。通常,这种应用会同时替换源地址和目的地址,在经过NAT网关以后完成两次地址转换。当两个均规划使用私属IP地址范围的网络进行合并时,终端用户都不想调整自己的IP地址方案,又希望开放一些网络资源给彼此访问。这时就可以通过NAT的两次地址转换来解决路由和地址规划无法解决的问题。NAT的设备实现NAT作为一个IP层业务特性,在产品实现中与防火墙、会话管理等特性有紧密联系,这是因为NAT判断一个进入设备的报文是否需要NAT处理,判断报文是否为一个新的连接,都需要通过匹配访问控制列表规则和查询会话关联表进行判断。为了满足不同应用场景的NAT需求, NAT的管理界面可提供用户多种配置策略。按照NAT的具体工作方式,又可以做如下分类。静态一对一地址映射这种工作方式下,NAT把一个私网地址和一个公网地址做静态关联,在从内而外的方向,将源IP匹配的私网IP替换为公网IP,反方向则将目的IP匹配公网IP的报文替换为私网IP。网络层以上的部分不进行替换处理,只修正校验和。静态多对多地址映射这种方式与上一种类似,只是把一段私网地址映射到一段公网地址。工作机制与前述的方式没有差别,只是简化配置工作量。动态端口映射这是最基本的工作方式,即前面多次介绍的将一段内网地址动态翻译为一个或多个公网IP,同时对传输层端口或其他上层协议信息进行转换,以实现IP复用。对由内而外的报文,替换源地址和端口,反向报文替换目的地址和端口。仅以连接公网的接口IP作为NAT转换的公网地址时,这种配置最简化,又被称为EasyIP。当以一段公网IP地址作为NAT转换地址时,需要配置一个地址池,NAT会自动在地址池中选择使用公网IP。动态地址映射(no-pat)这是介于静态多对多地址映射和动态端口映射方式之间的一种工作机制。当有一个私网向公网侧访问到达NAT网关时,NAT网关会检查这个私网IP是否已经有关联的公网IP映射。如果已经存在,则按照转换表直接替换IP,不修改上层协议。如果不存在关联表项,则在空闲的公网IP池中占用一个IP,并写入关联表中,以后按照这个关联关系进行地址转换。当这个私网主机发起的所有对外访问均关闭或超时后,回收公网IP。这种方式可以理解为一组内网主机抢占式地共享一个公网IP地址池。当公网IP地址池用完以后,新连接将无法建立。静态端口映射通过静态配置,把一个固定的私网IP地址和端口关联到一个公网地址和端口上。这种方式等同于前面介绍过的全锥模式,但是不需要内网主机首先发出报文。这种方式适用于在NAT网关上把一个知名服务(如HTTP)映射到一个内部主机上,也称为port forwarding。应用层网关(ALG)在所有NAT产品实现中,ALG是一个必需的功能组件。但在不同实现中,有些产品可以动态加载不同的ALG模块,有些产品可以提供ALG开关控制,有些则不提供任何用户接口。ALG解析上层应用协议的内容,并且根据需要修改IP和端口相关信息,创建和维护附加的关联表项。NAT转换关联表无论哪一种NAT工作方式,都要用到地址转换关联表,在不同产品的实现中,这个关联表的存储结构和在IP转发中调用的方式有很大不同。关联表中会记录源IP、目的IP、连接协议类型、传输层源端口、目的端口,以及转换后的源IP、源端口,目的IP、目的端口信息,这里的源和目的都是对应于从内网到外网的访问方向。依据NAT具体工作方式,这些信息可能全部填充,也可能部分填充。例如只按照IP做静态映射的方式,就不需要填入任何端口相关信息;对于静态端口映射,则只填入源相关的内容,而目的端的信息为空。后IPv4时代的NATNAT是为延缓IPv4地址耗尽而推出的技术。毫无疑问,它已经出色完成了自己的历史使命,IPv4比预期走得更远。作为继任者的IPv6吸取了IPv4的教训,被赋予充足地址空间的同时在各个方面做了优化——安全、高效、简洁。但是IPv6无法平滑地取代IPv4,导致IP升级步伐缓慢。尽管网络协议的分层设计很清晰,大量应用层协议和互联网软件中仍内嵌了IPv4地址的处理,要Internet全网升级到IPv6,必须先完成应用的改造。因为NAT和它的穿越技术结合能够满足大部分用户的需求,所以IPv6时代被不断推迟。随着IPv4地址的濒临耗尽,再经济的模式也无以为继,IPv4必须退出历史舞台。人们自然会认为,NAT作为IPv4的超级补丁技术使命已经完结。实际情况是,IPv4向IPv6过渡的阶段,NAT仍然是一项必不可少的技术手段。因为Internet无法在一日之内完成全网升级,必然是局部升级,逐渐替换。在两套协议并存的时期,用户和服务资源分布在不同网络之间,跨网访问的需求必须得到满足。这正是NAT所擅长的领域,地址替换,因此NAT-PT应运而生。由于IPv4和IPv6之间的差异,NAT要做的事比以往更复杂,有更多的限制和细节。此外,IETF也在制定纯IPv6网络使用的NAT规范。虽然人们还看不到这种应用的强烈需求,但是NAT仍有其独特的作用,比如隐藏内部网络的地址,实现重叠地址网络的合并等。毫不夸张地说,正是有了NAT,以IPv4为基础的Internet才能容纳数十亿的用户终端,成就今日之辉煌。IPv4已至日暮西山,IPv6的黎明尚未来临,Internet比任何时刻都更依赖NAT这项过渡技术。NAT的历史再次证明,翻天覆地的划时代进步不一定有市场,抱残守缺的修修补补未必不会成功。在世代更替之时让我们走近NAT,领略IP领域更多细微但不高深的知识,理解NAT就是理解变换万千的应用世界。

March 17, 2019 · 1 min · jiezi

我在Paris-Saclay举行的ONAP和OPNFV活动中所学到了什么

作者:Linux基金会网络与协调运营副总裁Phil RobbONAP和OPNFV项目于2019年早些时候,在法国的诺基亚Paris-Saclay设施举办了一个开发活动。来自这些社区的200多名开发者聚集在一起,讨论他们的下一个版本,计划更长期的策略重点,并且有史以来第一次共同探讨了两个团队之间的进一步合作。与往常一样,通过参与这些讨论和计划会议,从这些社区中每个人都散发著对卓越的热情让我充满活力。此活动在四天内分别举办了约150场会议,以及由诺基亚主办方设立的OPNFV Plugfest和2场演示。我要感谢诺基亚主办此次活动。他们一直是这些社区中令人难以置信的支持者,也是Linux Foundation Networking(LFN)基金的杰出白金会员。现在可以获得完整的报告,但我想分享一篇快速的博客文章,以捕捉我个人在一周内感兴趣的内容。会话幻灯片和录音将在LFN Wiki页面发布。LFN最终用户咨询小组我要提到的第一件事是我在本周开始时(重新)启动了LFN最终用户咨询小组(EUAG),我在电子邮件和活动上都看到人们对这的兴趣。我们计划在1月底举行第一次会议,如果你是LFN内任何项目的最终用户,我强烈建议你填写会员申请表并参加。EUAG既是向技术社区提供反馈的好方法,也是向同行学习如何最好地利用LFN项目发布的当前功能的好方法。我期待今年一个非常活跃的EUAG,特别是根据我在活动中听到的内容中的ONAP和OPNFV工作流程。OPNFV认证计划(OVP)整个2018年,Dovetail-OVP项目在OPNFV内完成的工作扩展到包括VNF验证和NFV基础设施。VNF验证工作的自然受益人和合作者是ONAP项目,特别是VNF要求项目和VNF SDK项目。这些团体在过去的几个月里一直在合作,这次活动使他们有机会在一周内多次坐在一起,并向更广泛的OPNFV和ONAP社区解释他们的目标以及其他人如何参与。如果你想了解更多信息,或有兴趣帮助确定在ONAP环境中运行VNF的基本要求,请按照上述链接之一获取更多信息。利用OPNFV和ONAP的测试工具和基础设施该活动有几个会议讨论了ONAP如何利用OPNFV小组多年开发的测试工具和系统测试配置和部署。此外,Orange的社区成员提供了有关他们的OpenLab和工具的更多详细信息,他们已经创建了系统地分层和测试ONAP下的不同云和NFVI组件,然后安装和测试ONAP环境,然后最终分层他们想要的VNF在特定的环境中测试。它们还具有不同“口味”的实现,包括Core、Small、Medium和Full,允许测试团队仅部署特定VNF/Environment测试所需的部分ONAP。Orange最近开源了这些工具,并将它们在Github上提供,直到在LFN项目中为他们找到一个家。在这些会议期间,我对ONAP的成对集成和系统测试需求有一个顿悟。通常,对于提供一个或相对较小耦合的可执行文件集的开源项目,集成测试相对简单,可以站起来交互组件并测试新的或修改过的交互。最终目标是在发行版上执行集成测试的项目,即具有数百甚至数千个组件的大型复杂系统,所有这些都在不同的发布计划中花费了大量精力来构建工具以纠正一致,可重复的部署和配置这样的系统使他们能够成功地对它们进行测试,以产生一致和有意义的结果。开源生态系统中最常见的发行版是Linux操作系统和它附带的数千个程序/软件包,如Debian、Red Hat或Ubuntu发行版。然而,OPNFV构建工具来部署、配置和测试能够运行NFV工作负载的开源分发。它实际上是典型Linux发行版的超集。顿悟对我来说是因为认识到完整的ONAP实施所带来的重大复杂性。虽然该项目创建了自己的可执行文件集,但它还依赖于数千个其他开源组件,包括OpenStack、OpenDaylight、Ceph和Hadoop(所有这些组件在其自身上都很重要)。这种复杂性的结果是难以生成、部署和配置允许可靠的成对集成测试的环境,这反过来又减慢了系统测试的速度。ONAP将通过与OPNFV测试项目以及Orange的团队及其最新工具的整合和合作而受益匪浅。这个对话在巴黎认真开始,我很高兴看到它从那里开始。ONAP与其他编排器的互操作性一些ONAP社区成员提供了一个会议,最初旨在探索与Open Source Mano(OSM)项目的潜在互操作性机会。随着讨论的演变,我们将重点放在ONAP需要做些什么来支持其他一般的编排器。在过去的18个月里,我从运营商那里听说,他们希望在网络的不同部分与ONAP一起探讨各种部署方案,其中包括遗留组件,其中一些是现有的编排器。巴黎的讨论,结束于那些在房间里感觉好像在NFV-SDK项目中,添加将ETSI NFV-ISG定义的SOL-006 YANG模型,转换为SOL-001 TOSCA模型的能力,将允许在ETSI NFV中,选择那些不同路径的编排器之间的通用互操作性-ISG规格集。此外,为了以东西方的方式与其他编排器进行适当的互动,会议室内的小组认为继续支持SOL-005是一项重要的工作。本次讨论的参与者采取行动向ONAP技术指导委员会(TSC)提出这些建议,供社群进一步考虑。探索ONAP与其他编排器之间更深层次的互动也是一种可能性。如果社区有兴趣从事此类工作,我鼓励有兴趣的人与TSC联系进一步讨论。ONAP小组委员会会议在ONS前几天举行下一次ONAP社区成员有机会进行面对面会议,将在加利福尼亚州圣何塞举行的开源网络峰会(ONS)之前举行。我的目标是那周的周一和周二,4月1日和2日,但计划尚未最终确定。会议将仅限于TSC和TSC小组委员会的讨论,以便为即将于5月发布Dublin版ONAP后即将开始的El Alto开发周期做准备。在巴黎期间,我们有机会计划ONAP和ETSI工作组之间的潜在联合会议,该工作组主要关注零接触网络和服务管理(ZSM)。ONAP内部的一些社区成员也在ZSM中工作,这两个小组目前似乎适合会面,分享他们的工作和计划,并探讨合作的方式。对此的计划仍在不断发展,但希望在ONS的一周内有一个3或4小时的研讨会,以便进行此类介绍。总而言之,我们在法国度过了愉快的一周,ONAP和OPNFV在2019年将会有一个非常好的合作年。有关我们学到的知识的详细信息,请参阅完整报告。希望四月份在ONS见到你!KubeCon + CloudNativeCon和Open Source Summit大会日期:会议日程通告日期:2019 年 4 月 10 日会议活动举办日期:2019 年 6 月 24 至 26 日KubeCon + CloudNativeCon和Open Source Summit赞助方案KubeCon + CloudNativeCon和Open Source Summit多元化奖学金现正接受申请KubeCon + CloudNativeCon和Open Source Summit即将首次合体落地中国KubeCon + CloudNativeCon和Open Source Summit购票窗口,立即购票!CNCF邀请你加入最终用户社区

March 11, 2019 · 1 min · jiezi

LF Networking and Orchestration白皮书 - 协调2.0:开源和标准如何促进整个IT的协作

随着跨越电信、电缆、企业、云和研究界的网络运营商重新定义网络架构,网络行业正处于一个重要的转折点。广泛采用的新技术需要数年时间才能成功,并且需要在生产网络技术的人和使用网络技术的人之间进行密切合作。传统上,标准制定组织(standards development organizations,SDO)在提供讨论和论坛,以及系统地标准化和验证新技术的完善流程方面发挥了关键作用。在软件驱动的世界中,在没有更多迭代方法的情况下,标准化复杂参考架构和软件平台是不可行的。因此,行业越来越多地转向开源社区,以获得实施专业知识和反馈。本白皮书概述了关键概念,并邀请SDO、开源项目和行业团体之间进行前所未有的合作。他们每个都在建立可永续生态系统中发挥着至关重要的作用,而生态系统是成功的关键。加入我们开创协作与融合的新纪元,重塑网络的未来。点击下载白皮书。KubeCon + CloudNativeCon和Open Source Summit大会日期:会议日程通告日期:2019 年 4 月 10 日会议活动举办日期:2019 年 6 月 24 至 26 日KubeCon + CloudNativeCon和Open Source Summit赞助方案KubeCon + CloudNativeCon和Open Source Summit多元化奖学金现正接受申请KubeCon + CloudNativeCon和Open Source Summit即将首次合体落地中国KubeCon + CloudNativeCon和Open Source Summit购票窗口,立即购票!

March 4, 2019 · 1 min · jiezi

电信业已走向开源

LF Networking通过创建一个伞形项目,成为电信行业的催化剂,各种参与者可以通过该项目贡献,并丰富所涉及的技术。电信业是第四次工业革命的核心。无论是连接的物联网设备,还是移动娱乐,现代经济都在互联网上运行。但是,网络的支柱一直在传统技术上运行。一些电信公司已有数百年的历史,它们拥有庞大的基础设施,需要进行现代化改造。好消息是,这个行业已经处于新兴技术的前沿。AT&T、Verizon、中国移动、DTK等公司已采用开源技术,以便更快地进入未来。LF Networking是这次转型的核心。“2018年是非常棒的一年。”Linux基金会Networking总经理Arpit Joshipura在去年秋天在温哥华举行的开源峰会上发言。“我们已经看到一家拥有140年历史的电信行业,从专有和传统技术转向使用LF Networking的开源技术。”现在LF Networking拥有超过100名成员,占这些电信运营商全球用户的约70%。这些成员积极参与LF Networking的软件开发。他们在现有项目上合作,将自己的内部代码贡献给基金会,并将其作为开源发布。例如,AT&T将自己的虚拟网络以ONAP项目贡献给了Linux基金会。该项目现在被其他公司用于生产,AT&T作为回报,受益于竞争对手为改进代码库所做的工作。“在开源社区中,已经创造了价值超过5亿美元的软件创新。”Joshipura说。“我们现在可以有把握地说,电信行业将使用基于Linux Foundation的开源来构建他们的下一代网络。电信转型对于电信行业的这种转变而言,令人难以置信的是,与开发者推动变革的其他行业不同,这里的最高领导层一直主张改变。LF Networking成为一个催化剂,通过创建一个伞形项目来帮助该行业。在该项目下,各种参与者可以收集、贡献和丰富所涉及的技术。LF Networking目前的主要焦点是在生产环境中看到越来越多的这些技术。“但我们的下一个目标是了解网络如何实现我们所谓的跨项目协作、跨行业协作、跨社群协作。区块链如何影响电信公司,电信公司如何能够与Kubernetes一起使用云计算等等。”Joshipura说。网络社区最有前途的领域之一是边缘计算,正如最近创建的新LF Edge伞式项目所示。这个领域有很多创新 - 5G、自动驾驶等等。“我们的重点是弄清楚这些项目是如何结合在一起并进行协作的,这样我们的最终用户成员才能获得更多价值。”他说。Linux Foundation拥有广泛的项目,其中许多项目都是单独构建代码。Joshipura希望这些项目能够密切合作。“我们有VNF(虚拟网络功能)的概念。我们如何让他们成为云原生的?我们创建了一个名为CNF(云原生网络功能)的项目,但我们需要与ONAP社区、网络社区和Kubernetes社区合作,以解决网络社区面临的一些问题。”他说。凭借目前的发展势头和社区支持,LF Networking有望引领潮流。KubeCon + CloudNativeCon和Open Source Summit大会日期:会议日程通告日期:2019 年 4 月 10 日会议活动举办日期:2019 年 6 月 24 至 26 日KubeCon + CloudNativeCon和Open Source Summit赞助方案KubeCon + CloudNativeCon和Open Source Summit多元化奖学金现正接受申请KubeCon + CloudNativeCon和Open Source Summit即将首次合体落地中国KubeCon + CloudNativeCon和Open Source Summit购票窗口,立即购票!

March 4, 2019 · 1 min · jiezi

CNCF推出云原生网络功能(CNF)Testbed

开源计划验证了在Kubernetes上运行ONAP网络功能对电信运营商的好处巴塞罗那,2019年2月25日 - 移动世界大会 - 支持Kubernetes®和Prometheus™等开源技术的的CNCF®(云原生计算基金会®)今天宣布与LF Networking(LFN)合作的开源云原生网络功能(CNF)Testbed。在巴塞罗那举行的移动世界大会上,CNCF正在演示相同的网络代码,在OpenStack上以虚拟网络功能(VNF)方式运行,以及在Kubernetes上以CNF方式运行,通过避免虚拟化开销来展示性能改进。“CNF正在成为未来的网络架构,其原因与容器和Kubernetes成为企业计算的标准平台的原因相同。”CNCF执行总监Dan Kohn说。“我们很高兴继续与LF Networking合作,为电信公司及其供应商提供一种在VNF和CNF之间进行可复制比较的方法。”CNF Testbed使组织能够可靠地测试ONAP或其自己的网络代码的网络功能,以VNF和CNF的方式,在相同底层硬件上比较运行在Kubernetes和OpenStack之间的性能和容错性。随着电信架构从VNF演变为CNF,其优势包括通过改进的打包节省成本,提高开发速度,以及单个CNF、机器甚至数据中心的故障恢复能力。ONAP作为LF Networking的一部分,为实时、政策驱动的物理和虚拟网络功能的编排和自动化提供了全面的平台。在去年宣布了ONAP现在是cncf.ci项目涵盖的一部分,CNCF运行该项目以在裸机上运行的K8集成、测试和部署CNCF和LF项目。CNF Testbed使用ONAP虚拟客户端设备(vCPE)用例中的几个开源VNF,并将代码重新打包为CNF容器。“很高兴看到ONAP和Kubernetes这两个增长最快的Linux基金会项目的协作,作为支持下一代架构的网络和云平台。”Linux基金会网络、边缘和物联网总经理Arpit Joshipura表示。“我们很高兴能够协助CNF Testbed展示行业从VNF转向CNF的道路。”CNF Testbed利用社区基础设施实验室(Community Infrastructure Lab),该实验室利用裸机托管公司Packet慷慨提供的信用额度。Testbed继续关注持续集成(CI)和可复制性,这些都是Kubernetes发展的标志。Kubernetes项目每个工作日运行超过10,000个CI工作,这是通过去年从Google向CNCF捐赠的900万美元谷歌云平台信用额度来实现。不需要信任CNF Testbed的初始结果,任何人都可以使用开源CNF Testbed存储库的副本和用于访问Packet的API密钥来复制结果。有兴趣了解更多关于CNF的组织,可以参与每月两次的BoF会议。详细信息在CNF Testbed仓库可以找到。KubeCon + CloudNativeCon和Open Source Summit大会日期:会议日程通告日期:2019 年 4 月 10 日会议活动举办日期:2019 年 6 月 24 至 26 日KubeCon + CloudNativeCon和Open Source Summit赞助方案KubeCon + CloudNativeCon和Open Source Summit多元化奖学金现正接受申请KubeCon + CloudNativeCon和Open Source Summit即将首次合体落地中国

February 26, 2019 · 1 min · jiezi

VRRP虚IP漂移

简介VRRP 是 Virtual Router Redundancy Protocol 的简称,即 虚拟路由冗余协议 。原文地址:https://linux-network-programming.readthedocs.io QQ交流群:Linux网络编程,群号:183196643欢迎关注我们的公众号:小菜学编程 (coding-fan)VRRP 最早被设计来解决网关的高可用问题:我们知道,计算机进行网络通讯时,需要网关来传输网络报文。 每台机器只能配置一个网关地址,这时网关的可靠性就非常重要了。 如果网关不幸故障了,那么使用该网关的所有机器都将受影响——断网了!解决网关单点问题的思路非常直观——部署一个备用网关,在主网关故障时切换过去。然而,由于机器只能配置一个网关地址,因此每次切换网关都需要修改该配置。 这个解决方案没能做到自动化,并不优雅。这时, VRRP 应运而生!接下来,以一个简单的例子介绍 VRRP 是如何工作的:事情是这样的。这个网络部署了两台 路由 进行互备,本网络内其他机器以这两台路由为网关进行网络通讯。 两台路由的 IP 地址分别是: 192.168.1.1 以及 192.168.1.2 。 但路由并不直接通过这些地址提供转发服务,而是使用一个 虚拟地址 192.168.1.253 。 其他计算机,如 192.168.1.3 将网关地址配置为 192.168.1.253 。通过 VRRP ,两台路由互相进行 健康检查 。 当两台路由都是健康的情况下,只有主路由对外提供虚拟地址的 ARP 响应。 这时,发往虚拟地址 192.168.1.253 的流量都由主路由处理。当主路由故障时,备用路由将检测到。 这时,备用路由开始通过 ARP 协议对外通告:虚拟地址 192.168.1.253 对应的 MAC 地址是我, 被我接管了!接下来,发往虚拟地址 192.168.1.253 的流量就开始由备用路由处理了。 这时,虚拟地址 192.168.1.253 看上去就像是 漂移 到备用路由上一样。 换句话讲,网关成功进行切换,而且无需修改其他机器的网关配置!主路由恢复后,将通过类似的手段,重新拿回流量的处理权。 这部分将不再赘述。完整流程如下:两台路由互相进行健康检查;主路由对外响应虚拟地址的 ARP 请求,通告其 MAC 地址;虚拟地址网络流量被主路由处理;备用路由发现主路由故障,开始响应虚拟地址的 ARP 请求,通告其 MAC 地址;虚拟地址网络流量被备用路由处理;主路由恢复,重新响应 ARP 请求,夺回流量;备用路由发现主路由恢复,停止响应 ARP 请求,释放流量处理权;总结起来, VRRP 主要做两件事情:通过 ARP 响应 MAC 地址实现虚 IP 漂移;通过健康检查决定什么时候进行虚 IP 漂移;应用场景本质上, VRRP 是用来实现高可用的,与网关无关。我们可以将其应用于一些网络服务的高可用,如 Web 服务: 服务高可用方案有很多, VRRP 特别适用于以下场景:服务对外只能呈现为单个 IP ;同一时刻只允许一个实例对外服务;此外, VRRP 也可用于实现负载均衡设施的高可用。 应用的高可用通过负载均衡设施解决,那么负载均衡设施如何实现高可用呢? 答案是—— VRRP !下面是一个非常典型的例子:局限性由于 VRRP 依赖 ARP 实现 IP 漂移,因此相关机器必须在同个网络内, 不能跨网段 。订阅更新,获取更多学习资料,请关注我们的 微信公众号 : ...

February 22, 2019 · 1 min · jiezi

tcp没用吗?为什么MOBA、“吃鸡”游戏不推荐用tcp协议

本文由云+社区发表作者:腾讯云游戏行业资深架构师 余国良MOBA类和“吃鸡”游戏为什么对网络延迟要求高?我们知道,不同类型的游戏因为玩法、竞技程度不一样,采用的同步算法不一样,对网络延迟的要求也不一样。例如,MOBA类游戏多使用帧同步为主要同步算法,竞技性也较高,无论从流畅性,还是从公平性要求来说,对响应延迟的要求都最高,根据业内经验,当客户端与服务器的网络延迟超过150ms时,会开始出现卡顿,当延迟超过250ms时,会对玩家操作造成较大影响,游戏无法公平进行。类似地,“吃鸡”游戏(如《绝地求生》)玩法对玩家坐标、动作的同步要求极高,延迟稍大导致的数据不一致对体验都会造成较大影响,其实时性要求接近MOBA类游戏。而对于传统mmorpg来说,多采用状态同步算法,以属性养成和装备获取为关注点,也有一定竞技性,出于对游戏流畅性的要求,对延迟也有一定要求,同步算法的优化程度不一样,这一要求也不一样,一般情况下为保证游戏正常进行,需要响应延迟保持在300ms以下。相比之下,对于炉石传说、斗地主、梦幻西游等回合制游戏来说,同时只有一个玩家在操作双方数据,无数据竞争,且时间粒度较粗,甚至可通过特效掩盖延迟,因此对网络延迟的要求不高,即便延迟达到500ms~1000ms,游戏也能正常进行。这里,我们不对同步算法做进一步说明,重点说一下协议的问题。传输层协议和延迟不同传输层协议在可靠性、流量控制等方面都有差别,而这些技术细节会对延迟造成影响。tcp追求的是完全可靠性和顺序性,丢包后会持续重传直至该包被确认,否则后续包也不会被上层接收,且重传采用指数避让策略,决定重传时间间隔的RTO(retransmission timeout)不可控制,linux内核实现中最低值为200ms,这样的机制会导致丢包率短暂升高的情况下应用层消息响应延迟急剧提高,并不适合实时性高、网络环境复杂的游戏。加速方案基于udp定制传输层协议,引入顺序性和适当程度或者可调节程度的可靠性,修改流控算法。适当放弃重传,如:设置最大重传次数,即使重传失败,也不需要重新建立连接。比较知名的tcp加速开源方案有:quic、enet、kcp、udt。其中,quic是源自google的tcp替代方案,其主要目的是为了整合TCP协议的可靠性和udp协议的速度和效率,其主要特性包括:避免前序包阻塞、减少数据包、向前纠错、会话重启和并行下载等,然而QUIC对标的是TCP+TLS+SPDY,相比其他方案更重,目前国内用于网络游戏较少。kcp的作者是国内优秀开发者,社区也发展良好,kcp的作者和社区开发者对enet、kcp、udt做了性能测试,详情可参见:https://github.com/skywind300…, 从测试情况可以看到,kcp表现不错,其次是enet,表现最差的是udt。不过,这里也提出一个问题,原始enet保留了tcp重传的指数避让特性,每次重传间隔还是乘以2,默认rto也较高,这可能是测试中enet表现不如kcp的主要原因,如果对enet代码稍作调整,结果又当如何?这里,我们先排除传输性能,从其他方面对enet和kcp做一对比(满分5分):我们对libenet略微做一些调整——默认rtt从500ms调整成50ms, 去除超时重传的指数避让策略。Linux下用TC命令模拟网络延迟和丢包率,控制延迟分别为30ms, 50ms, 70ms,控制丢包率分别为1%, 3%, 5%, 7%, 10%,在模拟出的不同网络环境下,对tcp, 原始enet和改进后的enet进行了对比测试。测试中考察两个性能指标:1)平均响应时间;2)响应时间超过300ms的包的比例。libenet的代码调整: 图 1 调整默认RTT为50ms 图 2 取消指数避让tc命令如下:模拟延迟100ms(rtt为200ms): tc qdisc add dev eth0 root netem delay 100ms模拟1%丢包率:tc qdisc add dev eth0 root netem loss 1%对比结果数据如下:图 3 不同丢包率和网络延迟下TCP协议、ENET、优化后ENET的平均响应时间对比图 4 不同丢包率和网络延迟下TCP协议、ENET、优化后ENET的超时响应比例对比从图中可见,在平均响应方面,TCP协议的劣势不明显,在延迟为30ms,丢包率为1%时,改进后的ENET平均RTT为69ms, 原始ENET平均RTT为67ms, TCP平均RTT为67ms;但是从响应时间超过300ms的比例看,在延迟为30ms,丢包率为1%时,改进后的ENET RTT超过300ms的包为0,而TCP RTT超过300ms的比例则超过了2%,如果是在游戏中,这个表现已经能明显影响游戏体验了。结果表明,TCP在网络稍不稳定的情况下就已经有比较大的问题了,改进后的ENET有明显优势。总结测试结果符合预期,在实时性方面,TCP协议的网络抗性欠佳,对MOBA类或其他实时性要求较高的游戏,我们不建议使用TCP作为协议载体。事实上,王者荣耀,乱斗西游的通信协议也确实是基于UDP封装的,别问我是怎么知道的。后话对于开发人员来说,优化协议和同步算法是在已有网络环境下提升用户体验的可用方法,也是较平民化的方法,在网络抖动有限、丢包并不频繁、网络环境不至于太差的情况下,的确能有效提高游戏体验;然而这种方法也存在局限性,在网络环境超出可控范围,如在地铁上、商场里等人潮拥挤、存在网络热点,延迟或丢包率极高的环境中,还是无法解决问题,所谓“巧妇难为无米之炊”,再牛X的协议和算法,也无法点石成金,要从根本上解决问题,最终还是要回到网络质量上。此文已由作者授权腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号v

January 9, 2019 · 1 min · jiezi

绝对干货!初学者也能看懂的DPDK解析

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由Willko发表于云+社区专栏一、网络IO的处境和趋势从我们用户的使用就可以感受到网速一直在提升,而网络技术的发展也从1GE/10GE/25GE/40GE/100GE的演变,从中可以得出单机的网络IO能力必须跟上时代的发展。1. 传统的电信领域IP层及以下,例如路由器、交换机、防火墙、基站等设备都是采用硬件解决方案。基于专用网络处理器(NP),有基于FPGA,更有基于ASIC的。但是基于硬件的劣势非常明显,发生Bug不易修复,不易调试维护,并且网络技术一直在发展,例如2G/3G/4G/5G等移动技术的革新,这些属于业务的逻辑基于硬件实现太痛苦,不能快速迭代。传统领域面临的挑战是急需一套软件架构的高性能网络IO开发框架。2. 云的发展私有云的出现通过网络功能虚拟化(NFV)共享硬件成为趋势,NFV的定义是通过标准的服务器、标准交换机实现各种传统的或新的网络功能。急需一套基于常用系统和标准服务器的高性能网络IO开发框架。3. 单机性能的飙升网卡从1G到100G的发展,CPU从单核到多核到多CPU的发展,服务器的单机能力通过横行扩展达到新的高点。但是软件开发却无法跟上节奏,单机处理能力没能和硬件门当户对,如何开发出与时并进高吞吐量的服务,单机百万千万并发能力。即使有业务对QPS要求不高,主要是CPU密集型,但是现在大数据分析、人工智能等应用都需要在分布式服务器之间传输大量数据完成作业。这点应该是我们互联网后台开发最应关注,也最关联的。二、Linux + x86网络IO瓶颈在数年前曾经写过《网卡工作原理及高并发下的调优》一文,描述了Linux的收发报文流程。根据经验,在C1(8核)上跑应用每1W包处理需要消耗1%软中断CPU,这意味着单机的上限是100万PPS(Packet Per Second)。从TGW(Netfilter版)的性能100万PPS,AliLVS优化了也只到150万PPS,并且他们使用的服务器的配置还是比较好的。假设,我们要跑满10GE网卡,每个包64字节,这就需要2000万PPS(注:以太网万兆网卡速度上限是1488万PPS,因为最小帧大小为84B《Bandwidth, Packets Per Second, and Other Network Performance Metrics》),100G是2亿PPS,即每个包的处理耗时不能超过50纳秒。而一次Cache Miss,不管是TLB、数据Cache、指令Cache发生Miss,回内存读取大约65纳秒,NUMA体系下跨Node通讯大约40纳秒。所以,即使不加上业务逻辑,即使纯收发包都如此艰难。我们要控制Cache的命中率,我们要了解计算机体系结构,不能发生跨Node通讯。从这些数据,我希望可以直接感受一下这里的挑战有多大,理想和现实,我们需要从中平衡。问题都有这些1.传统的收发报文方式都必须采用硬中断来做通讯,每次硬中断大约消耗100微秒,这还不算因为终止上下文所带来的Cache Miss。2.数据必须从内核态用户态之间切换拷贝带来大量CPU消耗,全局锁竞争。3.收发包都有系统调用的开销。4.内核工作在多核上,为可全局一致,即使采用Lock Free,也避免不了锁总线、内存屏障带来的性能损耗。5.从网卡到业务进程,经过的路径太长,有些其实未必要的,例如netfilter框架,这些都带来一定的消耗,而且容易Cache Miss。三、DPDK的基本原理从前面的分析可以得知IO实现的方式、内核的瓶颈,以及数据流过内核存在不可控因素,这些都是在内核中实现,内核是导致瓶颈的原因所在,要解决问题需要绕过内核。所以主流解决方案都是旁路网卡IO,绕过内核直接在用户态收发包来解决内核的瓶颈。Linux社区也提供了旁路机制Netmap,官方数据10G网卡1400万PPS,但是Netmap没广泛使用。其原因有几个:1.Netmap需要驱动的支持,即需要网卡厂商认可这个方案。2.Netmap仍然依赖中断通知机制,没完全解决瓶颈。3.Netmap更像是几个系统调用,实现用户态直接收发包,功能太过原始,没形成依赖的网络开发框架,社区不完善。那么,我们来看看发展了十几年的DPDK,从Intel主导开发,到华为、思科、AWS等大厂商的加入,核心玩家都在该圈子里,拥有完善的社区,生态形成闭环。早期,主要是传统电信领域3层以下的应用,如华为、中国电信、中国移动都是其早期使用者,交换机、路由器、网关是主要应用场景。但是,随着上层业务的需求以及DPDK的完善,在更高的应用也在逐步出现。DPDK旁路原理:图片引自Jingjing Wu的文档《Flow Bifurcation on Intel® Ethernet Controller X710/XL710》左边是原来的方式数据从 网卡 -> 驱动 -> 协议栈 -> Socket接口 -> 业务右边是DPDK的方式,基于UIO(Userspace I/O)旁路数据。数据从 网卡 -> DPDK轮询模式-> DPDK基础库 -> 业务用户态的好处是易用开发和维护,灵活性好。并且Crash也不影响内核运行,鲁棒性强。DPDK支持的CPU体系架构:x86、ARM、PowerPC(PPC)DPDK支持的网卡列表:https://core.dpdk.org/supported/,我们主流使用Intel 82599(光口)、Intel x540(电口)四、DPDK的基石UIO为了让驱动运行在用户态,Linux提供UIO机制。使用UIO可以通过read感知中断,通过mmap实现和网卡的通讯。UIO原理:要开发用户态驱动有几个步骤:1.开发运行在内核的UIO模块,因为硬中断只能在内核处理2.通过/dev/uioX读取中断3.通过mmap和外设共享内存五、DPDK核心优化:PMDDPDK的UIO驱动屏蔽了硬件发出中断,然后在用户态采用主动轮询的方式,这种模式被称为PMD(Poll Mode Driver)。UIO旁路了内核,主动轮询去掉硬中断,DPDK从而可以在用户态做收发包处理。带来Zero Copy、无系统调用的好处,同步处理减少上下文切换带来的Cache Miss。运行在PMD的Core会处于用户态CPU100%的状态网络空闲时CPU长期空转,会带来能耗问题。所以,DPDK推出Interrupt DPDK模式。Interrupt DPDK:图片引自David Su/Yunhong Jiang/Wei Wang的文档《Towards Low Latency Interrupt Mode DPDK》它的原理和NAPI很像,就是没包可处理时进入睡眠,改为中断通知。并且可以和其他进程共享同个CPU Core,但是DPDK进程会有更高调度优先级。六、DPDK的高性能代码实现1. 采用HugePage减少TLB Miss默认下Linux采用4KB为一页,页越小内存越大,页表的开销越大,页表的内存占用也越大。CPU有TLB(Translation Lookaside Buffer)成本高所以一般就只能存放几百到上千个页表项。如果进程要使用64G内存,则64G/4KB=16000000(一千六百万)页,每页在页表项中占用16000000 * 4B=62MB。如果用HugePage采用2MB作为一页,只需64G/2MB=2000,数量不在同个级别。而DPDK采用HugePage,在x86-64下支持2MB、1GB的页大小,几何级的降低了页表项的大小,从而减少TLB-Miss。并提供了内存池(Mempool)、MBuf、无锁环(Ring)、Bitmap等基础库。根据我们的实践,在数据平面(Data Plane)频繁的内存分配释放,必须使用内存池,不能直接使用rte_malloc,DPDK的内存分配实现非常简陋,不如ptmalloc。2. SNA(Shared-nothing Architecture)软件架构去中心化,尽量避免全局共享,带来全局竞争,失去横向扩展的能力。NUMA体系下不跨Node远程使用内存。3. SIMD(Single Instruction Multiple Data)从最早的mmx/sse到最新的avx2,SIMD的能力一直在增强。DPDK采用批量同时处理多个包,再用向量编程,一个周期内对所有包进行处理。比如,memcpy就使用SIMD来提高速度。SIMD在游戏后台比较常见,但是其他业务如果有类似批量处理的场景,要提高性能,也可看看能否满足。4. 不使用慢速API这里需要重新定义一下慢速API,比如说gettimeofday,虽然在64位下通过vDSO已经不需要陷入内核态,只是一个纯内存访问,每秒也能达到几千万的级别。但是,不要忘记了我们在10GE下,每秒的处理能力就要达到几千万。所以即使是gettimeofday也属于慢速API。DPDK提供Cycles接口,例如rte_get_tsc_cycles接口,基于HPET或TSC实现。在x86-64下使用RDTSC指令,直接从寄存器读取,需要输入2个参数,比较常见的实现:static inline uint64_trte_rdtsc(void){ uint32_t lo, hi; asm volatile ( “rdtsc” : “=a”(lo), “=d”(hi) ); return ((unsigned long long)lo) | (((unsigned long long)hi) << 32);}这么写逻辑没错,但是还不够极致,还涉及到2次位运算才能得到结果,我们看看DPDK是怎么实现:static inline uint64_trte_rdtsc(void){ union { uint64_t tsc_64; struct { uint32_t lo_32; uint32_t hi_32; }; } tsc; asm volatile(“rdtsc” : “=a” (tsc.lo_32), “=d” (tsc.hi_32)); return tsc.tsc_64;}巧妙的利用C的union共享内存,直接赋值,减少了不必要的运算。但是使用tsc有些问题需要面对和解决1) CPU亲和性,解决多核跳动不精确的问题2) 内存屏障,解决乱序执行不精确的问题3) 禁止降频和禁止Intel Turbo Boost,固定CPU频率,解决频率变化带来的失准问题5. 编译执行优化1) 分支预测现代CPU通过pipeline、superscalar提高并行处理能力,为了进一步发挥并行能力会做分支预测,提升CPU的并行能力。遇到分支时判断可能进入哪个分支,提前处理该分支的代码,预先做指令读取编码读取寄存器等,预测失败则预处理全部丢弃。我们开发业务有时候会非常清楚这个分支是true还是false,那就可以通过人工干预生成更紧凑的代码提示CPU分支预测成功率。#pragma once#if !__GLIBC_PREREQ(2, 3)# if !define __builtin_expect# define __builtin_expect(x, expected_value) (x)# endif#endif#if !defined(likely)#define likely(x) (__builtin_expect(!!(x), 1))#endif#if !defined(unlikely)#define unlikely(x) (_builtin_expect(!!(x), 0))#endif2) CPU Cache预取Cache Miss的代价非常高,回内存读需要65纳秒,可以将即将访问的数据主动推送的CPU Cache进行优化。比较典型的场景是链表的遍历,链表的下一节点都是随机内存地址,所以CPU肯定是无法自动预加载的。但是我们在处理本节点时,可以通过CPU指令将下一个节点推送到Cache里。API文档:https://doc.dpdk.org/api/rte…static inline void rte_prefetch0(const volatile void p){ asm volatile (“prefetcht0 %[p]” : : [p] “m” ((const volatile char *)p));}#if !defined(prefetch)#define prefetch(x) __builtin_prefetch(x)#endif…等等3) 内存对齐内存对齐有2个好处:l 避免结构体成员跨Cache Line,需2次读取才能合并到寄存器中,降低性能。结构体成员需从大到小排序和以及强制对齐。参考《Data alignment: Straighten up and fly right》#define __rte_packed attribute((packed))l 多线程场景下写产生False sharing,造成Cache Miss,结构体按Cache Line对齐#ifndef CACHE_LINE_SIZE#define CACHE_LINE_SIZE 64#endif#ifndef aligined#define aligined(a) attribute((aligned(a)))#endif4) 常量优化常量相关的运算的编译阶段完成。比如C++11引入了constexp,比如可以使用GCC的__builtin_constant_p来判断值是否常量,然后对常量进行编译时得出结果。举例网络序主机序转换#define rte_bswap32(x) ((uint32_t)(__builtin_constant_p(x) ? rte_constant_bswap32(x) : rte_arch_bswap32(x)))其中rte_constant_bswap32的实现#define RTE_STATIC_BSWAP32(v) ((((uint32_t)(v) & UINT32_C(0x000000ff)) << 24) | (((uint32_t)(v) & UINT32_C(0x0000ff00)) << 8) | (((uint32_t)(v) & UINT32_C(0x00ff0000)) >> 8) | (((uint32_t)(v) & UINT32_C(0xff000000)) >> 24))5)使用CPU指令现代CPU提供很多指令可直接完成常见功能,比如大小端转换,x86有bswap指令直接支持了。static inline uint64_t rte_arch_bswap64(uint64_t _x){ register uint64_t x = _x; asm volatile (“bswap %[x]” : [x] “+r” (x) ); return x;}这个实现,也是GLIBC的实现,先常量优化、CPU指令优化、最后才用裸代码实现。毕竟都是顶端程序员,对语言、编译器,对实现的追求不一样,所以造轮子前一定要先了解好轮子。Google开源的cpu_features可以获取当前CPU支持什么特性,从而对特定CPU进行执行优化。高性能编程永无止境,对硬件、内核、编译器、开发语言的理解要深入且与时俱进。七、DPDK生态对我们互联网后台开发来说DPDK框架本身提供的能力还是比较裸的,比如要使用DPDK就必须实现ARP、IP层这些基础功能,有一定上手难度。如果要更高层的业务使用,还需要用户态的传输协议支持。不建议直接使用DPDK。目前生态完善,社区强大(一线大厂支持)的应用层开发项目是FD.io(The Fast Data Project),有思科开源支持的VPP,比较完善的协议支持,ARP、VLAN、Multipath、IPv4/v6、MPLS等。用户态传输协议UDP/TCP有TLDK。从项目定位到社区支持力度算比较靠谱的框架。腾讯云开源的F-Stack也值得关注一下,开发更简单,直接提供了POSIX接口。Seastar也很强大和灵活,内核态和DPDK都随意切换,也有自己的传输协议Seastar Native TCP/IP Stack支持,但是目前还未看到有大型项目在使用Seastar,可能需要填的坑比较多。我们GBN Gateway项目需要支持L3/IP层接入做Wan网关,单机20GE,基于DPDK开发。问答如何检查网络连接?相关阅读把报文再扔回内核,DPDK这样做用DPDK rte_ring实现多进程间通信低于0.01%的极致Crash率是怎么做到的? 【每日课程推荐】新加坡南洋理工大学博士,带你深度学习NLP技术 ...

September 5, 2018 · 2 min · jiezi