了解一下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. HTML5 拼图游戏

    点击之后被选中的切片会变为透明 源代码 点击打开链接

  2. phpcms:五、网站首页(index.html)

    1.经典案例:图文列表:{pc:content  action="position" posid="2" order="listorder DESC& ...

  3. Java 常调用的Webservice接口的方法

    WebService是基于Web的服务,WebService使用SOAP协议实现跨编程语言和跨操作系统平台,接收和响应外部系统的某种请求,从而实现远程调用.WebService采用HTTP协议传输数据 ...

  4. [Javascript] How to use JavaScript's String.replace

    In JavaScript, you can change the content of a string using the replace method. This method signatur ...

  5. 执行eclipse,迅速failed to create the java virtual machine。

    它们必须在一排,否则会出现The Eclipse executable launcher was unable to locate its companion shared library的错误 打开 ...

  6. UVALive 4043 Ants

    KM   构图求最小权值匹配 保证最小的权值,所连的边一定是能够不相交的. Ants Time Limit: 3000MS   Memory Limit: Unknown   64bit IO For ...

  7. c语言10个经典小程序

    [程序1] 题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. ...

  8. BGP

    http://network.51cto.com/art/200912/172439.htm http://blog.sina.com.cn/s/blog_b457dde80101cyqr.html ...

  9. Android 避免APP启动闪黑屏的解决办法(Theme和Style)

    前几天Boss就反应说,机器每次启动程序都会闪一下黑屏,这个客户不接受.没办法,只能想想怎么解决,最后找到了下面的方法.闪黑屏的原因主要是我们启动Activity的时候,需要跑完onCreate和on ...

  10. docke 网络配置2

    一,docker 的bridge模式是和vmware中的nat模式类似的,但是如果想要弄成和vmwae中的bridge怎么办呢? 说明,bridge模式获取的Ip是与宿主机的ip是出于同一个网段的. ...