美文网首页
NODE 网络编程

NODE 网络编程

作者: TaoGeNet | 来源:发表于2017-05-11 20:54 被阅读24次

    Node是一个面向网络而生的平台,具有事件驱动、无阻塞、单线程等特性,具有良好的伸缩性,使得它十分轻量,适合在分布式网络中扮演各种各样的角色。

    在Web领域中大多数的编程语言需要专门的web服务器作为容器,入ASP,ASP.NET需要IIS作为服务器,PHP需要搭载Apache或Nginx环境等,JSP需要Tomcat服务器等。对于Node而言,无需额外的容器。

    Node提供了net、dgram、http、https 这4个模块,分别用于处理TCP、UDP、HTTP、HTTPS。

    TCP 

    TCP面向连接的协议,传输之前需要进行3次握手形成会话,创建会话的过程中,服务器端和客户端分别提供一个套接字,这两个套接字共同形成一个连接。服务器端与客户端则通过套接字实现两者之间连接的操作。

    注意,TCP针对网络中的小数据包有一定的优化策略:Nagle算法,针对每次发送小数据,要求等缓冲区的数据达到一定数量或者一定时间后才将其发出,以此来优化网络带宽。但数据有可能被延迟发送。

    可以使用socket.setNoDelay(true)去掉Nagle算法

    UDP

    UDP中一个套接字可以与多个UDP服务通信。

    HTTP

    HTTP构建在TCP之上,属于应用层协议。

    获取详情的HTTP报文采用的工具curl -v <url>

    http 模块

    Node的http模块包含对HTTP处理的封装。在Node中,HTTP服务器继承自TCP服务,它能够与多个客户端保持连接,由于采用事件驱动的形式,并不为每个连接创建额外的线程或进程,实现低内存高并发。

    HTTP服务于TCP服务区别

    在开启keepalive后,一个TCP会话可以用于多次请求和相应。TCP服务以connection为单位进行服务,HTTP服务以request为单位进行服务,Http模块将connection到request的过程进行了封装

    http 模块将连接所用的套接字的读写抽象为ServerRequest 和 ServerResponse对象,它们分别对应请求和相应操作。在请求过程中,http模块拿到连接中传来的数据,调用二进制模块http_parser进行解析,在解析完请求报文的报头后,触发request事件,调用用户的业务逻辑

    WebSocket服务

    webSocket客户端基于事件的编程模型与Node中自定义事件相差无几。

    WebSocket实现了客户端与服务器之间的长连接,而Node事件驱动的方式十分擅长与大量客户端保持高并发连接

    WebSocket 与传统HTTP相比

    客户端与服务器只建立一个TCP连接,可以使用更少的连接。

    webSocket服务器端可以推送数据到客户端,这远比HTTP请求响应模式更灵活、更高效

    有更轻量级的协议头,减少数据传送量。

    相比HTTP,WebSocket更接近于传输层协议,它并没有在HTTP的基础上模拟服务器的推送,而是在TCP上定义独立的协议

    Node没有内置WebSocket的库,WS模块封装了WebSocket的底层实现。Socker.io即是它的基础上构建实现的。

    网络服务与安全

    SSL(secure Sockets Layer安全套接字)SSL做为安全协议,它在传输层提供对网络连接加密的功能。对于应用层而言,他是透明的,数据在传输到应用层之前就已经完成了加密和解密过程。后IETF将其标准化称为TLS(Transport Layer security 安全传输层协议)

    Node在网络安全上提供了3个模块,分别为crypto、tbs、https。

    其中cryto主要用户加密解密,SHA1、MD5等加密算法。另外两个模块tls模块提供了与net模块类似的功能,区别在于它建立在TLS/SSL加密的TCP连接上。对于https而言,它完全与HTTP模块接口一致,区别在于它建立在安全的连接之上。

    TLS/SSL

    1.密钥   公钥/私钥结构  非对称结构,在建立安全传输之前,客户端和服务器之间需要互换公钥,进行加密,私钥进行解密。

    出现的问题,中间人攻击

    为了解决这个问题,数据传输的过程中需要对得到的公钥进行认证,以确认得到的公钥是出自目标服务器。TLS/SSL 引入了数字证书来进行认证。

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

    HTTPS

    HTTPS服务就是工作在TLS/SSL上的HTTP

    相关文章

      网友评论

          本文标题:NODE 网络编程

          本文链接:https://www.haomeiwen.com/subject/yrzotxtx.html