一次http的过程 以及https与http区别 DNS解析 以及相关问题

osi的七层模型及相关协议
1、物理层协议:EIA/TIA-232, EIA/TIA-499,V.35, V.24,RJ45, Ethernet, 802.3
2、数据链路层协议:Frame Relay,HDLC,PPP, IEEE 802.3/802.2
3、网络层协议:IP,IPX,AppleTalk DDP
4、传输层协议:TCP,UDP,SPX
5、会话层协议:RPC,SQL,NFS,NetBIOS,names,AppleTalk
6、表示层协议:TIFF,GIF,JPEG,PICT,ASCII,EBCDIC,encryption
7、应用层协议:FTP,WWW,Telnet,NFS,SMTP,Gateway,SNMP

一次http的过程
1.对www.baidu.com这个网址进行DNS域名解析,得到对应的IP地址
2.根据这个IP,找到对应的服务器,发起TCP的三次握手
3.建立TCP连接后发起HTTP请求
4.服务器响应HTTP请求,浏览器得到html代码
5.浏览器解析html代码,并请求html代码中的资源(如js、css图片等)(先得到html代码,才能去找这些资源)
6.浏览器对页面进行渲染呈现给用户

DNS域名解析
是域名到IP地址的映射,DNS解析请求采用UDP数据报且明文

DNS的工作原理
  1) 浏览器缓存
  当用户通过浏览器访问某域名时,浏览器首先会在自己的缓存中查找是否有该域名对应的IP地址(若曾经访问过该域名且没有清空缓存便存在);
  2) 系统缓存
  当浏览器缓存中无域名对应IP则会自动检查用户计算机系统Hosts文件DNS缓存是否有该域名对应IP;
  3) 路由器缓存
  当浏览器及系统缓存中均无域名对应IP则进入路由器缓存中检查,以上三步均为客服端的DNS缓存;
  4) ISP(互联网服务提供商)DNS缓存
  当在用户客服端查找不到域名对应IP地址,则将进入ISP DNS缓存中进行查询。比如你用的是电信的网络,则会进入电信的DNS缓存服务器中进行查找;
  5) 根域名服务器
  当以上均未完成,则进入根服务器进行查询。全球仅有13台根域名服务器,1个主根域名服务器,其余12为辅根域名服务器。根域名收到请求后会查看区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;
  6) 顶级域名服务器
  顶级域名服务器收到请求后查看区域文件记录,若无则将其管辖范围内主域名服务器的IP地址告诉本地DNS服务器;
  7) 主域名服务器
  主域名服务器接受到请求后查询自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确纪录;
  8)保存结果至缓存
  本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与web服务器建立链接
  
DNS解析查询方式?
递归查询,迭代查询
客户机向本地域名服务器查询是递归查询,本地域名服务器向其他域名服务器是迭代查询,

DNS解析存在哪些常见问题?
DNS劫持问题(DNS解析是udp数据报且明文,可能会有钓鱼服务器,会劫持到对应DNS请求,钓鱼服务器可能返回一个错误IP地址),DNS劫持转发问题(发送DNS请求时可能会把请求转发给其他服务器进行解析)

DNS劫持与HTTP的关系是怎么样的?
没有关系,DNS解析发生在HTTP建立连接之前,DNS解析请求使用UDP数据报

怎么解决DNS劫持?
1.httpDNS(使用HTTP协议向DNS服务器的80端口进行请求)
2.长连接(客户端和API Server中间建立长连Server,客户端和长连Server建立长连通道,长连Server和API Server通过内网专线进行http请求和响应)

三次握手四次挥手

三次挥手(建立连接)

第一次:建立连接时,客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次:服务器收到SYN包,向客户端返回ACK(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RCVD状态;
第三次:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据,也就是ESTABLISHED状态。
三次握手保证了不会建立无效的连接,从而浪费资源。

四次挥手(断开连接)

第一次: TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
第二次:服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
第三次:服务器关闭客户端的连接,发送一个FIN给客户端。
第四次:客户端发回ACK报文确认,并将确认序号设置为收到序号加1。

TCP流量控制
如果发送端发送数据太快,接收端来不及接收,可能会丢失数据。所以流量控制是让发送端不要发送太快,要让接收端来得及接收
流量控制是通过大小可变的滑动窗口实现的。
发送端窗口大小不能超过接收端窗口大小的值。TCP窗口单位是字节

HTTP请求报文
一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,
请求行分为三个部分:请求方法、请求地址和协议版本
请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。
请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据,这一行非常重要,必不可少。
请求数据
下面是一个POST方法的请求报文:

POST  /index.php HTTP/1.1    请求行
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/Content-Length:25
Content-Type:application/x-www-form-urlencoded  空行username=aa&password=1234  请求数据

HTTP响应报文
由三部分组成:状态行、消息报头、响应正文。

状态行
由3部分组成,分别为:协议版本,状态码,状态码描述。
其中协议版本与请求报文一致,状态码描述是对状态码的简单描述,所以这里就只介绍状态码。
状态码
状态代码为3位数字。
1xx:指示信息–表示请求已接收,继续处理。
2xx:成功–表示请求已被成功接收、理解、接受。
3xx:重定向–要完成请求必须进行更进一步的操作。
4xx:客户端错误–请求有语法错误或请求无法实现。
5xx:服务器端错误–服务器未能实现合法的请求。

响应头部
与请求头部类似,为响应报文添加了一些附加信息

响应数据
用于存放需要返回给客户端的数据信息。

TTP/1.1 200 OK  状态行
Date: Sun, 17 Mar 2013 08:12:54 GMT  响应头部
Server: Apache/2.2.8 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
//响应数据

timewait状态
首先调用close()发起主动关闭的一方,在发送最后一个ACK之后会进入time_wait的状态,也就说该发送方会保持2MSL时间之后才会回到初始状态。MSL值得是数据包在网络中的最大生存时间。产生这种结果使得这个TCP连接在2MSL连接等待期间,定义这个连接的四元组(客户端IP地址和端口,服务端IP地址和端口号)不能被使用。

TCP和UDP的区别
TCP为传输控制层协议,为面向连接、可靠的、点到点的通信;
UDP为用户数据报协议,非连接的不可靠的点到多点的通信;
TCP侧重可靠传输,UDP侧重快速传输。

https
HTTPS是在HTTP的基础上和SSL/TLS证书结合起来的一种协议,保证了传输过程中的安全性,减少了被恶意劫持的可能.很好的解决了解决了http的三个缺点(被监听、被篡改、被伪装)

https的过程
TLS与SSL在传输层对网络连接进行加密

在使用HTTPS是需要保证服务端配置正确了对应的安全证书
客户端发送请求到服务端
服务端返回公钥和证书到客户端
客户端接收后会验证证书的安全性,如果通过则会随机生成一个随机数,用公钥对其加密,发送到服务端
服务端接受到这个加密后的随机数后会用私钥对其解密得到真正的随机数,随后用这个随机数当做私钥对需要发送的数据进行对称加密
客户端在接收到加密后的数据使用私钥(即生成的随机值)对数据进行解密并且解析数据呈现结果给客户
SSL加密建立

学而不思则罔,思而不学则殆
原文地址:https://www.cnblogs.com/linyu51/p/15471193.html