5层网络模型
- 物理层主要作用是定义物理设备如何传输数据
- 数据链路层在通信的实体间建立数据链路连接
- 网络层为数据在结点之间传输创建逻辑链路
- 传输层(TCP/IP 和UDP)向用户提供可靠的端到端服务,传输层向高层屏蔽了下层数据通信的细节.
- 应用层(HTTP ,FTP)为应用软件提供了很多服务,http构建于tcp/ip协议之上,屏蔽了网络传输相关细节.
HTTP协议的发展历史
第一个版本是HTTP/0.9,只有一个命令GET,没有HEADER等描述数据的信息,服务器发送请求完毕就会关闭TCP连接.
第二个版本是HTTP/1.0,增加了很多命令(POST等),增加了status code和header,增加了多字符集支持,多部分发送,权限,缓存等.
第三个版本是HTTP/1.1,支持持久连接(长连接),增加了管道通信(pipeline),增加host和其他一些命令.
第四个版本HTTP2,所有数据以二进制传输,同一个链接里面发送多个请求不在需要按照顺序来处理,头信息压缩以及推送等提高效率的功能.
HTTP的三次握手
在1.1版本中一个HTTP连接是可以发送多次http请求的,好处是节省创建连接的时间(创建连接需要三次握手,耗时)
SYN=1表示这是一个创建请求的数据包.
Seq=X表示数据包的内容
ACK=上一个Seq+1
为什么需要三次握手
因为网络传输是由延时的,如果客户端发送连接请求后,服务端返回创建连接成功的数据包丢失,客户端因为有超时关闭连接的设置没有额外开销,但是服务端并不知道客户端没有收到数据包而关闭连接,因此会保留上一个连接使用的端口号造成浪费.因此第一次握手是为了发出创建连接的请求.第二次握手是为了回应客户端收到并接收连接,第三次握手是为了回应服务器收到创建连接成功的消息.
关闭连接的四次挥手
客户端 > 服务器 [FIN] 我要关闭连接了
服务器 >客户端 [ACK] 知道了,等我发完包先
服务器 >客户端 [FIN] 我发完了,我也关闭连接了
客户端 > 服务器 [ACK] 好的,知道了
URI、URL和URN
URI(Uniform Resource Identifier):统一资源标志符,用来唯一标识互联网上的信息资源。包括了URL和URN.
URL(Uniform Resource Locator):统一资源定位器。
URN:永久统一资源定位符。在资源移动之后还能被找到。
HTTP报文格式
请求头 :请求方法 路径 协议
创建一个最简单的web服务
使用node.js创建一个服务器:
const http= require('http')
http.createServer(function(requst,response){
console.log('request come',requst.url)
response.end('123')
}).listen(8888);
console.log('server listening 8888')