转自:https://itbilu.com/nodejs/core/VkcdcFq9.html
OSI七层模型是不同计算机或通信系统间互联的标准体系和框架,在OSI中包括一系列标准和协议,如:TCP/IP、UDP、HTTP等,在Node.js中提供了对这些协议的实现和支持,如:net模块提供了对TCP、Socket的封装和支持,dgram模块提供了对UDP的封装和支持、http模块进一步封装了TCP协议提供了对HTTP的支持。本文对网络中相关协议、概念及Node.js中对相关协议的实现模块做简单介绍,后续会有对具体介绍模块及其功能文章。
OSI七层模型Node.js对网络协议的实现与支持
OSI(Open System Interconnection)开放系统互连参考模型,是ISO制定的一个用于计算机或通信系统间互联的标准体系,它是一个七层抽象模型,从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。目的是为不同计算机互连提供一个共同的基础和标准框架,OSI中包括一系列抽象的术语、概念,也包括具体的协议,遵循OSI参考模型和相关协议能够实现计算机或通信系统间互联互通。
TCP与Socket
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模块继承自events和stream模块,所以该模块创建的服务器/客户端也是一个事件发射器,而其创建的客户端socket套接字对象又是一个可读写的Stream。net模块网络操作的基础模块,Node.js中其它网络操作相关模块,如:Http模块等,都是基于net模块的进一步封装。
net模型的详细介绍请参考:Node.js对TCP/Socket的实现之net模块的使用。
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模块。
HTTP协议
HTTP(Hypertext Transfer Protocol)超文本传输协议,是一个用于内容传输的应用层协议,是互联网上应用最为广泛的一种网络协议,它工作在TCP之上,是万维网进行数据通信的基础。HTTP连接最显著的特点是每次客户端发送的请求都需要服务器响应,请求结束后,连接会自动释放。
Node.js的http模块
在Node.js中可以使用http模块轻松创建HTTP服务器或HTTP客户端,https模块是其安全版本。http模块在net模块之上构建,所以net模块中的大部分功能都可以在http模块中使用。与net模块一样,http模块也实现了events和stream模块,所http模块创建的对象也分别是事件发射器或可读写的Stream,或既是事件发射器又是Stream。