您的位置:首页 > 理论基础 > 计算机网络

深入浅出node.js:7 网络编程

2018-01-09 14:19 267 查看
利用Node可以十分方便地搭建网络服务器。在Web领域,大多数的编程语言需要专门的Web服务器作为容器,如ASP、ASP.NET需要IIS作为服务器,PHP需要搭载Apache或Nginx环境等,JSP需要Tomcat服务器等。但对于Node而言,只需要几行代码即可构建服务器,无需额外的容器。

Node提供了net, dgram, http, https这4个模块,分别用于处理TCP, UDP, HTTP, HTTPS。适用于服务器端和客户端

7.1 构建TCP服务

7.2 构建UDP服务

7.3 构建HTTP服务

7.4 构建WebSocket服务

它与Node之间的配合堪称完美,其理由有两条:

WebSocket客户端基于事件的编程模型与Node中自定义事件相差无几
WebSocket实现了客户端与服务器端之间的长连接,而Node事件驱动的方式十分擅长与大量的客户端保存高并发连接

除此之外,WebSocket与传统HTTP有如下好处:

客户端与服务器端只建立一个TCP连接,可以使用更少的连接
WebSocket服务器端可以推送数据到客户端,这远比HTTP请求响应模式更灵活、更高效。
有更轻量级的协议头,减少数据传送量。

WebSocket最早是作为HTML5重要特性而出现的

客户端的应用示例:

在WebSocket之前,网页客户端与服务器端进行通信最高效的是Comet技术。实现Comet技术的细节是采用长轮询或iframe流。长轮询的原理是客户端向服务器端发起请求,服务器端只在超时或有数据响应时断开连接;客户端在收到数据或者超时后重新发起请求。这个请求行为拖着长长的尾巴,是故用Coment(彗星)来命名它。

使用WebSocket的话,网页客户端只需一个TCP连接即可完成双向通信,在服务器端与客户端频繁通信时,无须频繁断开连接和重发请求。连接可以得到高效应用,编程模型也十分简洁。

相比HTTP,WebSocket更接近于传输层协议,它并没有在HTTP的基础上模拟服务器端的推送,而是在TCP上定义独立的协议。让人迷惑的部分在于WebSocket的握手部分是有HTTP完成的,使人觉得它可能是基于HTTP实现的。

协议主要分为两个部分:握手和数据传输。P182

握手:

数据传输:



7.5 网络服务与安全

明文传递是容易被监控,为此将数据加密后在传输,但是对于应用层协议而言,仍然希望能够透明地处理数据,而无须操心网络传输过程中的安全问题。

网景公司推出了SSL(安全套接层),对传输层加密, 随后IETF将其标准化,称为TLS(安全传输层协议)

Node在网络安全上提供了3个模块

crypto:用于加密解码

tls模块:建立在TLS/SSL加密的TCP连接上

https:完全与http模块接口一致,只是建立在安全的连接上

TLS/SSL:

密钥:TLS/SSL是一个公钥/私钥的结构,它是一个非堆成的结构,每个服务器端和客户端都有自己的公私钥。公钥用来加密要传输的数据,私钥用来解密接收到的数据。公钥和私钥是配对的,通过公钥加密的数据,只有通过私钥才能解密,所以在建立安全传输之前,客户端和服务器端之间需要互换公钥。客户端发送数据是要通过服务器端的公钥进行加密,服务器端发送数据时则需要客户端的公钥进行加密,如此才能完成加密解密的过程。P187

为了解决出现中间人攻击(交换公钥的过程中)这种问题,数据传输过程中还需要对得到的公钥进行认证,以确认得到的公钥是出自目标服务器。

引入数字证书,包含了服务器的名称和主机名、服务器的公钥、签名颁发机构的名称、来自签名颁发机构的签名。在连接建立前,会通过证书中的签名确认收到的公钥是来自目标服务器的,从而产生信任关系。

数字证书:CA(数字证书认证中心)的作用是为站点颁发证书,且这个证书中具有CA通过自己的公钥和私钥实现的签名。

通过CA机构颁发证书通常是一个烦琐的过程,需要付出一定的精力和费用。对于中小型企业而言,多半是采用自签名证书来构建安全网络的。P188

CA机构将证书颁发给服务器端后,证书在请求的过程中会被发送给客户端,客户端需要通过CA的证书验证真伪。如果是知名的CA机构,它们的证书一般预装在浏览器中。如果是自己扮演CA机构,颁发自有签名证书则不能享受这个福利。

HTTPS服务:需要用到私钥和签名证书
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: