网络协议分层
经典五层模型
低三层
- 物理层
- 主要作用是定义物理设备如何传输数据
- 数据链路层
- 在通信的实体间建立数据链路连接
- 网络层
- 为数据在结点之间传输创建逻辑链路
传输层
-
向用户提供可靠的端到端(End-to-End)服务
-
传输层向高层屏蔽了下层数据通信的细节
应用层
-
为应用软件提供了很多服务
-
构建于TCP协议之上
-
屏蔽网络传输相关细节
http协议发展历史
HTTP/0.9
- 只有一个命令GET
- 没有HEADER等描述数据的信息
- 服务器发送完毕,就关闭TCP连接
HTTP/1.0
-
增加了很多命令
-
增加status code和header
-
多字符集支持、多部分发送、权限、缓存等
HTTP/1.1
-
持久连接
-
pipeline
-
增加host和其他一些命令
HTTP2
-
所有数据以二进制传输
-
同一个连接里面发送多个请求不再需要按照顺序来
-
头信息压缩以及推送提高效率的功能
HTTP三次握手
三次握手时序图
首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。
Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。
URI、 URL、URN
URI
Uniform Resource Identifier/统一资源标志符
用来唯一标识互联网.上的信息资源
URL
Uniform Resource Locator/统一资源定位器
http://user:pass@host.com:80/path?query=string#hash,此类格式的都叫做URL,比如ftp协议
URN
-
永久统一资源定位符
-
在资源移动之后还能被找到
-
目前还没有非常成熟的使用方案
HTTP报文
HTTP方法
-
用来定义对于资源的操作
-
常用有GET、POST等
-
从定义上讲有各自的语义
HTTP CODE
-
定义服务器对请求的处理结果
-
各个区间的CODE有各自的语义
-
好的HTTP服务可以通过CODE判断结果
使用nodejs实现一个最简单的服务器
const http = require("http");
http.createServer(function (req, res) {
console.log("request come", req.url);
res.end("123");
}).listen(8888);
console.log('server listening on 8888');