一、TCP/IP
TCP/IP是互联网相关的各类协议族的总称。
1.TCP/IP的分层管理
TCP/IP协议族层次分别分为4层:应用层、传输层、网络层和数据链路层。
应用层:
决定了向用户提供应用服务时通信的活动。http协议也处于该层。
传输层:传输层对上层应用层,提供处于网络连接中的两太计算机之间的的数据传输。在传输层有两个性质不同的协议:TCP/UDP。
网络层:网络层用来处理在网络上流动的数据包。数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传送给对方。
链路层:
用于处理连接网络的硬件部分。包括控制操作系统、硬件的设备驱动、网卡及光纤等物理可见部分。
二、可靠的TCP协议
TCP位于传输层,提供可靠的字节服务。为了准确无误地将数据送达目标处,TCP协议采用了三次握手策略。而四次挥手,用来保障通讯双方可以安全的回收TCP通信的系统资源
1.三次握手
第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
2.四次挥手
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
三、http1.x协议
1.请求报文组成
请求报文是由请求方法、请求URI、协议版本、可选的请求首部字段和内容实体构成的。2.响应报文组成
3.报文首部字段
通用首部字段
请求首部字段
响应首部字段
实体首部字段:针对请求报文和相应报文的实体部分使用的首部
四、cookie、session和token
cookie和session的不同之处主要就是:cookie将数据保存在本地;session将数据保存在服务器上。
token主要用于获取用户信息。
五、https协议
http+传输内容加密+证书认证+完成性的保护 = https
https是在http通信接口部分使用了SSL和TLS协议来代替。通常,http直接和tcp通信,当使用了SSL时,则演变成先和SSL通信,再由SSL和TCP进行通信。简而言之https就是身披SSL协议这层外壳的HTTP。在采用SSL后,http就拥有了Https的加密、证书和完整性保护这些功能。
六、SPDY和http2协议
1.目前http1.x的问题
连接不可复用,每次连接需要3次握手;
线头阻塞问题,多个请求同时发起时后续请求需要等待前面的请求处理完成;
不能主动的push消息。
2.SPDY和http2
SPDY是Google牵头开源的一种协议,为的就是解决http1.x的问题。http2是在SPDY的基础上进行修改和改进。
http2是一种二进制协议。
多路复用:采用了多路复用的机制来解决http1.x的连接不可复用问题。多路复用允许同时通过单一的 HTTP/2 连接发起多重的请求-响应消息。
在http2中,服务器可以对客户端的一个请求发送多个响应。