`
java_mzd
  • 浏览: 580558 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论
阅读更多

 

 

PS.又调了好几遍,还是无法将整篇文章作为一个博客发表。所以,还是将文件分成两部分吧。

第一部分主要介绍网络层的基本知识

第二部分介绍ICMP有关知识。

你所不知道的网络层

上文《TCP/IP传输层,你懂多少》 http://java-mzd.iteye.com/blog/1007577中,我们介绍了“传输层是如何为数据提供端对端的服务的”.

可是,数据包又是怎样从你的电脑出发,历经网络世界的艰辛,到达对方电脑的呢在网络的世界当中,你的数据包又会遇到些什么问题?它们又是怎么解决的你?要回答这个问题,我们就必须研究TCP/IP协议栈中的Internet层(和数据链路层了)。


同以往一样,给出我自己认为会遇到的15个问题,并且列出来,如果大家能熟练的回答,请您绕道。

  1. 网络层的作用?
  2. 网络层有哪些协议?
  3. IP数据包的格式?
  4. IP数据包传输的过程?
  5. 为什么需要ARP协议?
  6. ARP协议通信过程是怎么样的?(ARP协议如何控制网络?)
  7. 数据包的最大值?(分片的地方?分片重组的地方?分片的原则?)
  8. 数据包在局域网内怎么从一台主机传送到另外一台主机?
  9. 数据怎么实现跨网段传输?(路由如何实现跨网段传输?)
  10. 什么是默认网关?
  11. 代理ARP的作用?
  12. 数据跨网段传输时在路由器中的具体情形?(所谓的穿过路由是指什么?)
  13. 数据包路由的过程?
  14. 为什么需要ICMP协议?(ICMP协议差错控制与TCP差错控制对比)
  15. 什么是ICMP协议?
  16. ICMP协议有哪些数据包?(Ping程序的实现?trancerouter程序的实现?) 

一。网络层的作用: 

TCP/IP协议栈的Internet主要负责处理主机到主机的通信,决定数据包如何交付:是交给网关(路由器)还是交给本地端口。

 

二。网络层的协议及作用:

网际协议IP:用来路由

网际控制报文协议 ICMP:IP层提供一定的可靠性

地址解析协议ARP:

反向地址解析协议RARP

 

三。IP数据包格式: 

 

版本(4)

头长度(4)

服务类型(8)

总长度(16)

标识(16)

标志(3)

段位移(13)

生存期(8)

协议(8)

头校验和(16)

IP地址(32)

目的IP地址(32)

IP选项(0或者32

数据

  

四。数据包传输的过程

首先,传输层将封装好的数据交给Internet层,Internet层收到数据后,将数据封装成一个IP数据包。

注意协议之间的底层无关性:Internet层封装上层数据包时,不关心不管上层传给他的是UDP数据包还是TCP数据包,都将上层传来的数据封装为IP数据包。同样,传输层在封装用户信息流时也是同样的不关心上层数据的内容。

 

五。为什么需要ARP协议?

IP数据包要想继续向下发送,就必须转化为在物理设备上传输的数据帧。 

在物理设备上传输数据时,数据包首先是被网卡接收,如果网卡接收到的数据包的硬件地址与本机不符,则直接丢弃,如果相符,再交由上层协议处理的。在我们的网络通信中,源主机的应用程序知道目的程序的IP地址和端口号,却不知道目的主机的硬件地址,因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。

 

六。ARP协议通信过程?

每台机器上都维护着一个ARP缓存表,保存着IP地址MAC地址的映射

注意:缓存表中的记录有过期时间T,如果T时间内没有再次使用某条记录,则该记录失效,下次使用时,还要再次发ARP请求来获得目的主机的硬件地址。

作用:因为我们的机器需要和大量机器通信,如果没有过期机制的话,显然将会产生巨大的记录量,降低效率。

 

主机A要和主机B(192.168.0.1)通信,则先查询主机A中的ARP缓存表,看是否有该记录,如果有,则取出对应MAC地址。

如果缓存中没有该记录,主机A发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个ARP请求广播到本地网段本地网段的任何一个主机都可能是接受者,所以用广播, 广播的目的MAC地址:FF:FF:FF:FF:FF:FF)主机B收到广播的ARP请求,发现其中的IP地址(192.168.0.1)与本机相符,发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中,主机A接收ARP应答,提取MAC地址,并且将IP和MAC映射存入ARP缓存。

对于其他主机,虽然这个ARP请求可能与它无关,但ARP协议软件也会把其中的源MAC地址与源IP地址的映射记录下来这样做能够有效的减少ARP请求在局域网的发送次数。 


ARP欺骗的原理: 


通过以上的知识,我们可以知道,主机A要和主机B通信,必须请求得到主机B的MAC地址,而MAC地址,又是通过ARP请求来得到的。又,根据ARP请求的广播机制,与非接收主机也会讲收到的ARP请求存入自己的ARP缓存。那么,我们可以自己发送一个ARP请求,将默认网关的IP作为发送IP,自己的MAC地址作为发送的MAC地址,随便请求一个IP地址的MAC地址。这样,网络中的所有计算机都会更新到默认网关的ARP缓存,而将默认网关IP对于的MAC地址改为我们网卡的MAC地址。从而,发送给默认网关的IP数据帧都会发送给我们自己的主机,我们监视完IP数据包后,再将IP数据包转发出去,即可通过ARP欺骗来完成对网络的监控。同样。当我们只进行ARP欺骗,而不进行转发的时候,则整个网络(内网)都将瘫痪。


当然,这些都只是雕虫小计,装了ARP防火墙的机器,你就不能监控了,要实现监控,最好的方式,还是把你的机器,作为内网的默认网关,所有通往外网的机器都通过你的主机。这样比较合适。


七。数据包的最大值:

就像前面我们说的,IP数据包要想继续向下发送,就必须转化为在物理设备上传输的数据帧。对于网络硬件来说,能传输的物理帧的大小是有物理上限的。这个上限值就是最大传输单元MTU{令牌环网4500字节,以太网1500字节}当数据包的比MTU大的时候,数据包是无法封装成帧在网络上传输的,当数据包比MTU小的时候,显然又会浪费网络带宽。

因此,IP数据包最理想的大小应该是相连网络的MTU相符又因为 ,不同的网络MTU可能不同,当数据包需要经过较小MTU的网络时,我们需要将大数据包划分成更小的数据包(分片),以确保他们能通过无力处理大IP数据包的网络。

 

分片发生的位置:相连MTU网络间的路由

分片重组的位置:目标主机

分片发生在IP层,通过IP数据报报头中的“标志”和“段位移”来标识

(标识由)

分片后,形成的还是IP数据包在路由中的处理方式与其他IP数据包一样

 

 分片示意图:


        原始数据包:

IP报头

数据1480字节

 分片以后数据包

 

IP报头

数据600字节

段位移0

 

IP报头

数据600字节

段位移600

 

IP报头

数据280字节

 段位移1200

 


分片的优点:可以让数据包穿过MTU多变的网络。

缺点:分片后形成的多个IP数据包,每个都单独路由,又因为重组发送在目标主机,且又一个分片丢失,则整个原始IP数据包丢失,增大丢包风险。

 

说了这么多,我们还是只是不知道,数据怎么从一台主机到另外一台主机,接下来,我们一一分解,先从局域网开始。

 

八。数据在局域网中是如何传播的?

我们知道,在局域网中,无论是按何种拓扑结构组网,还是按何种方式来处理介质访问权限,任何两个节点之间都存在实际的线路链接

因此,我们通过ARP协议,得到目标主机的MAC地址后,在数据链路层将IP数据包封装为数据帧,将数据帧发送到本地网段上,即可将数据帧成功的交给目标主机(目标主机网卡收到数据帧后,判断MAC地址是否为本网卡MAC地址)。

当你要和很多很多主机通信时,你不可能保证他们都和你在同一网段内

那么不在一个局域网的数据之间,又是如何通信的呢?


九。数据是怎么样实现跨网段传输的?

这就需要路由器通过IP协议来完成此工作了。

下面我们通过一个实际的例子来看:主机A192.168.1.1 需要和主机B:172.16.1.1通信。

          

两个主机并不在同一个局域网,并没有实际的物理线路将他们链接起来。

这个时候,我们在两个网段之间增加一个中转点(路由器),路由器上插有多个网卡,可以同时通过网卡E0接入局域网1 (192.168.1.0/24),同时通过网卡E2接入局域网2(172.168.1.0/24)这样,局域网1中的机器A192.168.1.1)要和局域网2中的机器B172.16.1.1)通信。A将数据将数据包发送到本网段,路由器的E1口接收数据包,再将其通过E2口发送到网段B,主机B即可成功接收来自主机A的信息了。即可实现数据的跨网段传输

大家发现问题了嘛?

没错,我们前面说了“网卡接收数据包后,首先判断MAC地址是不是本机地址,如果不是,则丢弃。”

而且我们说了“ARP请求是发送广播”,而大家都知道,为了防止广播风暴,路由器是不转发广播的。

那么,这个时候,即使A能有办法获得BMAC地址,路由器的E1口上的网卡,MAC地址也不是BMAC地址,这个时候,我们该怎么办呢?

 

十。什么是默认网关?

默认网关是TCP/IP中的一个配置参数,它是处于本地网络上的某个路由器的接口的IP地址。

在有默认网关的情况下,目的地为非本网段的数据包,源主机都发送给默认网关,由默认网关将数据包正确的发送给目标主机

在上图中,网络192.168.1.0/24的默认网关为192.168.1.254,目的地为非本地网段的数据包,都发送给这个IP对应的Router,再由该Router转发给目的主机。

十一:什么是代理ARP?

在没有默认网关的情况下,我们也可以使用代理ARP技术来实现让路由器完成数据的跨网段传输功能

如果我们将网络中所有主机的目的地都设为本地网络,那么当有要发送给外网IP的数据包时,源主机依然会认为目的地为本网段,而使用目的IP发出ARP请求。这个时候,对于目的IP不是本网段的ARP请求,连接在本网段的路由器使用自己的MAC地址回复这个ARP请求。于是主机A将数据发到本地网段,连在本地网络的路由器接收数据,路由器再将数据转发到正确的目的地。其实运行代理ARP的路由器就相当于默认网关

 代理ARP的优点:简化了主机的管理(不用再每个主机都单独配置默认网关了)

  缺点:因为针对每个局域网,外网IP都是很多的,所以:

     1.在路由器上需要保存一个很大的ARP缓存。

         2.每个外网IP都需要发送ARP请求,增大了内网的通信。


在上图中,当没有设置默认网关的时候,主机A发送给主机B的数据包,主机A发送ARP请求后,由连接E1口的Router 用自己E1口的MAC地址回复该ARP请求 。

 

路由器在E1口接到数据包后,怎么样通过E2口发到主机B所在的网段上去?

十二.路由器中数据跨网段传输的具体情形?

每个路由器中都存有一张路由表,记录着目标网段和对应的网卡出口的映射。

在上面的例子中,路由器的E1口收到数据包,根据数据包取出对应的目的网段的地址172.16.1.1,然后路由器查找路由表,根据IP地址,找到通过E2口可以达到目标网络。于是,路由将数据包从E1口读入,穿过路由器,从E2口写出。

所谓的穿过路由器,应该是指:两个网卡上都分别运行着TCP/IP协议,穿过路由,即从路由的内存中,将数据从网卡1的IP程序拷贝到网卡2的IP程序

至此,关于路由中的部分,我们就几乎讲完了,我们再来总结下:

【路由器都有哪些功能?】

   1.交换和转发功能:将数据从路由器的进入接口,穿过路由器,送到输出接口。

  (将一个数据包从一个网段,发送到另外一个网段。)

   2.路由功能:即寻址,通过IP数据包决定正确的下一跳路径

 (通过哪个网卡写出。)

 

【路由器实现跨网段传输的基础?】

1.硬件基础:有多个网卡,同时在多个网段上,同时属于多个局域网。

2.软件基础:代理ARP(主机将目的地址都配置为本网段,路由器代理回应ARP请求)

 

在实际中的很多情况下,两个局域网之间可能不仅仅隔了一个网段,同理,我们可以在多个网段之间,通过多个路由器而使彼此连接起来。其实路由器就是将世界各地的各个局域网都连接起来,得到了我们现在的互联网。

 

十三:路由过程:

1.主机A的传输层将数据交给网络层,网络层加上双方IP地址,TTLIP报头信息,成为IP数据包,网络层将IP数据报交给数据链路层。

2.数据链路层根据IP地址,通过ARP得到MAC,封装为物理帧,通过网卡发出。

3.主机B接收物理帧,根据MAC地址判断:如果目的MAC地址不是本网卡MAC地址,则丢弃;如果是发给自己的,则交给网络层处理。

4.网络层通过IP地址判断:如果是发给自己的,则交给上层协议处理;如果不是发给自己的,则在路由表中查找此IP合理的下一跳地址(即通过哪个网卡发送到下一个网段),并将数据通过内存,从接收数据网卡的IP程序拷贝到需要发送数据网卡的IP程序。在发送网卡中,IP程序将数据包交给链路层,链路层发送ARP请求,得到下一跳的目的MAC地址,封装为帧,发送。

如此反复,直到IP数据包到达最终正确的接收主机。

好了,关于ARPIP都讲了挺多了,可是,为什么有ICMP协议呢?这个协议是干嘛的呢?

 

预知详情,请看下篇《TCP/IP网络层谜云之ICMP》 http://java-mzd.iteye.com/blog/1019089

9
3
分享到:
评论
1 楼 anyuecq258 2012-03-04  
今天在复习网络,就是一直没有找到从A机发送B机的一个真实数据到底经历了什么过程,终于在这里找到了,建议以后教科书上还是写清楚为好,原来的分层写的方式还是有问题,看完了也不知道怎么串起来的

相关推荐

    Python学习笔记.docx

    Python学习笔记

    node-v5.11.0-x86.msi

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    41532698775097Facebook Lite_405.0.0.8.113_apkcombo.com.armeabi-v7a.apk

    41532698775097Facebook Lite_405.0.0.8.113_apkcombo.com.armeabi-v7a.apk

    2024-2030中国RDF制粒机市场现状研究分析与发展前景预测报告.docx

    2024-2030中国RDF制粒机市场现状研究分析与发展前景预测报告

    财务困境-RLPM模型.xlsx

    详细介绍及样例数据:https://blog.csdn.net/li514006030/article/details/138549562

    基于python实现的Socket服务器与传感器通讯手段实现的家庭能源管理系统

    【作品名称】:基于Socket作为服务器与传感器通讯手段实现的家庭能源管理系统 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。

    node-v9.10.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    信息素养大赛的模拟题目

    内容概要: 此资源为信息素养大赛的算法创意实践挑战赛的模拟题目,包含:选择题、填空题、编程题。内容完全为自己整合,请各位同学及家长放心使用。

    什么是TJA和ICA.pdf

    什么是TJA和ICA

    2024-2030中国POS射频识别系统市场现状研究分析与发展前景预测报告.docx

    2024-2030中国POS射频识别系统市场现状研究分析与发展前景预测报告

    PCI & PCIe图像采集卡专精特新“小巨人”企业最新调研报告.docx

    PCI & PCIe图像采集卡专精特新“小巨人”企业最新调研报告

    基础运维技能(下)md格式笔记

    基础运维技能(下)md格式笔记

    ISO 18115-3-2022 表面化学分析词汇第3部分:光学界面分析术语.pdf

    ISO 18115-3-2022 表面化学分析词汇第3部分:光学界面分析术语.pdf

    node-v17.2.0-headers.tar.gz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    WordPress原创插件:当日24小时发布文章标题变红.zip

    WordPress原创插件:当日24小时发布文章标题变红

    微博热搜数据可视化分析系统,技术框架python + flask web + mysql + pycharm

    微博热搜数据可视化分析系统 技术框架 python + flask web + mysql + pycharm 角色介绍 普通用户 qqq 123456 模块分析 登录注册 数据爬取 数据清洗 数据可视化模块 热门话题排行 热词榜单 话题热度趋势和分布 话题情感指数和趋势 词云 NLP情感分析 相关话题推送 分词主题数据提取 舆情分析 退出模块 数据库weibo_nlp_system 分析原理 我的最爱是动漫,你喜欢什么呢? 我 的 最爱 是 动漫 你 喜欢 什么 呢

    node-v8.5.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    node-v9.3.0-linux-armv7l.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

    QQIP查询,IP指针文件,IP查询

    这是一个能够获取 IP 访问者信息的文件。当有用户访问时,它可以精准地获取到访问者的 IP 地址。该文件具有高效、准确的特点,能够为相关应用提供有力的数据支持。通过使用这个文件,我们可以更好地了解访问者的来源和分布情况,有助于进行数据分析和应用优化。将其上传至 CSDN,希望能与更多开发者分享交流,共同探索其在不同领域的应用价值,为互联网技术的发展贡献一份力量。需注意,在使用过程中要遵循相关法律法规,确保数据的合法使用和隐私保护。

    node-v9.1.0-darwin-x64.tar.xz

    Node.js,简称Node,是一个开源且跨平台的JavaScript运行时环境,它允许在浏览器外运行JavaScript代码。Node.js于2009年由Ryan Dahl创立,旨在创建高性能的Web服务器和网络应用程序。它基于Google Chrome的V8 JavaScript引擎,可以在Windows、Linux、Unix、Mac OS X等操作系统上运行。 Node.js的特点之一是事件驱动和非阻塞I/O模型,这使得它非常适合处理大量并发连接,从而在构建实时应用程序如在线游戏、聊天应用以及实时通讯服务时表现卓越。此外,Node.js使用了模块化的架构,通过npm(Node package manager,Node包管理器),社区成员可以共享和复用代码,极大地促进了Node.js生态系统的发展和扩张。 Node.js不仅用于服务器端开发。随着技术的发展,它也被用于构建工具链、开发桌面应用程序、物联网设备等。Node.js能够处理文件系统、操作数据库、处理网络请求等,因此,开发者可以用JavaScript编写全栈应用程序,这一点大大提高了开发效率和便捷性。 在实践中,许多大型企业和组织已经采用Node.js作为其Web应用程序的开发平台,如Netflix、PayPal和Walmart等。它们利用Node.js提高了应用性能,简化了开发流程,并且能更快地响应市场需求。

Global site tag (gtag.js) - Google Analytics