• nodejs学习笔记之网络编程


    了解一下OSI七层模型
     
    OSI层
    功能
    TCP/IP协议
    应用层
    文件传输,电子邮件,文件服务,虚拟终端
     TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet
    表示层
    数据格式化,代码转换,数据加密
    -
    会话层
    数据格式化,代码转换,数据加密
    -
    传输层
    提供端对端的接口
    TCP,UDP
    网络层
    为数据包选择路由
    IP,ICMP,RIP,OSPF,BGP,IGMP
    数据链路层
    传输有地址的帧以及错误检测功能
    SLIP,CSLIP,PPP,ARP,RARP,MTU
    物理层
     以二进制数据形式在物理媒体上传输数据
    ISO2110,IEEE802,IEEE802.2
     
    主要内容
    • TCP(传输控制协议)
    • UDP(用户数据包协议)
    • HTTP(超文本传输协议)
    • Websocket
    • 网络服务与安全(cryto tls https)
     
     
    TCP特征
     
    • 面向连接的协议 
    • 需要三次握手

     
    TCP服务实践(一)
     
    创建服务端:
    var net = require('net');
     
    var server = net.createServer(function(socket) {
        //新的连接
        socket.on('data', function(data) {
            console.log('服务端接收到客户端的消息:' + data.toString());
            socket.write('服务端回应:你好');
        });
        socket.on('end', function() {
            console.log('服务端断开连接');
        });
    });
     
    server.listen(8124, function() {
        console.log('TCP服务创建');
    });
     
    TCP服务实践(二)
     
    创建客户端:
     
    var net = require('net');
     
    var client = net.connect({port:8124}, function() {
        console.log('客户端连接成功');
        client.write('客户端发起问候:你好');
    });
     
    client.on('data', function(data) {
        console.log('客户端接收服务端消息:' + data.toString());
        client.end();
    });
     
    client.on('end', function() {
        console.log('客户端断开连接');
    });
     
    TCP服务的事件(一)
     
    • 服务器事件
      • listening:server.listen()
      • connection:net.createServer()
      • close:server.close()
      • error
     
     
    TCP服务的实践(二)
     
    • 连接事件
      • data:一端执行write(),另一端触发该事件
      • end:任意一端断开连接,触发该事件
      • connect:该事件用于客户端,当套接字服务端连接成功时触发
      • drain:当任意一端触发write(),当前这端会触发该事件
      • error:当异常发生时,触发该事件
      • close:当套接字结束时,触发该事件
      • timeout:当一定时间后连接不再活跃时,触发该事件
     
     
    TCP小结
     
    • 面向连接(建立通信线路:建立、使用、释放)
    • 三次握手(建立连接的过程)
    • nodejs实现(net模块)
     
    UDP特征
     
    • 无连接
    • 不可靠的信息服务
    • 在网络差的情况,丢包严重
    • 既可以客户端发送消息,又可以做服务端接收消息
    • 使用场景:对丢包要求不高的场景(音频、视频、DNS服务)
     
    UDP服务实践(一)
    创建服务端:
    var dgram = require('dgram');
     
    var server = dgram.createSocket('udp4');
     
    server.on('message', function(msg, rinfo) {
        console.log('服务端获取信息:'+msg+'来自:'+rinfo.address+':'+rinfo.port);
    });
     
    server.on('listening', function() {
        var address = server.address();
        console.log('服务端正在监听:'+address.address+':'+address.port);
    });
     
    server.bind(41234);
     
    UDP服务实践(二)
    创建客户端:
    var dgram = require('dgram');
     
    var client = dgram.createSocket('udp4');
     
    var message = new Buffer('我是客户端的消息');
    client.send(message, 0, message.length, 41234, '127.0.0.1', function(err, bytes) {
        console.log('客户端发送完成,关闭客户端');
        client.close();
    });
     
    UDP套接字事件
    • message:当UDP套接字侦听网卡端口后,收到消息时会触发该事件,携带Buffer对象和远程地址信息
    • listening:当UDP开始侦听时,触发该事件
    • close:调用close()方法时,触发该事件
    • error:当出现异常时,触发该事件,如果不处理,会使进程退出
     
     
    UDP小结
    • 面向无连接(不需要建立通信线路,把带有目的地址的包送到线路上)
    • 使用场景(对丢包要求不高,IP、UDP协议都是无连接的)
    • nodejs实现(dgram模块)
     
    HTTP特征
    • 建立在TCP之上的应用层协议
    • 经典的模式:B/S
    • 知名HTTP标准:RFC2616(W3C和IETF)
     
    HTTP服务实践(一)
    创建服务端:
    var http = require('http');
     
    http.createServer(function(req, res) {
        res.writeHead(200, {'Content-type': 'text/plain'});
        res.end('Hello world!
    ');
    }).listen(8000);
     
    console.log('服务器已开启');
     
    HTTP报文
    • 第一部分:经典的TCP三次握手 
     
    • 第二部分:客户端(curl)发送请求报文
     
    • 第三部分:服务器响应(包含响应头和响应体)
     
    • 第四部分:结束会话
     
     
     
    HTTP服务实践(二)
    创建客户端:
     
    var http = require('http');
     
    var options = {
        hostname: '127.0.0.1',
        port: 8000,
        method: 'GET',
        path: '/'
    };
     
    var req = http.request(options, function(res) {
        console.log('Status:'+res.statusCode);
        console.log('Headers:'+JSON.stringify(res.headers));
        res.setEncoding('utf-8');
        res.on('data', function(chunk) {
            console.log(chunk);
        });
    });
     
    req.end();
     
    HTTP服务的事件(一)
    • 服务端事件 
      • connection 
      • request
      • close
      • checkContinue
      • connect
      • upgrade
      • clientError
     
    HTTP服务的事件(二)
    • 客户端事件
      • response 
      • socket
      • connect
      • upgrade
      • continue
     
    HTTP小结
    • HTTP建立在TCP之上的协议
    • 客户端的请求可以通过模拟完成(curl、http_client.js、浏览器等)
    • nodejs实现(http模块)
     
    Websocket特征
    • 建立在http服务之上
    • 连接建立之后会upgrade至数据帧协议,进而实现服务端和客户端的交互
    • 全双工通信
     
    Websocket实例(socketio)
     
     
     
    Websocket小结
    • 全双工通信 
    • 创建http服务后会切换协议
    • nodejs实现(ws、socket.io模块)
     
    网络服务与安全
    安全连接的过程:
    • 根据数字证书进行认证
    • 进行加密传输
      • 交换公钥 
      • 客户端使用服务端的公钥进行加密
      • 服务端使用服务端私钥就行解密
      • 服务端使用客户端的公钥进行加密
      • 客户端使用客户端的私钥解密
     
     
    网络编程小结
    • 了解OSI七层模型
    • 重点学习传输层(TCP、UDP)和应用层(HTTP、Websocket)协议的nodejs实现
    • 初步了解网络传输安全
     
     
     
    参考资料:
    《深入浅出nodejs》--第七章网络编程
  • 相关阅读:
    【Linux编程】socket编程
    虚函数相关问题分析
    Android使用ShowcaseView加入半透明操作提示图片的方法
    好的Unix工具的九大启发
    Android ADB工具-截图和录制视频(五)
    (三)ng-app的使用困惑和angularJS框架的自己主动载入
    spark一些入门资料
    jQuery -> 怎样【先创建、再改动、后加入】 DOM元素
    centos平台openstack spice配置
    openstack 启用spice
  • 原文地址:https://www.cnblogs.com/xiaoheimiaoer/p/3934324.html
Copyright © 2020-2023  润新知