nodejs网络基础


2019-4-7 nodejs 网络基础

网络基础(1)

网卡 每一个网卡都有自己的唯一编号 每一块网卡在连接到某个网络的时候都会拥有一个固定的或者动态分配的编号 IP 地址 127.0.0.1 本地回环 0.0.0.0 通配所有 IP 192.168.0.1-192.168.255.255 局域网络 端口:应用程序的使用频道 1024 以下为超级协议端口 最好不要使用

tcp 面向连接的协议,传输效率低 效率要求低,准确性高的长江 文件传输,接受右键 远程登录 udp 不可靠的无连接的传输效率高 效率要求高转却要求低的 在线视频,网络室语音电话 游戏

udp

nodejs 中 udp 通过 dgram 数据包来实现的.

  1. 创建

    const dgram = require('dgram')
    
    const server = new dgram.Socket()
    
    const server = dgram.createSocket(type, () => {
      用于等待接收数据
    }) //type 为 udp4 或者UDP  6
    
    //用于实现网络数据交换接口的API
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  2. 常用方法

    # 在服务端
    //开启监听
    server.on('listening', () => {
      console.log('正在监听12345 端口')
    })
    //接受到数据的时候触发这个事件
    server.on('message', data => {
      console.log(data.toString('utf8'))
    })
    //发生异常的时候触发
    server.on('error', error => {
      console.log(error)
      process.exit(-1)
    })
    //关闭的时候触发
    server.on('close', () => {
      console.log('服务关闭了')
      process.exit(0)
    })
    
    # 在客户端
     const socket = require('dgram')
     const socketclicnt = socket.createSocket('udp4')
     socketclicnt.send('hello', 12345, '127.0.0.1',()=>{
       socketclicnt.close()
     })
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26

tcp

tcp 模块是基于 net 模块实现的

  1. 基本使用

    # 服务端
    const net = require('net') //引用 net  模块
    const server = net.createServer(() => {
      console.log('有人连接了')
    })
    
    //监听地址端口
    
    server.listen(12345, '127.0.0.1')
    //net.createServer 内部结构
    //  function createServer(callback) {
    //    let s = new net.Server()
    //    s.on('connection', () => {
    //      console.log('有人连接了')
    //    })
    //    return s
    //  }
    
    # 客户端
    const net = require('net')
     /**
     * 1. new net.socket()
     * 2. net.createconnection('端口号','地址',回调)
     */
     net.createConnection(12345, '127.0.0.1', (data) => {
         console.log(data)
     })
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
  2. 数据的分包,当文件较大的时候数据会自动进程分包发送,这个时候会对文件的完整性有影响

  3. 网络传输过程中不仅仅有主题数据 还包括一些其他的数据信息,比如发送端的 IP 端口等等,方便接收者对数据进行处理和恢复 socket.remoteAddress,socket.remotePort 可以接受到客户端的地址和端口

  4. HTTP 是基于 tcp/ip 来实现的 IP 定位主机 端口定位软件 tcp 定义数据发送打包方式 传输方式。\

  5. http 协议请求分为 三部分

    • 请求行
      • method 请求方式 get post put delete
      • path-to-resolve url 统一资源定位符 基本格式 协议://主机地址[:端口]/资源路径/[?访问参数字段]#哈希标识 协议部分指定了传输方式, 主机部分如果需要用户名密码登录对应主机,可以 username:password@hostname,路径部分标识在主机上的路径或者地址,查询串,hash 信息片段,用于定位资源中的内容(锚点)
    • 请求头
    • 以及请求体
  6. http 相应也分为三部分

    • 相应行
      • 1 http 协议的版本号
      • 2 状态码 status-code
      • 3 message 状态码对应的描述
    • 响应头
      • 头信息
    • 响应体
  7. 消息头 允许客户端和服务器通过 request 和 response 来添加附加信息,一个请求头名称后添加一个冒号,,自定义的专用消息头可以使用 X-前缀来添加。

  8. 常用的头信息

    • content-type 实体的首部 发送内容的类型--遵循 MIME 类型标准 大类别/种类 例如 text/html application/pdf image/png application/X-gzip
    • content-length 实体的首部 发送内容的长度
    • location 响应的头 重定向的地址
    • cookie 请求头 包含要发送给服务器的 cookie
    • set-cookie 响应头 服务端发给客户端的 cookie
  9. 状态码 1.1 中规定了五类 1xx 请求已经被成功接受 2xx 成功 3xx 重定向 4xx 客户端错误 网络连接失败等等 5xx 服务器出错