近日在系统复习基础和算法,主要是看些经典,比如红宝书,labuladong的算法小抄,以及图解HTTP,这是图解HTTP系列笔记
Web和网络基础
TCP/IP协议族
不同操作系统之间的通信需要一种规则,这种规则就是协议。
与互联网相关的各类协议族的总称就是TCP/IP协议
TCP/IP的分层管理
TCP/IP协议族按层次分为4层:应用层,传输层,网络层和数据链路层
分层可以让改动更简单,设计也变得简单,应用只需考虑分派给自己的任务,而不需要弄清对方的传输线路
各层功能:
应用层
决定向用户提供服务时通信的活动
HTTP协议属于应用层
传输层
提供处于网络连接中的两台计算机间的数据传输。在传输层有2个性质不同的协议:TCP(Transmission Control Protocol传输控制协议)和UDP(User Data Protocol用户数据报协议)
网络层
处理在网络上流动的数据包。该层规定了传输路径,即在众多的选项中选择一条传输路线
数据链路层
处理连接网络的硬件部分
TCP/IP通信传输流
利用TCP/IP通信时,会通过分层顺序与对方通信。发送端从应用层往下走,接收端从链路层往上走,直到应用层
以HTTP为例:
在应用层发出HTTP请求
在传输层分隔数据(请求报文),并在报文上打上标记序号和端口号,最后转发给网络层
在网络层,增加作为通信目的地的MAC地址后转发给链路层
服务器接受到数据后,按序往上层发送,一直到应用层。当传输到应用层,才算真正接收到由客户端发送过来的HTTP请求。
发送端在层与层之间传输数据时,数据每经过一层就会被打上一个该层所属的首部信息。接收端在层与层之间传输数据时,数据的首部每经过一层就会被消去。这种把数据包装起来的做法叫做封装
IP协议
IP协议属于网络层。IP协议作用是把各种数据包传送给对方。要确保数据确实传送到对方需要满足各类条件。其中2个重要条件是IP地址和MAC地址
IP间的通信依赖MAC地址。在网络上,通信双方需要经过多台计算机中转才能连接到对方。中转时会利用MAC地址搜索下一个中转目标,这时会采用ARP协议解析MAC地址。IP协议就是一边中转一边传输数据。
TCP协议
TCP位于传输层,提供可靠的字节流服务。
可靠的传输服务是指,能够把数据准确地传输给对方
字节流服务是指,将大块的数据分割成报文段进行管理
TCP三次握手
为了确保数据能到达目标,TCP采用三次握手。过程中使用了TCP的标志:SYN和ACK。
- 发送端先发送一个带SYN标志的数据包给对方
- 接收端收到后,回传一个带有SYN/ACK标志的数据包表示确认
- 最后发送端回传一个带有ACK标志的数据包,代表握手结束
DNS协议
DNS位于应用层,提供域名到IP地址之间的解析服务
用户通常使用主机名或域名来访问对方的计算机,主机名或域名由字母和数字组成,易于记,IP地址是纯数字。计算机更擅长处理数字,所以要将域名转为IP地址。DNS协议就产生了,它可以通过域名查找IP地址,或者从IP地址反查域名
统一资源标识符
URI (Uniform Resource Identifier)
Uniform 统一的格式方便处理不同类型的资源
Resource 资源是可标识的任何东西
Identifier 标识符
URI就是由某个协议方案表示的资源的定位标识符。URI用字符串标识某一互联网资源,而URL表示资源的地点。URL是URI的子集。
URI的格式
- 绝对URI
- 绝对URL
- 相对URL 是从基本URI处指定URL
绝对URI的格式
使用绝对URI必须指定服务器地址
带层次的文件路径:指定服务器上的文件路径来定位特指的资源
查询字符串 :针对已指定的文件路径内的资源
请求报文
GET /index.htm HTTP/1.1
Host:hackr.jp
GET 请求方法
/index.htm 请求访问的资源对象,也叫请求URI
HTTP/1.1 协议版本
请求报文是由请求方法,请求URI,协议版本,请求首部(可选)和内容实体构成的
HTTP/1.1 200 OK //协议版本,状态码,用于解释状态码的原因短语
Date:Tue,10 Jul 2012 06:50:15 GMT//首部字段
Content-Length:362
Content-Type:text/html
<html>//资源实体的主体
响应报文由协议版本,状态码,用于解释状态码的原因短语,首部字段以及资源实体的主体构成
HTTP是不保存状态的协议
HTTP协议自身不保留之前一切的请求或响应报文信息。有些场景需要保存状态,比如,用户跳转到其他页面后继续保持登录状态,就引入了cookie。cookie配合HTTP协议可以管理状态
指定URI的方式:
- URI为完整的URI
GET http://hakr.jp/index.htm HTTP/1.1
-
在首部字段Host中写明网络或IP地址
GET /index.htm HTTP/1.1 Host:hackr.jp
HTTP1.1中可使用的方法
GET方法用来请求资源
POST用来传输实体的主体
PUT用来传输文件
HEAD获得报文首部,用于确认URI的有效性和资源更新的时间
OPTIONS 查询针对请求URI指定的资源支持的方法
CONNECT 要求在与代理服务器通信时建立隧道,实现用隧道下而已进行TCP通信,主要使用SSL和TLS协议把通信内容加密后经网路隧道传输
SSL:Secure Sockets Layer 安全套接层
TLS:Transport layer Security传输层安全
响应之后进入网络隧道
持久连接节省通信量
HTTP初始版本中,每进行一次HTTP通信就要断开一次TCP连接。这样,请求一份包含多张图片的HTML文档对应的Web页面会产生大量的通信开销
为了解决上述TCP连接的问题,HTTP1.1出现了持久连接,持久连接的特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态。
好处:
- 减少了TCP连接重复建立和断开所造成的额外开销,减轻了服务器端的负载
- HTTP响应速度更快,web页面的显示速度也相应提高
使用cookie的状态管理
HTTP是无状态协议,如果页面要求登录认证,那么每次跳转新页面都需要在请求报文中附加参数来管理登录状态
cookie交互过程:
- 客户端发送请求
- 服务器收到请求,生成cookie,在响应中添加cookie后返回
- 客户端在请求中添加cookie后发送请求
- 服务端检查cookie就可以识别客户端了