一、网络协议HTTP、TCP
HTTP:HyperText Transfer Protocol,超文本传输协议
TCP:Transmission Control Protocol,传输控制协议
1、HTTP的工作原理:
HTTP 协议采用请求/响应模型。客户端向服务器发送一个请求报文,服务器以一个状态作为响应。
以下是 HTTP 请求/响应的步骤:
1、客户端连接到web服务器:HTTP 客户端与web服务器建立一个 TCP 连接;
2、客户端向服务器发起 HTTP 请求:通过已建立的TCP 连接,客 户端向服务器发送一个请求报文;
3、服务器接收 HTTP 请求并返回 HTTP 响应:服务器解析请求,定位请求资源,服务器将资源副本写到 TCP 连接,由客户端读取;
4、释放 TCP 连接:若connection 模式为close,则服务器主动 关闭TCP 连接,客户端被动关闭连接,释放TCP 连接;若
connection 模式为keepalive,则该连接会保持一段时间,在该 时间内可以继续接收请求;
5、客户端浏览器解析HTML内容:客户端将服务器响应的 html 文 本解析并显示;
例如:在浏览器地址栏键入URL,按下回车之后会经历以下 流程:
1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应 的 IP 地址;
2、解析出 IP 地址后,根据该 IP 地址和默认端口 80或443,和服务器建立 TCP 连接;
3、浏览器发出读取文件(URL 中域名后面部分对应的文件) 的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;(若在https下会有12个包,SSL握手有8个包)
4、服务器对浏览器请求作出响应,并把对应的 html 文本 发送给浏览器;
5、释放 TCP 连接;
6、浏览器将该 html 文本并显示内容;
2、HTTP、HTTPS之间的区别
| 区别 | HTTP | HTTPS |
|---|---|---|
| 证书 | 不需要 | 需要ca申请证书,一般免费证书较少,因而需要一定费用 |
| 传输方式 | 明文传输 | ssl加密传输协议 |
| 端口 | 80 | 443 |
| 连接 | 简单,无状态 | SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 |
| 页面响应 | 速度快,HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包 | 速度慢, HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。 |
3、三次握手,四次挥手
TCP:说到TCP,不得不讲的就是传说中的三次握手,四次挥手。
ACK:确认序号的标志,ACK=1表示确认号有效,ACK=0表示报文不含确认序号信息
SYN:连接请求序号标志,用于建立连接,SYN=1表示请求连接
FIN:结束标志,用于释放连接,为1表示关闭本方数据流
1、建立连接的三次握手:

握手之前主动打开连接的客户端结束CLOSED阶段,被动打开的服务器端也结束CLOSED阶段,并进入LISTEN阶段。随后开始"三次握手":
第一次握手:客户端发送syn包(syn=x)的数据包到服务器,并进入SYN_SENT状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RCVD状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
2、关闭连接的四次挥手:

第一次挥手:客户端发出释放FIN=1,自己序列号seq=u,进入FIN-WAIT-1状态
第二次挥手:服务器收到客户端的后,发出ACK=1确认标志和客户端的确认号ack=u+1,自己的序列号seq=v,进入CLOSE-WAIT状态
第三次挥手:客户端收到服务器确认结果后,进入FIN-WAIT-2状态。此时服务器发送释放FIN=1信号,确认标志ACK=1,确认序号ack=u+1,自己序号seq=w,服务器进入LAST-ACK(最后确认态)
第四次挥手:客户端收到回复后,发送确认ACK=1,ack=w+1,自己的seq=u+1,客户端进入TIME-WAIT(时间等待)。客户端经过2个最长报文段寿命后,客户端CLOSE;服务器收到确认后,立刻进入CLOSE状态。
通俗理解就是:
三次握手:

四次挥手:

3、为什么建连接三握手,关连接要四挥手?
三次握手时,服务器同时把ACK和SYN放在一起发送到了客户端那里
四次挥手时,当收到对方的 FIN 报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方是否现在关闭发送数据通道,需要上层应用来决定,因此,己方 ACK 和 FIN 一般都会分开发送。