OSI模型
七层:
HTTP
超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于TCP/IP协议传输数据,互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。
HTTP首部字段
可分为4类型:
1.通用首部字段:请求报文和响应报文都会时候的首部
Cache-Control | 控制缓存行为 |
Connection | 逐跳首部、连接的管理 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Upgrade | 升级为其他协议 |
Warning | 错误调整 |
2.请求首部字段
Accept | 用户代理可处理的媒体类型 |
Accept-Charset | 优先的字符集 |
Accept-Encoding | 优先的内容编码 |
Except | 期待服务器的特定行为 |
From | 用户的电子邮箱地址 |
Host | 请求资源所在的服务器 |
If-Match | 比较实体标记(Etag) |
If-Modify-Since | 比较资源的更新时间 |
If-None-Match | 比较实体标记(与If-Match相反) |
Referer | 请求中URI的原始获取方 |
User-Agent | HTTP客户端程序的信息 |
3.响应首部字段
Age | 推算资源创建经过时间 |
Etag | 资源的匹配信息 |
Location | 令客户端重定向至指定URI |
实体首部字段
Allow | 资源可支持的HTTP方法 |
Content-Encoding | 实体主体适用的编码方式 |
Centent-Type | 实体主体的媒体类型 |
Expires | 过期日期时间 |
Last-Modify | 最后修改日期时间 |
常见头部字段:
Accept:通知服务器,用户代理能够处理的媒体类型及媒体
URI / URL:
URI:统一资源标识符,使用它就能够唯一地标记互联网上资源。
URL:统一资源定位符,俗称网址,URI的子集
URI 不仅包括 URL,还包括 URN(统一资源名称),它们之间的关系如下
DNS:
域名解析服务器 url->ip;
负载均衡技术:能够平衡服务器集群中所有的服务器和请求应用之间的通信负载,根据实时响应时间进行判断,将任务交由负载最轻的服务器来处理,以实现真正的智能通信管理和最佳的服务器群性能。
实现原理:在DNS服务器中为同一个主机名配置多个IP地址,在应答DNS查询时,DNS服务器对每个查询将以DNS文件中主机记录的IP地址按顺序返回不同的解析结果,将客户端的访问引导到不同的机器上面去,使得不同的客户端访问不同的服务器,从而达到负载均衡的目的。
DNS查询方法:递归/迭代
CDN:
CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
强缓存协商缓存:
1.强缓存:不会向服务器发送请求,直接从缓存中读取资源,在chrome控制台的network选项中可以看到该请求返回200的状态码;
2.协商缓存:向服务器发送请求,服务器会根据这个请求的request header的一些参数来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源;
强缓存
expires:response header里的过期时间,浏览器再次加载资源时,如果在这个过期时间内,则命中强缓存
Cache-Control:有几个常用字段
max-age 有效时间(相对值)
-no-cache:使用此指令目的是为了防止从缓存中返回过期的资源,不适用本地缓存。需要使用协商缓存,先与服务器确认返回的响应是否被更改,如果之前的响应中存在Etag,那请求的时候会与服务端验证,如果资源未被修改,可以避免重新下载
-no-store:直接禁止浏览器缓存数据,每次用户请求该资源,都会向服务器发送一个请求,每次都会下载完整的资源
-public:可以被所有用户缓存,包括终端用户和CDN等中间代理服务器
-private:只能被终端用户的浏览器缓存,不允许CDN等中继缓存服务器对其缓存。
TCP(传输控制协议 ) UDP(用户数据报协议)
UDP:无连接,可一对一单播,一对多广播
大小8k
TCP:一对一的链接,可靠,超时重传,只要不得到对方的确认,就重新发送数据包直到得到对方确认为止。
大小20k
- 窗口 :窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。
- 确认ACK:当ACK为1时确认号字段有效,TCP规定,在建立连接后所有传送的报文段都必须把ACK置1.
- 同步SYN:在建立连接时同步序列号
- 终止FIN:置1时,表示此方向发送方的数据已发送完毕,并要求释放连接
- 序号:用于对字节流进行编号,例如序号为301.携带的数据长度为100,那么下一个报文的序号应该为401
- 确认号:期望收到下一个报文段的序号,例如b收到a发送来的一个报文序号为501,长度为200,因此b期望收到a下一个发来的报文段序列号为701,所以b发送给a的确认报文中的确认号为701.
三次握手:
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接
客户端发送的连接请求如果在网络中滞留,那隔很长一段时间才能收到服务器发回的连接请求。客户端等待一个超时重传时间之后就会重新请求连接。但滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器会打开两个连接,第三次握手的作用就是让客户端忽略服务器发送的对滞留请求的确认,不进行第三次握手就不会再次打开连接。
滑动窗口
窗口是缓存的一部分,用来暂时存放字节流。发送方和接受方各有一个窗口,接收方通过TCP报文段中的窗口字段告诉发送方自己的窗口大小,发送发根据这个值和其他信息设置自己的窗口大小。
发送窗口内的字节都允许被发送,接受窗口内的字节都允许被接收。如果发送窗口左端的字节已经发送并且得到确认,那窗口就右移一定距离直到左部第一个字节不是已经发送并且确认的状态;接收窗口的滑动也类似。
流量控制
为了控制发送方发送速率,保证接收方来得及接收
接收方发送的确认报文中的窗口字段可以用来控制发送窗口大小,从而影响发送方发送速率。将窗口字段设置为0,则发送方不能发送数据。
拥塞控制
当网络出现拥塞,控制发送方的速率,这点跟流量控制很像,但流量控制是为了接收方来得及接收,而拥塞控制是为了降低整个网络的拥塞程度。
慢启动算法:
TCP、UDP区别:
1.TCP面向连接;UDP无连接
2.TCP提供可靠的服务,无差错,不丢失,不重复,按序到达;UDP尽最大努力交付,不保证可靠交付
3.UDP有较好的实时性,工作效率高于TCP,适用于高速传输和实时性要求较高的通信或广播通信。