基础篇 && HTTP篇 来自小林coding
TCP/IP五层模型
应用层
我们直接接触到的就是应用层,常见的HTTP、FTP、DNS、SMTP等协议就位于这一层。
应用层不需要关注数据是如何传输的。
传输层
大名鼎鼎的TCP和UDP就属于这个层次。
TCP,也就是Transmission Control Protocol,传输控制协议,提供可靠的字节流服务。
TCP拥有流量控制、超时重传、拥塞控制等特性,都是为了保障服务可靠而设置的。
网络层
IP协议所在的层次。
常用IP+子网掩码确定地址,注意CIDR,无分类域间路由。
网络接口层(也叫数据链路层)
这一层负责在以太网、WIFI这样的底层网络上发送原始的数据包,工作在网卡层次、用MAC地址标识网络上的设备。
物理层
这一层在小林Coding上没说,就是纯粹的物理上的链路。
总结
数据链路层的传输单位是帧(frame)、网络层单位是包(packet)、传输层单位是段(segment)、应用层单位是消息(message)。
浏览器输入一个网址到网页显示、期间发生了什么?
比如www.baidu.com 这里没有具体的路径名,这里没路径名,那就代表访问根目录下事先设置的默认文件,就是index.html
, 浏览器对URL进行解析之后,浏览器确定了Web服务器和文件名,接下来浏览器会自动根据这些信息来生成HTTP请求消息。 当然在这之前要走一遍DNS服务器把域名对应的IP解析出来。
通过DNS获取到IP之后,把HTTP的传输交给操作系统中的协议栈。
协议栈就把数据发送出去啦。
TCP
报文格式
TCP建立时要经理三次握手。
一开始,两边处于closed
状态.服务端主动监听某个端口,处于listen
状态. 客户端主动发起连接SYN
,之后客户端处于SYN_SENT
状态. 服务端收到发起的连接,返回SYN
,并且ACK
客户端的SYN
,此时服务端处于SYN_RCVD
状态. 客户端收到服务端的SYN
和ACK
之后,发送对SYN
确认的ACK
,之后处于established
状态. 服务端收到客户端的ACK
之后,也处于established
状态。 到这里为止就建立完毕了.
三次握手目的是保证双方都有发送和接收的能力。
IP报文
我们先看看 IP 报文头部的格式:
整个网络包的完整报文:
FCS:也叫Frame Check Sequence帧检验序列,使用的是CRC检验。
HTTP缓存技术。
HTTP缓存有哪些实现方式?
一种是强制缓存,浏览器会判断缓存是否过期,没过期的话就直接用本地缓存,这个是由浏览器自己决定是否缓存的。
强缓存是用Cache-Control
和Expries
两个字段来控制的。
前者是一个相对时间,后者是绝对时间,如果HTTP响应头同时有这两个字段,会优先用Cache-Control
来控制。
强制缓存的流程:浏览器访问服务器资源,同时在头部加上Cache-Control
,其中设置了过期时间,然后浏览器再次请求访问服务器中的资源时,会先计算是否过期,只有过期了才会重新请求服务器,否则直接使用缓存。 服务器再次接收到请求时,会再次更新Cache-Control
.
协商缓存
相比较于强制缓存,协商缓存是更温和的,某些请求的响应码是304,意思是告诉浏览器,可以使用本地缓存。