0%

IP-HTTP-DNS杂谈

  1. 用户键入网址并回车
  2. DNS解析出IP
  3. 建立传输层连接
  4. 向Web服务器发出HTTP请求
  5. Web服务器返回响应内容
  6. Web服务器关闭TCP连接(若请求头包含 Connection: keep-alive 则服务器此时不关闭TCP连接)

IP

IP,Internet Protocol Address,网络协议地址。通过IP地址标识互联网上的计算机,工作原理和邮件上的寄信地址类似。

现在的IP地址分为两种,示例:
 IPv4:192.168.1.1(局域网)
 IPv6:2001:db8:0:1234:0:567:8:1

由技术标准化组织IETF tools.ietf.org 制定IP协议公认标准。https://tools.ietf.org/html/rfc791
由IANA www.iana.org 负责管理和分配IP地址,一般是IANA把IP给ISP(网络服务提供商,如阿里云),然后ISP分配给个人(服务器)。

HTTP

HTTP是客户端和服务端之间请求和应答的通讯协议,是为了Web浏览器和Web服务器之间的通信而设计的一个应用层协议。
主要通过传输层协议TCP或者是TLS(加密的TCP)来发送。
http相对于https的缺点主要是被窃听被篡改,https基本原理见我去年的文章:
https://blog.csdn.net/u012628581/article/details/99441535

HTTP由万维网协会W3C和ietf共同制定的公认标准。 https://tools.ietf.org/html/rfc2616

支持HTTP协议的软件有:浏览器、web服务器软件、curl、wget,或是各个语言自己实现的库等等。
HTTP请求示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
GET / HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_16_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,ja;q=0.8,en;q=0.7
Cookie: BIDUPSID=331D37CA...

HTTP响应示例:

1
2
3
4
5
6
7
8
9
10
11
12
jun@192 ~ % curl -I https://www.baidu.com
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: private, no-cache, no-store, proxy-revalidate, no-transform
Connection: keep-alive
Content-Length: 277
Content-Type: text/html
Date: Mon, 10 Aug 2020 08:07:36 GMT
Etag: "575e1f5c-115"
Last-Modified: Mon, 13 Jun 2016 02:50:04 GMT
Pragma: no-cache
Server: bfe/1.0.8.18

DNS

DNS是将域名和IP地址相互映射的一个分布式数据库,全球有一千多台域名服务器在运行。
像百度、阿里、Google,都提供了公共DNS服务,就是DNS分布式数据库节点。
DNS系统是由各种DNS软件驱动的,如:BIND、OJBDNS、Dnsmasq等等,所以如果感兴趣,自己也可以用DNS软件搭建自己的DNS服务器。

参考

https://zh.wikipedia.org/wiki/IP%E5%9C%B0%E5%9D%80
https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE
http://www.blogjava.net/zjusuyong/articles/304788.html
https://www.cnblogs.com/wanghuaqiang/p/12093563.html
https://developer.mozilla.org/zh-CN/docs/Web/HTTP