Node.js与网络:Node.js对TCP、UDP、Socket、HTTP等协议的实现和支持

 2015年08月05日    657     声明


OSI七层模型是不同计算机或通信系统间互联的标准体系和框架,在OSI中包括一系列标准和协议,如:TCP/IPUDPHTTP等,在Node.js中提供了对这些协议的实现和支持,如:net模块提供了对TCPSocket的封装和支持,dgram模块提供了对UDP的封装和支持、http模块进一步封装了TCP协议提供了对HTTP的支持。本文对网络中相关协议、概念及Node.js中对相关协议的实现模块做简单介绍,后续会有对具体介绍模块及其功能文章。

  1. OSI七层模型
  2. Node.js对网络协议的实现与支持


1. OSI七层模型


1.1 概念介绍

OSI(Open System Interconnection)开放系统互连参考模型,是ISO制定的一个用于计算机或通信系统间互联的标准体系,它是一个七层抽象模型,从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。目的是为不同计算机互连提供一个共同的基础和标准框架,OSI中包括一系列抽象的术语、概念,也包括具体的协议,遵循OSI参考模型和相关协议能够实现计算机或通信系统间互联互通。


1.2 OSI七层模型简单介绍

  • 应用层(Application Layer):应用层是网络服务与最终用户的一个接口,其功能是实现应用进程(如用户程序、终端操作员等)之间的信息交换。应用层协议有:HTTPFTPTFTPSMTPSNMPDNS
  • 表示层(Presentation Layer):表示层用于数据表示形式的控制,其主要功能是把应用层提供的信息变换为能够共同理解的形式,提供字符代码、数据格式、控制信息格式、加密等的统一表示。
  • 会话层(Session Layer):会话层是会话单位的控制层,用于建立、管理、终止会话,其主要功能是按照在应用进程之间约定的原则,按照正确的顺序收、发数据,进行各种形态的对话。会话层规定了会话服务用户间会话连接的建立和拆除规程以及数据传送规则。
  • 传输层(Transport Layer):传输层定义传输数据的协议端口号,以及流控和差错效验。用于系统之间的数据传送控制层,主要功能是开放系统之间数据的收发确认。同时,还用于弥补各种通信网路的质量差异,对经过下三层之后仍然存在的传输差错进行恢复,进一步提高可靠性。会话层协议有:TCPUDP
  • 网络层(Network Layer):进行逻辑地址寻址,实现不同网络之间的路径选择,为报文或分组通过通信子网选择最适当的路径。控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。网络层协议有:ICMPIGMPIPARPRARP
  • 数据链路层(Data Link Layer):数据链路可以粗略地理解为数据通道,该层的主要功能是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。其功能包括:建立逻辑连接、进行硬件地址寻址、差错效验等。
  • 物理层(Physical Layer):物理层并不是物理媒介本身,它只是开放系统中利用物理媒体实现物理连接的功能描述和执行连接的规程。物理层提供用于建立、保持和断开物理连接的机械的、电气的、功能的和过程的条件,如:建立、维护、断开物理连接。物理层协议有:RS 232CRS 449/422/423等。


2. Node.js对网络协议的实现与支持


2.1 net模块与TCPSocket

TCPSocket

TCP(Transmission Control Protocol)传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议,它位于IP协议之上,TCP是因特网中的传输层协议,使用三次握手协议建立连接,而终止一个连接要经过四次握手。TCP为应用层提供了一种传输机制,例如:HTTP就工作在TCP之上,其它很多面向连接的应用(如:iRC、SMTP、IMAP)也工作在TCP之上。

Socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信,Socket本身并不是协议,是对TCP/IP协议的封装,是一个调用接口。


Node.js的net模块

Node.js中提供了net模块,该模块提供了对TCP、Socket的封装与支持,它包含了创建TCP服务器/客户端的方法。net模块继承自eventsstream模块,所以该模块创建的服务器/客户端也是一个事件发射器,而其创建的客户端socket套接字对象又是一个可读写的Streamnet模块网络操作的基础模块,Node.js中其它网络操作相关模块,如:Http模块等,都是基于net模块的进一步封装。

net模型的详细介绍请参考:Node.js对TCP/Socket的实现之net模块的使用


2.2 dgram模块与UDP

UDP用户数据报

UDP(User Datagram Protocol)用户数据报协议,是一种无连接的传输层协议。它与TCP协议一样在IP协议之上,同样位于传输层,用于处理数据包。但TCP协议是面向链接,在网络节点之间提供可靠有序的数据传输。而UDP协议是一种无连接的协议,不具备TCP协议的可靠性。UDP无状态特性在有些情况下特别有用,例:消息的广播和多播等。使用UDP的应用程序包括:DNS、流媒体应用、IPTV、网络语音等。


Node.js的dgram模块

Node.js使用dgram模块来支持UDP用户数据报协议,由于不用像TCP那样面向连接,所以UDP要相对轻量。想要发送或接收UDP消息,就可以使用dgram模块创建套接字对象,通过该套接字可以将消息发送给其它UDP终端。将套接字对象绑定到UDP端口后,可以监听传入消息。UDP模块也实现了events模块,但与TCP的套接字对象不同,该模块没有继承stream模块。

dgram模型的详细介绍请参考:Node.js用户数据报dgram模块


2.3 http模块与HTTP

HTTP协议

HTTP(Hypertext Transfer Protocol)超文本传输协议,是一个用于内容传输的应用层协议,是互联网上应用最为广泛的一种网络协议,它工作在TCP之上,是万维网进行数据通信的基础。HTTP连接最显著的特点是每次客户端发送的请求都需要服务器响应,请求结束后,连接会自动释放。


Node.js的http模块

在Node.js中可以使用http模块轻松创建HTTP服务器或HTTP客户端,https模块是其安全版本。http模块在net模块之上构建,所以net模块中的大部分功能都可以在http模块中使用。与net模块一样,http模块也实现了eventsstream模块,所http模块创建的对象也分别是事件发射器或可读写的Stream,或既是事件发射器又是Stream