nodejs学习笔记之网络编程
|
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)
- 面向连接的协议
- 需要三次握手

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服务创建');
});
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('客户端断开连接');
});
- 服务器事件
- listening:server.listen()
- connection:net.createServer()
- close:server.close()
- error
- 连接事件
- data:一端执行write(),另一端触发该事件
- end:任意一端断开连接,触发该事件
- connect:该事件用于客户端,当套接字服务端连接成功时触发
- drain:当任意一端触发write(),当前这端会触发该事件
- error:当异常发生时,触发该事件
- close:当套接字结束时,触发该事件
- timeout:当一定时间后连接不再活跃时,触发该事件
- 面向连接(建立通信线路:建立、使用、释放)
- 三次握手(建立连接的过程)
- nodejs实现(net模块)
- 无连接
- 不可靠的信息服务
- 在网络差的情况,丢包严重
- 既可以客户端发送消息,又可以做服务端接收消息
- 使用场景:对丢包要求不高的场景(音频、视频、DNS服务)
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);
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();
});
- message:当UDP套接字侦听网卡端口后,收到消息时会触发该事件,携带Buffer对象和远程地址信息
- listening:当UDP开始侦听时,触发该事件
- close:调用close()方法时,触发该事件
- error:当出现异常时,触发该事件,如果不处理,会使进程退出
- 面向无连接(不需要建立通信线路,把带有目的地址的包送到线路上)
- 使用场景(对丢包要求不高,IP、UDP协议都是无连接的)
- nodejs实现(dgram模块)
- 建立在TCP之上的应用层协议
- 经典的模式:B/S
- 知名HTTP标准:RFC2616(W3C和IETF)
创建服务端:
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('服务器已开启');
- 第一部分:经典的TCP三次握手

- 第二部分:客户端(curl)发送请求报文

- 第三部分:服务器响应(包含响应头和响应体)

- 第四部分:结束会话

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();
- 服务端事件
- connection
- request
- close
- checkContinue
- connect
- upgrade
- clientError
- 客户端事件
- response
- socket
- connect
- upgrade
- continue
- HTTP建立在TCP之上的协议
- 客户端的请求可以通过模拟完成(curl、http_client.js、浏览器等)
- nodejs实现(http模块)
- 建立在http服务之上
- 连接建立之后会upgrade至数据帧协议,进而实现服务端和客户端的交互
- 全双工通信
- 全双工通信
- 创建http服务后会切换协议
- nodejs实现(ws、socket.io模块)
- 根据数字证书进行认证
- 进行加密传输
- 交换公钥
- 客户端使用服务端的公钥进行加密
- 服务端使用服务端私钥就行解密
- 服务端使用客户端的公钥进行加密
- 客户端使用客户端的私钥解密
- 了解OSI七层模型
- 重点学习传输层(TCP、UDP)和应用层(HTTP、Websocket)协议的nodejs实现
- 初步了解网络传输安全
nodejs学习笔记之网络编程的更多相关文章
- python学习笔记11 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- python学习笔记10 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- NodeJS学习笔记 (10)网络TCP-net(ok)
模块概览 net模块是同样是nodejs的核心模块.在http模块概览里提到,http.Server继承了net.Server,此外,http客户端与http服务端的通信均依赖于socket(net. ...
- NodeJS学习笔记 (9)网络服务-https(ok)
模块概览 这个模块的重要性,基本不用强调了.在网络安全问题日益严峻的今天,网站采用HTTPS是个必然的趋势. 在nodejs中,提供了 https 这个模块来完成 HTTPS 相关功能.从官方文档来看 ...
- NodeJS学习笔记 (8)网络服务-http-server(ok)
http服务端概览 创建server 几行代码搞定 var http = require('http'); var requestListener = function(req, res){ res. ...
- NodeJS学习笔记 (5)网络服务-http-req(ok)
原文:https://github.com/chyingp/nodejs-learning-guide 自己敲代码: 概览 本文的重点会放在req这个对象上.前面已经提到,它其实是http.Incom ...
- NodeJS学习笔记 (4)网络服务-http(ok)
原文:https://github.com/chyingp/nodejs-learning-guide 自己敲代码: http模块概览 大多数nodejs开发者都是冲着开发web server的目的选 ...
- 孙鑫MFC学习笔记14:网络编程
1.OSI 2.TCP/IP与OSI对应关系 3.Socket 4.客户机/服务器模式 5.Windows Sockets 6.套接字类型 7.面向连接的socket编程 8.面向无连接的socket ...
- JavaSE 学习笔记之网络编程(二十三)
端口: 物理端口: 逻辑端口:用于标识进程的逻辑地址,不同进程的标识:有效端口:0~65535,其中0~1024系统使用或保留端口. java 中ip对象:InetAddress. import ja ...
随机推荐
- eclipse指定启动时的jdk(xjl456852原创)
在eclipse安装目录中找到eclipse.ini 在第一行配置(即可启动按指定版本的jdk启动eclipse): -vm D:\soft\Java\jre8\bin\server\jvm.dll ...
- MyBatis配置解析
MyBatis配置文件解析(概要) 1.configuration:根元素 1.1 properties:定义配置外在化 1.2 settings:一些全局性的配置 1.3 typeAliases:为 ...
- Android ActionBar完全解析,使用官方推荐的最佳导航栏(下) .
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/25466665 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...
- mysql 中的数据类型
unsigned 既为非负数,用此类型可以增加数据长度! 例如如果 tinyint最大是127,那 tinyint unsigned 最大 就可以到 127 * ...
- Android Studio tips and tricks 翻译学习
Android Studio tips and tricks 翻译 这里是原文的链接. 正文: 如果你对Android Studio和IntelliJ不熟悉,本页提供了一些建议,让你可以从最常见的任务 ...
- 解决linux下oracle进入sqlplus环境中后退键显示^H、上下键无效与ctrl+l无法清屏等问题【weber出品必属精品】
习惯linux中上下键回退历史输入的人们肯定也希望sqlplus中也能实现相同的效果,可是不幸的是,sqlplus中不提供诸多方便的快捷键,这个时候我们就需要另外安装一个插件来实现这个想法. 这个插件 ...
- Java中构造方法的执行顺序
一.先执行内部静态对象的构造方法,如果有多个按定义的先后顺序执行:静态对象在构造的时候也是也先执行其内部的静态对象. 二.再调用父类的构造方法(父类还有父类的话,从最开始的基类开始调用),如果没有明显 ...
- 使用Flex 和 Red5开发简单视频直播功能
Flex 是一个高效.免费的开源框架,可用于构建具有表现力的 Web应用程序,这些应用程序利用Adobe Flash Player和Adobe AIR, 可以实现跨浏览器.桌面和操作系统.虽然只能使用 ...
- 关于毕设WiFi选型
毕设做基于WiFi的家庭灯光影音控制,现在主要是WiFi模块上的选型,自己选了ESP8266. 一开始是看到了机智云的内容,想尝试机智云.但是目前没有母版,不知道怎么下手. 接下来就先尝试通过通用类型 ...
- 快速搭建Android 开发环境-使用ADT Bundle
一.搭建Android开发环境 近日要学Android开发基础,就着手搭建Windows下的Android开发环境. 找了一些相关的博文参考,基本上都是要分别下载和安装JDK, Eclipse, An ...