了解一下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!\n');
}).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》--第七章网络编程

nodejs学习笔记之网络编程的更多相关文章

  1. python学习笔记11 ----网络编程

    网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...

  2. python学习笔记10 ----网络编程

    网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...

  3. NodeJS学习笔记 (10)网络TCP-net(ok)

    模块概览 net模块是同样是nodejs的核心模块.在http模块概览里提到,http.Server继承了net.Server,此外,http客户端与http服务端的通信均依赖于socket(net. ...

  4. NodeJS学习笔记 (9)网络服务-https(ok)

    模块概览 这个模块的重要性,基本不用强调了.在网络安全问题日益严峻的今天,网站采用HTTPS是个必然的趋势. 在nodejs中,提供了 https 这个模块来完成 HTTPS 相关功能.从官方文档来看 ...

  5. NodeJS学习笔记 (8)网络服务-http-server(ok)

    http服务端概览 创建server 几行代码搞定 var http = require('http'); var requestListener = function(req, res){ res. ...

  6. NodeJS学习笔记 (5)网络服务-http-req(ok)

    原文:https://github.com/chyingp/nodejs-learning-guide 自己敲代码: 概览 本文的重点会放在req这个对象上.前面已经提到,它其实是http.Incom ...

  7. NodeJS学习笔记 (4)网络服务-http(ok)

    原文:https://github.com/chyingp/nodejs-learning-guide 自己敲代码: http模块概览 大多数nodejs开发者都是冲着开发web server的目的选 ...

  8. 孙鑫MFC学习笔记14:网络编程

    1.OSI 2.TCP/IP与OSI对应关系 3.Socket 4.客户机/服务器模式 5.Windows Sockets 6.套接字类型 7.面向连接的socket编程 8.面向无连接的socket ...

  9. JavaSE 学习笔记之网络编程(二十三)

    端口: 物理端口: 逻辑端口:用于标识进程的逻辑地址,不同进程的标识:有效端口:0~65535,其中0~1024系统使用或保留端口. java 中ip对象:InetAddress. import ja ...

随机推荐

  1. 合天网安实验室学习笔记----Linux基础

    一.Linux的发展 linux kernel的版本是:2.6.32-279.el6.x86_64,此格式为:主版本.次版本.释出版本-修改版本 次版本为奇数:测试版: 次版本为偶数:稳定版: Lin ...

  2. 【每天一个Linux命令】19. 创建文件夹目录命令mkdir

    命令用途 mkdir 命令用来创建指定的名称的目录 使用说明 1.  创建目录的用户在当前目录中具有写权限 2. 指定的目录名不能是当前目录中已有的目录. 命令实例 0. 帮助文件 bixiaopen ...

  3. 使用Python,字标注及最大熵法进行中文分词

    使用Python,字标注及最大熵法进行中文分词 在前面的博文中使用python实现了基于词典及匹配的中文分词,这里介绍另外一种方法, 这种方法基于字标注法,并且基于最大熵法,使用机器学习方法进行训练, ...

  4. Oracle11gRAC安装

    安装Oracle RAC 一.硬件环境 ①用虚拟机搭建两台机器,操作系统都为: [root@node1 ~]# cat /etc/issue Red Hat Enterprise Linux Serv ...

  5. MySql按日期时间段进行统计(前一天、本周、某一天、某个时间段)

    在mysql数据库中,常常会遇到统计当天的内容.例如,在user表中,日期字段为:log_time 统计当天 sql语句为: select * from user where date(log_tim ...

  6. ubuntu14.04 + cocos2d-x-2.2.6 + eclipse发布android + Qt Creator4

    先把需要的东西准备好,打开控制台,执行以下语句: sudo apt--jdk lib32z1 lib32ncurses5 lib32bz2- 接下来,准备好cocos2d-x-2.2.6和 andro ...

  7. Android学习总结——强制下线功能(广播)

    最近一口气买了好几本书,其中Android的<第一行代码>觉得真心不错,学到这个内容,顺便做个总结,加深印象. 强制下线的基本思想就是在界面上弹出一个对话框,让用户必须点击确定按钮跳转到登 ...

  8. Linq中的多表左联,详细语句

    from m in context.WX_MemberCollectDish join d in context.Dish on m.DishID equals d.DishID into temp ...

  9. SqlBulkCopy的一个例子

    public bool InsertAll(IList<NewStockLuoPan> list) { DataTable dt = new DataTable(); dt.Columns ...

  10. linux虚拟机centos64位_6.5+VM10安装oracle11g图文详解

    注意: vi基本命令:i--编辑状态  退出编辑并保存时先按ESC键,再按符合“:wq”或者":x"即可注意每个步骤时的当前用户,是root还是oracle 以root用户登录虚机 ...