node.js 之 网络编程

栏目 Node.js

看《深入浅出node.js》时候,对这一章印象深刻,因为有的知识很熟悉,有的很陌生。 看《网络是怎样链接的》有了更进一步的认识。

在这里先尝试进行回忆总结。

网络传输形式 #

Node.js 中和网络有关的内置包:

  • net 控制TCP
  • dgram控制UDP
  • http控制HTTP
  • https控制https

OSI网络协议 #

说起网络传输,少不了cs里的OSI七层网络协议:

  1. 物理层 硬件
  2. 链路层 链路接口
  3. 网络层 IP
  4. 传输层 TCP/UDP
  5. 会话层 通信连接、维持回话
  6. 表示层 加密解密
  7. 应用层 http等

信息从应用层构建开始,到物理层信息发出。经过信号传输到达另一端的物理层,再层层转发到对方的引用层。

UDP #

用户数据包协议。gdram

无连接 #

UDP不是面向连接的,面向事务。一个连接字可与多个UDP服务通信 无连接

##不可靠性 因为无连接,不需要建立连接,想发就发,也不关心是否接收成功。 网络不好就会丢包。 如果对实时性要求高,比如视频聊天就是udp了

场景 #

视频聊天,直播,pvp游戏

TCP #

net包。 tcp优化策略,nagle算法。 如果每次一个字节的传输不进行优化,会造成浪费,就有了缓存区的概念。

和udp相反,每次链接和断开都需要先握手。在传输过程中通过算法保证数据的可靠性,既然复杂了也就不高效了。

细节 #

连接三次握手 #

一开始都是 closed 状态。

  • 第一次握手。客户端向服务端发请求,syn-sent
  • 第二次握手,服务端收到并同意连接,返回应答 syn-recived
  • 第三次握手,收到同意的应答,再发送一个确认。客户端 established ,服务端收到应答也进入 established 状态

断开四次挥手 #

tcp是全双工的,每次断开两边都得发送 fin 和 ack

  1. 客户端觉得数据发送完成,给服务端发送fin
  2. 客户端收到,返回 ack,并进入close-wait
  3. 服务端数据发送完了,就返回fin,进入 last-ack状态
  4. 客户端收到,回复确认ack。进入time-wait 状态,一会儿就 closed 服务端收到ack就closed

HTTP #

见 http部分