Node.js与网络:Node.js对TCP、UDP、Socket、HTTP等协议的实现和支持
转自: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
对网络协议的实现与支持
1. OSI
七层模型
1.1 概念介绍
OSI(Open System Interconnection)开放系统互连参考模型,是ISO制定的一个用于计算机或通信系统间互联的标准体系,它是一个七层抽象模型,从低到高分别是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。目的是为不同计算机互连提供一个共同的基础和标准框架,OSI中包括一系列抽象的术语、概念,也包括具体的协议,遵循OSI参考模型和相关协议能够实现计算机或通信系统间互联互通。
1.2 OSI
七层模型简单介绍
- 应用层(Application Layer):应用层是网络服务与最终用户的一个接口,其功能是实现应用进程(如用户程序、终端操作员等)之间的信息交换。应用层协议有:
HTTP
、FTP
、TFTP
、SMTP
、SNMP
、DNS
- 表示层(Presentation Layer):表示层用于数据表示形式的控制,其主要功能是把应用层提供的信息变换为能够共同理解的形式,提供字符代码、数据格式、控制信息格式、加密等的统一表示。
- 会话层(Session Layer):会话层是会话单位的控制层,用于建立、管理、终止会话,其主要功能是按照在应用进程之间约定的原则,按照正确的顺序收、发数据,进行各种形态的对话。会话层规定了会话服务用户间会话连接的建立和拆除规程以及数据传送规则。
- 传输层(Transport Layer):传输层定义传输数据的协议端口号,以及流控和差错效验。用于系统之间的数据传送控制层,主要功能是开放系统之间数据的收发确认。同时,还用于弥补各种通信网路的质量差异,对经过下三层之后仍然存在的传输差错进行恢复,进一步提高可靠性。会话层协议有:
TCP
、UDP
- 网络层(Network Layer):进行逻辑地址寻址,实现不同网络之间的路径选择,为报文或分组通过通信子网选择最适当的路径。控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。网络层协议有:
ICMP
、IGMP
、IP
、ARP
、RARP
- 数据链路层(Data Link Layer):数据链路可以粗略地理解为数据通道,该层的主要功能是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。其功能包括:建立逻辑连接、进行硬件地址寻址、差错效验等。
- 物理层(Physical Layer):物理层并不是物理媒介本身,它只是开放系统中利用物理媒体实现物理连接的功能描述和执行连接的规程。物理层提供用于建立、保持和断开物理连接的机械的、电气的、功能的和过程的条件,如:建立、维护、断开物理连接。物理层协议有:
RS 232C
、RS 449/422/423
等。
2. Node.js
对网络协议的实现与支持
2.1 net
模块与TCP
、Socket
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模块的使用。
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
模块也实现了events
和stream
模块,所http
模块创建的对象也分别是事件发射器或可读写的Stream
,或既是事件发射器又是Stream
。
Node.js与网络:Node.js对TCP、UDP、Socket、HTTP等协议的实现和支持相关推荐
- TCP/UDP,SOCKET,HTTP,FTP协议简析
(一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...
- Linux Kernel TCP/IP Stack — Socket Layer — TCP/UDP Socket 网络编程
目录 文章目录 目录 TCP/UDP Socket 逻辑架构 创建 Socket 绑定 Socket 请求建立 Socket 连接 监听 Socket 接受请求 关闭连接 数据的发送和接收 send ...
- 网络基本概念之TCP, UDP, 单播(Unicast), 多播(组播)(Multicast)
网络基本概念之TCP, UDP, 单播(Unicast), 多播(组播)(Multicast) 我们周围一切几乎都依赖于把事情抽象成低等级,并在某一点把它具体化,在一些设计概念中,接口层十分清晰并且目 ...
- 网络调试工具TCP/UDP socket的使用
TCP/UDP socket调试工具的使用,可以在想服务器发送命令,或者查看服务器返回的数据. 打开界面后选择左边客户端还是服务端,使用TCP还是udp,点击创建相应的模拟环境.
- TCP UDP socket http webSocket 之间的关系
阅读目录 OSI & TCP/IP 模型 几者之间的关系 HTTP Socket WebSocket webSocket 概念 webSocket 优点 Websocket 的作用 ajax轮 ...
- 网络基本概念之TCP, UDP, 单播(Unicast), 组播(Multicast)
这篇文章相当低级,但相当重要! 我们周围一切几乎都依赖于把事情抽象成低等级,并在某一点把它具体化,在一些设计概念中,接口层十分清晰并且目标很集中,应用程序不用考虑操作系统如何工作,操作系统也不用考虑硬 ...
- Python核心编程(第3版)第2章网络编程中关于tcp/udp服务器和客户端实现代码的运行出错的修正
在Python核心编程(第3版)第2章网络编程中, 关于tcp/udp服务器和客户端实现代码的运行会出现 ['str' does not support the buffer interface]之类 ...
- 网络编程:概述TCP/UDP以及端口号的作用
TCP/UDP对比 1. TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前 不需 要建立连接 2. TCP提供可靠的服务.也就是说,通过TCP连接传送的数据,无差错,不丢失 ...
- 网络基础(二)之TCP/UDP协议
目录 传输层 再谈端口号 端口号范围划分 认识知名端口号(Well-Know Port Number) 两个问题 pidof netstat UDP协议 UDP协议端格式 对于16位UDP长度的理解 ...
- Java TCP/UDP socket 编程流程总结
最近正好学习了一点用java socket编程的东西.感觉整体的流程虽然不是很繁琐,但是也值得好好总结一下. Socket Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据.就 ...
最新文章
- zip压缩多个文件,解压时不包含目录层级
- 2022-2028年中国乳制品行业市场需求预测与投资战略规划分析报告
- 百度搜索效果(页面传来数据地址,由服务器去获取)
- 一个mp4文件分析工具
- Linux 串口 gprs at,linux下GPRS模块使用AT命令实现拨接电话,发中英文短信
- 数据挖掘开源项目立项
- 程序员家的精品大闸蟹:青壳、白底、肉多、爆黄,现在是吃大闸蟹的最佳时期...
- leetcode 二进制求和 addBinary
- 应用程序挂起、复原与终止— IOS开发
- java+txt+词语+次数_Java练习2--读取txt文件统计考勤次数并写入一个txt文件中
- sqlserver无法启动端口冲突解决方法
- Python学习笔记(尚硅谷)——字符串
- centos镜像 from_Docker 基于 CentOS 基础镜像开发环境的搭建与部署
- Linux(1)之文件“776”
- 如何做好会员营销 三步教你看懂会员管理
- 算法面试题-用单向链表表示十进制整数,求两个正整数之和。1234+34=1268
- 枣庄高防php主机,枣庄机房_枣庄联通机房_枣庄BGP高防机房
- Java-GUI编程之ImageIO的使用
- Ventoy多镜像+防毒全能U盘工具箱
- linux系统修改时区
热门文章
- 如何迅速掌握并提高linux运维技能
- (一)phoneGap之环境搭建教程及其example分析
- 渗透测试(Penetration Testing)
- 通过用户登陆消息类,来学习面向对象的实体统一接口和验证统一接口
- 股市心态决定成败:不贪不惧不急不赌
- 关于IDEA WEB项目的创建与无法继承HttpServlet问题
- android中的so加固,so加固-加密特定section中的内容
- java 反射无参方法_java 反射 调用无参数方法?
- hibernate连接mysql 释放连接_SSH 占用数据库连接不释放问题
- error:lnk2005 已经在*.obj中定义_如何在 Spring 中自定义 scope