文章目录
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需要证书,需要向机构购买;
在地址栏打入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服务器之间的交互属于迭代查询。