Skip to content

基础篇 && HTTP篇 来自小林coding

TCP/IP五层模型

应用层

我们直接接触到的就是应用层,常见的HTTP、FTP、DNS、SMTP等协议就位于这一层。

应用层不需要关注数据是如何传输的。

传输层

大名鼎鼎的TCP和UDP就属于这个层次。

TCP,也就是Transmission Control Protocol,传输控制协议,提供可靠的字节流服务。

TCP拥有流量控制、超时重传、拥塞控制等特性,都是为了保障服务可靠而设置的。

网络层

IP协议所在的层次。

常用IP+子网掩码确定地址,注意CIDR,无分类域间路由。

网络接口层(也叫数据链路层)

这一层负责在以太网、WIFI这样的底层网络上发送原始的数据包,工作在网卡层次、用MAC地址标识网络上的设备。

物理层

这一层在小林Coding上没说,就是纯粹的物理上的链路。

image

总结

数据链路层的传输单位是帧(frame)、网络层单位是包(packet)、传输层单位是段(segment)、应用层单位是消息(message)。

浏览器输入一个网址到网页显示、期间发生了什么?

比如www.baidu.com 这里没有具体的路径名,这里没路径名,那就代表访问根目录下事先设置的默认文件,就是index.html, 浏览器对URL进行解析之后,浏览器确定了Web服务器和文件名,接下来浏览器会自动根据这些信息来生成HTTP请求消息。 当然在这之前要走一遍DNS服务器把域名对应的IP解析出来。

通过DNS获取到IP之后,把HTTP的传输交给操作系统中的协议栈。

image

协议栈就把数据发送出去啦。

TCP

报文格式

image

TCP建立时要经理三次握手。

image

一开始,两边处于closed状态.服务端主动监听某个端口,处于listen状态. 客户端主动发起连接SYN,之后客户端处于SYN_SENT状态. 服务端收到发起的连接,返回SYN,并且ACK客户端的SYN,此时服务端处于SYN_RCVD状态. 客户端收到服务端的SYNACK之后,发送对SYN确认的ACK,之后处于established状态. 服务端收到客户端的ACK之后,也处于established状态。 到这里为止就建立完毕了.

三次握手目的是保证双方都有发送和接收的能力。

IP报文

我们先看看 IP 报文头部的格式:

image

整个网络包的完整报文:

image

FCS:也叫Frame Check Sequence帧检验序列,使用的是CRC检验。

HTTP缓存技术。

HTTP缓存有哪些实现方式?

一种是强制缓存,浏览器会判断缓存是否过期,没过期的话就直接用本地缓存,这个是由浏览器自己决定是否缓存的。

强缓存是用Cache-ControlExpries两个字段来控制的。

前者是一个相对时间,后者是绝对时间,如果HTTP响应头同时有这两个字段,会优先用Cache-Control来控制。

强制缓存的流程:浏览器访问服务器资源,同时在头部加上Cache-Control,其中设置了过期时间,然后浏览器再次请求访问服务器中的资源时,会先计算是否过期,只有过期了才会重新请求服务器,否则直接使用缓存。 服务器再次接收到请求时,会再次更新Cache-Control.

协商缓存

相比较于强制缓存,协商缓存是更温和的,某些请求的响应码是304,意思是告诉浏览器,可以使用本地缓存。

wow!