文章目录
IP、TCP、DNS协议
负责传输的IP协议
IP协议的作用是把各种数据包传送给对方。其中有两个最重要的条件是IP地址与MAC地址。
IP地址指明了节点被分配到的地址,MAC地址是指网卡所属的固定地址。IP地址可以和MAC地址进行配对。ARP是一种解析地址的协议,根据通信方的IP地址可以反查处对应的MAC地址。
下图为路由选择。
确保可靠性的TCP协议
TCP处于传输层,提供可靠的字节流服务。为确保数据能到达目标,TCP协议采用了三次握手策略,同时还有确认应答,重传超时,滑动窗口,流传输(窗口长度),快重传(三次重传),慢启动,拥塞窗口(慢启动阈值),普通恢复与快恢复,延迟应答,捎带应答等多种机制来保证流量与防止拥塞等问题。
负责域名解析的DNS服务
DNS(Domain Name System)服务是和HTTP协议一样位于应用层的协议,它提供域名到IP地址之间的解析。
用户通常使用主机名或域名来访问对方的计算机,而不是直接通过IP地址,但计算机需要IP地址,就由DNS协议提供该服务。
整个流程中各个协议的作用:
(1)DNS协议将主机/域名(hackr.jp)解析成对应的IP地址;
(2)HTTP协议将生成HTTP请求报文;
(3)TCP协议,将请求报文分割并可靠的传输给对方;
(4)IP协议,搜索对方的地址,一边中转一边传送;
(5)TCP协议:将请求报文重组,并发送回应用层;
(6)HTTP协议对请求的内容进行处理,并由服务器返回请求内容。
URI
URI用字符串来标识某处的互联网资源,而URL则是互联网资源的具体地址。
HTTP协议
HTTP是应用层协议,定义的是传输数据的内容的规范。HTTP的连接使用**“请求-响应”**方式。基于TCP协议传输,默认端口号是80。
通过请求和响应的交换达成通信
HTTP协议规定,由客户端发出请求,由服务端返回响应。
请求报文与响应报文
HTTP 协议和 TCP/IP 协议族内的其他众多的协议相同,用于客户端和服务器之间的通信。
请求报文是由请求方法、请求 URI、协议版本、可选的请求首部字段和内容实体构成的。
而响应报文是由协议版本,状态吗,状态吗的原因短语以及响应首部字段以及实体主体构成的。
HTTP是一种不保存的协议,HTTP 协议自身不具备保存之前发送过的请求或响应的功能。
HTTP协议通过URI定位互联网上的资源。
GET方法与Post方法
get方法:当客户端想要向服务器读取数据时使用GET, 指定的资源经服务器端解析后返回响应内容。get方法的参数通过URL传递,由于服务器对URL长度的限制,允许发送的数据量较小,且由于信息直接暴露在URL中,因此不能传递敏感信息。
post方法:当客户端给服务器提供信息较多时可以使用POST;POST会附带用户数据,一般用于更新资源信息;POST将请求参数封装在HTTP 请求数据中,可以传输大量数据,传参方式比GET更安全。
Cooike
Cookie 技术通过在请求和响应报文中写入 Cookie 信息来控制客户端的状态。当客户端第一次向服务端发送请求报文后,服务端会在响应保文中写入Cookie信息,当客户端第二次向服务端发送请求报文时,该报文中带有Cookie,服务端就可以通过该Cookie找到之前的状态信息。
返回结果的HTTP状态吗
状态码用于表示HTTP请求的返回结果、标记服务器端的处理是否正常、通知出现的错误。状态吗的类别如下。
1XX
1XX表示服务器已接收了客户端请求,客户端可继续发送请求。
2XX成功
2XX代表请求被正常处理了。
- 200 OK
表示从客户端发来的请求在服务器端被正常处理了。
- 204 No Content
该状态码代表服务器接收的请求已成功处理,但在返回的响应报文中不含实体的主体部分。
一般在只客户端往服务端发送消息,而对客户端不需要发送新消息内容时使用。(理解为post)
- 206 Partial Content
该状态码表示客户端进行了范围请求,而服务器成功执行了这部分的GET 请求。
3XX
表示服务器要求客户端重定向。
- 301 Moved Permanently
永久性重定向,该状态码表示当前URI所指向的资源已经被分配其他URI,在请求时应该使用新的URI。例如:当指定资源路径的最后忘记添加斜杠“/”,就会产生 301 状态码。
- 302 Found
临时性重定向,该状态码表示请求的资源已被分配了新的 URI,希望用户(本次)能使用新的 URI 访问。
- 304 Not Modified
**该状态码表示客户端发送附带条件的请求时,服务器端允许请求访问资源,但未满足条件的情况。**比如没有满足get的条件。
4XX客户端错误
4XX 的响应结果表明客户端是发生错误的原因所在,客户端请求的有非法内容。
1.400 Bad Request
该状态码表示请求报文中存在语法错误。
2.401 Unauthorized
该请求码代表发送的请求需要有HTTP认证,同时如果这是第二次发出401,则代表认证没有被通过。同时该请求码必须包含一个适用于被请求资源的 WWW.Authenticate首部用以质询(challenge)用户信息。
3.403 Forbidden
表示访问资源的请求被服务端禁止了。
4.404 Not Found
表示服务器无法找到请求的资源。
5XX 服务器端错误
表示服务器未能正常处理客户端的请求而出现意外错误。
1.500 Internal Server Error
表示服务端内部在处理请求时出现了错误。
2.503 Service Unavailable
表示服务器暂时处于超负荷或维护中,当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。
HTTP与HTTPs
在 HTTP 协议中有可能存在信息窃听或身份伪装等安全问题。使用HTTPS 通信机制可以有效地防止这些问题。
HTTP具有以下缺点:
(1)通信使用明文,内容可能会被窃听。
(2)不验证通信方的身份,因此有可能遭遇伪装。
(3)无法证明报文的完整性,所以有可能已遭篡改
HTTPS是披着SSL外壳的HTTP,它在通过HTTP与TCP通信之间先进行了SSL加密,可以说HTTPS就是实现了通信加密,身份验证,完整性保护的HTTP。
HTTP的报文使用明文(指未经过加密的报文)方式发送,而SSL会对报文内容进行加密。
HTTP协议中的请求和响应不会对通信方进行确认,会发生服务器是否就是发送请求中URI真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端的问题。而SSL中通过第三方向发送端与接收端发放的证书来识别身份。
HTTP协议中常用MD5和SHA-1等散列值校验的方式来确认文字的数字签名以防止内容篡改,但如果篡改者将MD5与SHA-1都改变了的话,就无法判断了。
除此之外,从端口来看:HTTP常用端口为80,而HTTPS的常用端口为443;
从资源来看:HTTPS由于加密和解密会消耗更多的CPU和资源;
从开销上来看:HTTPS需要证书,需要向机构购买;
Https的加密算法
1.共享密钥算法
解密和加密需要同一把秘钥的算法,在传输过程中需要传递秘钥。
2.公开秘钥算法
包括两把秘钥:公开秘钥与私有秘钥。发送秘钥的一方使用对方的秘钥对报文进行加密,对方收到后使用自己的私有秘钥解密。
Https安全通信(建立)的过程
1.客户端会首先向服务端发一个ClientHello,包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。
2.服务器会在可以进行SSL服务时,返回一个ServerHello,其中也是包含SSL的指定版本与加密组件
3.服务端会发送一个certificate,包含公开密钥的证书
4.服务端会发送Server Hello Done通知客户端的初始握手完成。
5.SSL第一次握手结束后,客户端会发送一个Client Key Exchange来作为回应。报文中包含一种随机密码串Pre-master secret,该报文已经通过公开秘钥进行加密。
6.客户端继续发生ChangeCipherSpec报文提示在此之后的报文都会通过Pre-master secret来加密;
7.客户端发送Finished报文
8.服务端同样返回ChangeCipherSpec
9.服务端返回Finished
10.当客户端与服务端的Finished报文交换后,说明SSL连接成功,之后客户端发送Http请求
11.服务端返回Http响应
12.由客户端断开连接,通过发送close_notify报文。
在地址栏打入URL会发生什么
1.浏览器首先通过DNS服务器将URL中的主机域名解析成IP地址;
2.浏览器(根据IP地址与80端口)向服务器请求建立TCP连接,通过三次握手与服务端建立联系;
3.服务器根据URL中的内容返回对应的html文件;
4.传输结束后,服务器通过四次挥手与客户端断开连接;
5.浏览器将html文件解析并显示出来。
DNS查询:
它首先去找本地的hosts文件,检查在该文件中是否有相应的域名、IP对应关系,如果有,则向其IP地址发送请求,如果没有,再去找DNS服务器。
浏览器客户端向本地DNS服务器发送一个含有域名www.cnblogs.com的DNS查询报文。本地DNS服务器把查询报文转发到根DNS服务器,根DNS服务器注意到其com后缀,于是向本地DNS服务器返回comDNS服务器的IP地址。本地DNS服务器再次向comDNS服务器发送查询请求,comDNS服务器注意到其www.cnblogs.com后缀并用负责该域名的权威DNS服务器的IP地址作为回应。最后,本地DNS服务器将含有www.cnblogs.com的IP地址的响应报文发送给客户端。
从客户端到本地服务器属于递归查询,而DNS服务器之间的交互属于迭代查询。
Http1.0,1.1,2.0的区别
Http1.0默认使用短连接,1.1使用长连接。
Http1.1相比1.0多加了一些响应头,如身份认证、状态管理和Cache缓存等。
Http2.0相比Http1.x
新的二进制格式:HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮,不同于HTTP1.x的解析是基于文本。
多路复用:连接共享,即每一个request都是是用作连接共享机制的
服务端推送:服务器主动向客户端推送消息。
HTTP的长连接和短连接本质上是TCP长连接和短连接。
短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
长连接:当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
优缺点:长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。在长连接的应用场景下,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,client端一般不会主动关闭它们之间的连接,Client 与 server 之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候 server 端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可 以避免一些恶意连接导致 server 端服务受损;如果条件再允许就可以以客户端机器为颗粒度,限制每个客户端的最大长连接数,