第六章 应用层
概括
应用层协议:每一个应用层协议都是为了解决某一类应用问题,问题解决依赖于不同主机中应用进程通信和协同工作,应用进程的通信应该遵循严格规则,应用层具体内容就是定义这些通信规则
应用层协议应当定义:
- 应用进程交换的报文类型,如响应报文和请求报文
- 各种报文类型的语法,如报文各个字段即详细描述
- 字段的语义,及字段中信息的含义
- 进程何时如何发送报文,及对报文响应的规则
应用层协议和网络应用不是同一种概念,应用层协议是网络应用一部分,万维网应用是一种基于客户/服务器体系的网络应用,万维网应用包含很多部分:万维网浏览器、万维网服务器、万维网文档格式标准、以及一个应用层协议。万维网的应用层协议是HTTP,它定义万维网浏览器和服务器之间传输的报文类型、格式、序列等规则,而万维网浏览器如何显示一个万维网页面,服务器是使用多线程还是单线程都不是HTTP定义的
6.1 域名系统DNS
域名系统是互联网使用的命名系统,用来将人们使用的机器的名字转为IP地址,DNS是分布式系统,单个计算机出问题不影响整个系统正常运行
任何一个连接在互联网上的主机/路由器都有一个唯一的层次结构的名字,即域名,每一个域名由标号序列组成,每个标号由点隔开,如mail(三级域名).cctv(二级域名).com(顶级域名),DNS规定,每一个标号不超过63个字符,标号中除了-不能用其他符号,不区分大小写,级别最高域名在右边,完整域名不超过255个字符,域名和IP地址不挂钩,只有映射关系
使用UDP,为了减少开销
顶级域名分三类:国家顶级域名、通用顶级域名、基础结构域名
- 根域名服务器:最高层域名服务器,所有根域名服务器都知道所有顶级域名服务器的域名和IP地址,不管是哪一个本地域名服务器若想要对任何一个域名进行解析(转化成IP地址),只要主机不能解析,就得首先求助于根域名服务器,根域名服务器告诉本地域名服务器下一步找哪个顶级域名服务器,假如所有根域名服务器瘫痪,整个DNS系统就不能工作,世界上有多个根域名服务器,一般主机都是就近找一个根域名服务器
- 顶级域名服务器:这些域名服务器管理对应的顶级域名下注册的所有二级域名,收到DNS请求给出相应回应(可能最后结构,也可能是对应下一步该找的域名服务器的IP地址)
- 权限域名服务器:负责一个区的域名服务器(区<=域)
- 本地域名服务器:不属于域名服务器层次结构,一台主机发出DNS查询请求时,请求报文发送到本地域名服务器那里,每个ISP、每个大学、甚至每个系都能拥有一个本地域名服务器,它记录本地ISP内所有域名对应的地址,当你查询的主机属于同一个本地ISP,可以直接返回IP地址,要是不能解析,他会向根域名服务器请求服务,如果之前有用户请求查询过那个域名,那个域名对应的IP地址会被缓存进高速缓存,则直接取出,不用向根域名服务器发出请求。
为提高可靠性,DNS域名服务器把数据负责到几个域名服务器中,其中一个叫主域名服务器(只能在主域名服务器中更改数据),其他为辅助域名服务器(定期从主域名服务器复制信息达到同步)
主机向本地域名服务器一般采用递归查询
本地域名服务器向根域名服务器查询一般使用迭代查询(本地域名服务器向多个域名服务器查询),但也可以递归查询(只进行一次查询)P259
不止本地域名服务器有高速缓存,主机也有,许多主机开机时会从本地域名服务器下载域名-IP地址映射数据库,并维护存放最近使用的域名
6.4 万维网WWW
URL:统一资源定位符
URL格式 : <协议>://<主机>:<端口>/<路径>
协议采用http协议,端口号默认80,通常可省略,忽略路径直接指到主页
HTTP协议定义浏览器怎么向万维网服务器请求万维网文档,服务器怎么把文档传给浏览器。
万维网网点都有一个服务器进程,它不断监听TCP的端口80,浏览器(即万维网客户)监听到连接建立请求并建立TCP连接后,浏览器向万维网服务器发起浏览每个页面请求,服务器返回所请求的页面作为响应,任何释放TCP连接浏览器和服务器的响应和交互都有按照一定格式和规则,这些格式和规则就是超文本传送协议HTTP
HTTP使用面向连接的TCP协议,保证数据可靠传输但是HTTP协议是无连接的,通信双方建立HTTP连接时不需要建立HTTP连接
HTTP协议是无状态的,同一个客户访问同一个服务器多次,服务器的响应的第一次一样,使服务器更容易支持大量HTTP请求。
TCP建立连接的三报文握手的第三次握手的报文中的数据就是客户对万维网文档的请求报文
HTTP/1.0的缺点,每请求一次文档就要有两倍RTT时间(因为发送完文档就断开TCP连接),若一个主页上很多链接的对象(比如图片)需要依次链接,每次链接下载都需要2*RTT的开销,而且每次建立新的TCP连接都需要分配缓存和变量
HTTP/1.1解决上方问题,它使用持续连接,万维网服务器发送响应后依然保持着连接,使浏览器和服务器依然能够在这条连接上传输后续的HTTP请求报文和响应报文
HTTP/1.1协议有两种工作方式
- 非流水线方式:必须等客户收到前一个响应后才能够发送下一个请求,客户每访问一个对象得耗费一个往返时间(HTTP/1.0由于要搭建连接所以耗费2RTT)
- 流水线方式:客户收到HTTP响应报文前能接着发送下一个请求报文,所请求报文是一个接一个到达服务器,服务器能够持续发送响应报文,所以客户访问所有对象只需要耗费一个往返时间。
代理服务器(在局域网上)/万维网高速缓存,服务器把最近请求和响应暂存本地磁盘,用户对它发送HTTP请求报文,若缓存中存放了对方,代理服务器直接返回响应报文
HTTP两类报文:请求报文、响应报文。
格式
- 开始行:用于区分是请求报文还是响应报文,响应报文开始行:版本、状态码、短语 。请求行开始行:方法(形容对请求对象要进行的操作,比如get/put/delete)、URL、版本
- 首部行:用于说明浏览器、服务器或报文主体一些信息(格式 首部字段名: 值: )
- 实体主体
状态码分为5大类
- 1xx:表示通知消息,请求收到了或正在处理
- 2xx:表示成功,如接受了或知道了
- 3xx:表示重定向,如要完成请求还需采取进一步行动
- 4xx:表示客户错误,请求中有错误的语法或不能完成
- 5xx:表示服务器的差错,比如服务器失效无法完成请求
Cookie
- 服务器为用户生成唯一识别码,以此为索引在服务器后端的数据库生成项目
- 然后在给A的响应报文添加一个叫Set-Cookie的首部行,值就是那个识别码,比如说 Set-Cookie:66546484sd989sfe
- A收到这个响应时,浏览器在它管理的特定Cookie文件中添加一行,其中包括服务器的主机名和Set-Cookie后的识别码
- 当A继续浏览那个网站,每发送一次HTTP请求报文,浏览器就会从其Cookie文件中取出这个文件的Cookie识别码,放到HTTP请求报文的Cookie首部行中 Cookie:66546484sd989sfe
(78条消息) 登录有关的session和cookie(后台)_weixin_33725270的博客-CSDN博客
服务器根据Cookie可以从自己设计的数据库中得到想要的数据,比如说是哪个用户,最近浏览了哪些商品等
6.6 动态主机配置协议DHCP
连接到计算机的协议软件需要配置:
- IP地址
- 子网掩码
- 默认路由器IP地址
- 域名服务器IP地址
IP地址不能在生产计算机时就分配,因为IP号包括网络号,网络号取决于计算机连接在哪个网络,可变动
动态主机配置协议DHCP提供一种机制,即插即用连网,计算机加入新的网络获取IP地址不要手手工参与
DHCP使用客户服务器方式,需要IP地址的主机启动时向DHCP服务器广播发送发现报文,目的IP地址全1,即255.255.255.255,源地址全0,即0.0.0.0,来找到DHCP服务器,本地网络所有主机都能够收到报文,只有DHCP服务器才回信,DHCP服务器先在其数据库查找该计算机的配置信息(可根据报文中携带的MAC地址来查找有没有相应的租约记录)来返回找到的信息,找不到,从IP地址池中找一个地址分配给计算机
路由器充当DHCP服务器中继代理
DHCP服务器提供给客户的IP地址是临时的,有租用期,租用期长度由DHCP决定