DNS应用层协议
域名解析系统
使用IP地址,来描述设备在网络上的位置
IP地址并不适合来进行传播网站,就采用了域名的方式来解决网站传播的问题。如www.baidu.com这样类似的就很容易让人记住。其域名就直接代表了这个网站。而且有一套自动的系统会将域名解析为对应的IP地址。其是互相对应的。
早期的域名解析系统是由一个简单的文件来实现的。
hosts文件
其里面就有关于本机网络的IP地址和其域名
host文件来维护域名和IP地址的对应关系,非常不方便,需要不停的进行写于修改和删除
于是就有DNS系统的出现其由一群大佬搭建的一组服务器,他们将整理号的对应关系就存储在DNS中。
如果想要访问某个域名,就先给这个服务器发送请求,查询一下这个域名对应的IP地址,然后访问该IP地址。
后续如果增加新的域名和其对应关系只需要在该服务器中进行写不用在每个人的电脑里面进行修改
现在全球的网络设备都是以亿为单位的,这么多的网络设备如果同时去访问改服务器,服务器会不会因为请求量过多而崩溃
要解决这种问题这只能通过两种方法来解决
1.开源
搭建DNS服务器的人号召有能力的网络运营商来搭建相同功能的DNS镜像服务器,其数据从他们这里来进行同步。此时就会减少很多访问,人们就可以选择距离自己比较近的服务器来进行转化。
2.节流
让请求量变小,让每个上网的设备,进行本地缓存,比如电脑如果一天多次要访问www.baidu.com
那就第一次让其去访问DNS服务器,第一次访问之后就在本地留下缓存,然后以后无论多少次直接访问本地缓存保留的信息来直接进行访问
HTTP
http的报文格式,分为两个部分来看待一个是请求,一个是响应。HTTP协议是一种一问一答结构模型的协议。目前HTTP最新的版本应该是HTTP/3.0,大规模使用的应该是/1.1
注
一问一答(访问网站)
多问一答(上传文件)
一问多答(下载文件)
多问多答(串流/远程桌面)
我们如何来查看HTTP请求和响应的格式
抓包
使用抓包软件时,当电脑中的浏览器加载网页时,抓包软件内部会出现许多包。
如上图当我进入B站时器左边列表会出现许多包和B站有关的右上是请求,右下是响应。
仔细观察列表左边会发现进入一个网页不是只和服务器进行一次操作,而是进行多次操作。
我们关注右边的请求和响应时,点击Raw来关注最原始的数据格式。
HTTP协议是文本格式的协议(里面都是字符串)
以前学过的TCP,UDP都是二进制协议
HTTP响应是文本的.可以直接查看,往往能看到二进制的数据.(压缩后的)
HTTP响应经常会被压缩.压缩之后,体积变小,传输的时候,节省网络带宽.
解压随和压缩需要消耗额外的CPU和时间
解压随之后右下的响应的乱码数据变成了文本格式
如图所示
请求
1.首行有三个部分信息
1)GET ,HTTP请求的"方法"
2)URL 唯一资源描述符.描述一个资源在网络上的位置
3)版本号 HTTP/1.1
2.请求头
是一个键值对结构的数据.(有很多键值对)每个键值对,都是独占一行的.
键和值之间,使用:空格来区分
这里的键值对都是属于"标准规定"的.
3.空行
请求头的结束标记
4.正文
有的HTTP请求有,有的没有
响应
1.首行
1)版本号 HTTP/1.1
2)状态码(200) 描述了请求的结果
3)状态码描述(ok)
2.响应头
也是键值对结构(有多个键值对)每个键值对独占一行.
键和值之间使用:空格来区分.
键值对也是"标准规定"的
3.空行
响应头的结束标记
4.正文
正文里的内容可能比较长,可能是多种格式.
HTML,CSS,Js, JSON,XML,图片,字体,视频,音频...
上述提到的URL是计算机中一个非常重要的概念。
不仅在HTTP中涉及到,当初在数据库中连接JDBC时也涉及到
setUrl("jdbc:mysql://127.0.0.1:3306/java?characterEncoding=utf8&useSSL=false");
如图
服务器地址:是(一般域名多)域名,也可以是IP地址
服务器端口号:通过IP地址,只是描述了网络资源在哪个主机上(一个主机可能有很多服务器程序),使用端口号来区分是哪个程序。
url中的端口号有时可以省略.
对于http请求,端口号省略,默认是访问80端口(浏览器给一个默认值)
对于https请求,端口号省略,默认是访问443端口
带层次的文件路径:描述了你要访问服务器的哪个资源(一个服务器提供的资源可能不止一个)
/dir/index.htm
写法是一个看起来像"目录"写法
实际中,在服务器中不一定是以目录的形式来存储资源的
数据可能是硬盘的数据,也可能是内存的数据,也可能是通过网络访问其他服务器拿到的数据,还可能是通过cpu计算出来的一些数据
查询字符串( query string ):是一种键值对结构的数据.以?开头的)键值对之间,使用&来分割。键和值之间使用=来分割。一个url中的 query string 里可以包含N个键值对.甚至可能很长
http://日照东港区大学城:88/冒菜/菜都来一份?香菜=少放\&辣椒=中辣
query string就是对这次请求内容的一个补充
**片段表示符:**有的网页内容比较长。就可以分成多个"片段",通过片段标识符,就可以完成页面内部的跳转。
注:
对于query string来说,如果value部分要包含一些特殊符号的话,往往需要进行urlencode操作.
如?query=C%2B%2B&
其中的2B是+的意思。urlencode本质上是一种"转义字符"。+的ascii就是2B,在前面加上%表示这是转义的结果.