以往相关文章:6.Python 爬虫 week2_睡觉特早头发特多的博客-CSDN博客
目录
0.应用层协议
在传输层之上,便是应用层,传输层协议是UDP。
报文和TCP报文段的数据部分就是应用层交付的数据。
不同类型的网络应用有不同的通信规则,因此应用层协议是多种多样的,比如DNS、FTP、Telnet、SMTP、HTTP、RIP、NFS等协议,都是用于解决其各自的一类问题。
本节课,主要介绍DNS、FTP、HTTP三个常用的应用层协议。
一、DNS
DNS(Domain Name Service 域名服务)协议基于UDP,使用端口号53。
由数字组成的IP地址很难记忆,所以我们上网使用网站IP地址的别名——域名,实际使用中,域名与IP地址是对应的,这种对应关系保存在DNS服务器之中。
在浏览器中输入一个域名之后,会有DNS服务器将域名解析为对应的IP地址。注意这和网络层的ARP协议的不同之处:DNS提供的域名是与IP地址的对应关系,而ARP提供的是IP地址和MAC地址的对应关系。
2.1DNS服务器
2.1.1域名服务器类型
DNS服务器是个分层次的系统:
(1)根DNS服务器:全世界共有13台根域名服务器,编号A到M,其中大部分位于美国。
(2)顶级(TLD)DNS服务器:负责如com、org、edu等顶级域名和所有国家的顶级域名(如中国大陆为.cn、中国香港为.hk,中国台湾为.tw,美国为.us、英国.uk、日本.jp)。
(3)权威DNS服务器:大型组织、大学、企业的域名解析服务。
(4)本地DNS服务器:通常与我们主机最近的DNS服务器。
2.1.2域名的层级关系
因特网采用层次树状结构的域名结构,域名的结构由若干个分量组成,各分量之间用“点”隔开,分别代表不同级别的域名。
有几个“.”就是几级,一般情况下,域名最好不超过五级,例如a.com是一级域名,而a.b.com则是二级域名,每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符(不包含最后一个. 点)。
级别最低的域名写在最左边,而级别最高的顶级域名写在最右边。域名系统既不规定一个域名需要包含多少个下级域名,也不规定每一级的域名代表什么意思。各级域名由其上一级的域名管理机构管理,而最高的顶级域名则由因特网名称与数字地址分配机构ICANN进行管理。
2.2域名解析方式
2.2.1背景
在互联网上有成千上万台计算机,为了能准确地访问其中某台计算机上的服务,在OSI七层模型的网络层中,通过IP地址来唯一标记每台主机在网络里的位置,我们都知道,IP地址是由32位的二进制数字组成的,比如:39.106.226.142。但是这些纯数字的IP地址太难记了,因而就出现了域名(比如csdn.net)这样便于人类记忆的地址符号。这相当于现实世界中城市的名称,如青岛市,IP地址则相当于邮局内部的编码,如266000,而域名解析就是将域名转换为IP地址的过程。机器在处理IP数据报时,并不是使用域名而是使用IP地址。这是因为IP地址长度固定,而域名的长度不固定,机器处理起来比较困难。
域名解析的过程,有迭代查询和递归查询两种方式:
2.2.2递归查询
如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户端的身份,向其他根域名服务器继续发出查询请求报文,即替主机继续查询,而不是让主机自己进行下一步查询。
假设图中的主机 (IP地址为m.xyz.com) 想知道域名y.abc.com的IP地址过程如下:
1、主机首先向其本地域名服务器进行递归查询。
2、本地域名服务器收到递归查询的委托后,也采用递归查询的方式向某个根域名服务器查询。
3、根域名服务器收到递归查询的委托后,也采用递归查询的方式向某个顶级域名服务器查询。
4、顶级域名服务器收到递归查询的委托后,也采用递归查询的方式向某个权限域名服务器查询。
当查询到域名对应的IP地址后,查询结果会在之前受委托的各域名服务器之间传递,最终传回给用户主机。
2.2.3迭代查询
当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP 地址,要么告诉本地服务器下一步应该找哪个域名服务器进行查询,然后让本地服务器进行后续的查询。
迭代查询过程如下:
1、主机首先向其本地域名服务器进行递归查询。
2、本地域名服务器采用迭代查询,它先向某个根域名服务器查询。
3、根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器的IP地址。
4、本地域名服务器向顶级域名服务器进行迭代查询。
5、顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器的IP地址。
6、本地域名服务器向权限域名服务器进行迭代查询。
7、权限域名服务器告诉本地域名服务器所查询的域名的IP地址。
8、本地域名服务器最后把查询的结果告诉主机。
整个查询过程共用到了8个UDP报文。
由于递归查询对于被查询的域名服务器负担太大,通常采用以下模式:从请求主机到本地域名服务器的查询是递归查询,而其余的查询是迭代查询。
2.2.4课堂练习
host www.baidu.com
host www.qust.edu.cn
host mirrors.aliyuncs.com
sudo tcpdump -vvv -X udp port 53
2.3DNS缓存和hosts文件
刚才DNS解析查询过程的图中,共发出了8份DNS报文,这是非常消耗时间的,所以实际应用上使用DNS缓存:当一个DNS服务器接收到一个DNS回答后,会将信息缓存一段时间,当再有一个对相同域名的查询时,便可直接回复。
通过DNS缓存,其实很多查询都只需要本地DNS服务器便可完成。
🧱:其实hosts文件可看作是一个小型的DNS服务器。
使用命令打开hosts文件:
sudo gedit/etc/hosts
查看文件内容,可以发现里面全是类似下图中的IP和域名对应记录:
在实际上网过程中,域名解析的优先顺序:先在DNS缓存查询,若没有找到记录,再查询hosts文件,若还没找到记录,再向DNS服务器发出DNS查询报文。
2.4DNS域名解析过程总结
浏览器缓存 => 系统hosts文件 => 本地DNS解析器缓存 => 本地域名服务器(本地配置区域资源、本地域名服务器缓存) => 根域名服务器 => 主域名服务器 => 下一级域名域名服务器 客户端 => 本地域名服务器(递归查询) 本地域名服务器 => DNS服务器的交互查询是迭代查询
2.5如何搭建DNS服务器
详情见菜鸟教程
二、FTP
FTP(File Transfer Protocol 文件传输协议),基于TCP,使用端口号20(数据)和21(控制)。
它的主要功能是减少或消除在不同操作系统下处理文件的不兼容性,以达到便捷高效的文件传输效果。
· FTP只提供文件传输的基本服务,它采用客户端-服务器的方式,一个FTP服务器可同时为多个客户端提供服务。
· 在进行文件传输时,FTP的客户端和服务器之间会建立两个TCP连接:21号端口建立控制连接,20端口建立数据连接。
· FTP的传输方式有两种:ASCII传输模式和二进制数据传输模式。
三、HTTP
3.1概况
HTTP(Hyper Text Transfer Protocol 超文本传输协议)基于TCP,使用端口号80或8080。
HTTP/HTTPS协议中常用的默认端口号_No8g攻城狮的博客-CSDN博客_https端口
每当我们在浏览器里输入一个网址或点击一个链接时,浏览器就通过HTTP协议将网页信息从服务器提取再显示出来,这是现在使用频率最大的应用层协议。
http是tcp/ip的一个子集,是一个简单的请求-响应协议。
静态资源没有后台数据库,不包含程序,不可交互的网页。 .html .js .css .gif .mp4 .url地址不含有?和 &;
动态网页资源,以数据库技术为支撑,可以实现很多功能,发给客户端的是程序的运行结果。
3.2原理
1.点击一个链接后,浏览器向服务器发起TCP连接;
2.连接建立后浏览器发送HTTP请求报文,然后服务器回复响应报文;
3.浏览器将收到的响应报文内容显示在网页上;
4.报文收发结束后,关闭TCP连接。
3.3HTTP报文的结构
HTTP报文会被传输层封装为TCP报文段,然后再被IP层封装为IP数据报。
HTTP通信过程包括客户端往服务器端发送请求以及服务器端给客户端返回响应两个过程。在这两个过程中就会产生请求报文和响应报文。
3.3.1什么是HTTP报文?
HTTP报文是用于HTTP协议交互的信息,HTTP报文本身是由多行数据构成的字符串文本。客户端的HTTP报文叫做请求报文,服务器端的HTTP报文叫做响应报文。
3.3.2HTTP报文由哪几部分构成?各部分都有什么作用?
HTTP报文由报文首部和报文主体构成,中间由一个空行分隔。 报文首部是客户端或服务器端需处理的请求或响应的内容及属性, 可以传递额外的重要信息。报文首部包括请求行和请求头部,报文主体主要包含应被发送的数据。通常,不一定有报文主体。
3.3.3HTTP报文首部的结构
由首部字段名和字段值构成的,中间用冒号“:”分割。
首部字段格式: 首部字段名:字段值。
例如,在HTTP首部中以Content-Type这个字段来表示报文主体的对象类型:Content-Type:text/html。上述的Content-Type是首部字段名,text/html是字段值,字段值可以是多个值例如:Keep-Alive:timeout=15,max=10。
3.3.4HTTP首部字段通常有四种类型
通用首部,请求首部,响应首部,实体首部。
**通用首部字段:**请求报文和响应报文两方都会使用的首部。
**请求首部字段:**从客户端向服务器端发送请求报文时使用的首部。补充了请求的附加内容、客户端信息、响应内容相关优先级等信息。
**响应首部字段:**从服务器端向客户端返回响应报文时使用的首部。补充了响应的附加内容,也会要求客户端附加额外的内容信息。
**实体首部字段:**针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等和实体有关的信息。
3.3.5HTTP报文结构图示
(1)开始行:用于区分是请求报文还是响应报文,请求报文中开始行叫做请求行,而响应报文中,开始行叫做状态行。在开始行的三个字段之间都用空格分开,结尾处 CRLE 表示回车和换行。
(2)首部行:用于说明浏览器、服务器或报文主体的一些信息。
(3)实体主体:请求报文中通常不用实体主体。
3.5.6常见状态码
6.Python 爬虫 week2_睡觉特早头发特多的博客-CSDN博客
请求报文的方法宇段是对所请求对象进行的操作,而响应报文的状态码是一个3位数字,分为 5类33种:
1xx 表示通知信息,如收到或正在处理。
2xx 表示成功接收。200
3xx 表示重定向。
4xx 表示客户的差错,如404表示网页未找到。
5xx 表示服务器的差错,如常见的 502 Bad Gateway,503 Service Unavailable服务不可用。
四、作业
具体内容见下一篇——实验篇
4.1实验报告
1.使用host命令查看常见网站的IP地址,使用tcpdump抓取DNS报文;
2.查看linux的hosts文件;
3.使用tcpdump抓取HTTP报文并解读;
ip address
cat/etc/resolv.conf
4.2浏览器解析html
参考文章:
多张图带你彻底搞懂DNS域名解析过程_林小鹿@的博客-CSDN博客_域名解析过程图
以阿里云为例: 域名解析详解_什刹海喝旺仔的博客-CSDN博客_解析域名
优质博主:DNS原理总结及其解析过程详解_老胡爱分享的博客-CSDN博客
域名解析过程详解_@Sup的博客-CSDN博客_域名解析过程
6、HTTP报文的结构_Slueia的博客-CSDN博客_http报文的构成
HTTP报文结构详解_张孟浩_jay的博客-CSDN博客_http报文结构
Http的报文结构_渐忘的歌的博客-CSDN博客_http报文结构