[计算机网络]-----第三章 应用层

1. DNS系统

​ IP地址难以记忆,所以出现了域名来一对一的对IP地址进行映射.

​ 在发送一个请求时,我们输入的是域名,然后与一台或多台DNS服务器进行访问,DNS服务器会将域名转化为对应主机的IP地址返回回来.然后我们的主机在使用得到的IP地址进行访问.

DNS 服务原理详解 - 简书

DNS 是一个树状的结构:

image-20200221133923029

在“根域”这里,只关心“一级域名”的情况,记录了如 com、net、org 这几个域名分区的负责人的信息。

(1). 两种查找模型

1). 层级递归查询

A -> B -> C -> D

A 问 B,B不知道,但 B 知道 C 知道,于是B问C,C也不知道,但C知道D知道。
逐级查询,逐级返回。

2). 迭代查询

A -> B
A -> C
A -> D

A 问 B,B不知道,但 B 知道 C 知道,于是A去问C,C也不知道,但C知道D知
道,于是A去问D。

真正的DNS查询使用的哪种模式? 互联网上的绝大多数查找模型都是迭代的。但 DNS 是递归+迭代的,是先递归,后迭代的。

(2). 真正域名查询的过程

真正域名查询的过程是: 先递归,后迭代。

比如当客户端查询 www.qq.com 的时候,不是直接去找根的,你想一下配置网络地址时,你的DNS服务器填写的是什么,一般是本地的一个服务器,可能是公司内部的一个服务器,如果公司没有,你的宽带运营商一定会提供一个DNS服务器地址。

在DNS的模型中,上级知道下级,但下级不知道自己的上级是谁,虽然知道自己在哪个域名内,但那个域名的管理者(服务器)是谁,其实是不知道的。

当我们请求域名解析时,把请求发送到本地的某个DNS服务器,如果是请求解析 “www.qq.com”,当DNS服务器要查询一个非本地管理的域名时,会去找“根”。每一个DNS服务器都预先设置了“根”的地址,大部分默认法则,它们仅知道”根”的IP地址,并不知道其他一级域名管理者的地址。

“根” 返回说查询的主机名归 com 管理,返回 com 的管理者地址,本地的DNS服务就去 com 的服务器进行查询。com 返回说归 qq.com 的二级域名管理者管理,于是本地DNS又去查询 qq.com 这个域名的管理者的域名服务器,最终得到 www.qq.com 的IP地址,返回给客户端。

==客户端到本地 DNS 这一步,是“递归查询”的方式,要求 DNS 服务器必须返回结果,只发出一次请求。DNS 服务器进行查询的方式,是“迭代查询”的方式,可能多次发起查询请求。==

2. HTTP协议

​ HTTP协议规定了浏览器如何向服务器请求资源和服务器如何向浏览器发送资源.

​ 服务器监听80端口,发现所有访问服务器的请求,一旦服务器监听到请求,并且成功建立连接,浏览器就可以发送HTTP请求报文,服务器接收到HTTP请求报文之后根据自身的逻辑准备资源,并将资源通过HTTP响应报文发送给客户端.最后释放TCP连接.

(1). HTTP的特点

  • 无状态:用一个客户两次访问服务器时服务器的HTTP响应是没有区别的.
    • 通过cookie使得HTTP请求可以记录信息,是记录在用户主机中的文本文件
  • 采用TCP协议作为传输层协议,但HTTP本身是无连接的

(2). HTTP报文结构

​ 分为请求报文和响应报文.

​ HTTP报文是面向文本的,因此报文中每一个字段都是ASCII码串

1574517235838

1). 请求行

​ 方法就是该请求要对资源进行的操作

  • GET:用于获取服务器中的资源

  • POST:用于创建一个资源

  • PUT:用于修改一个资源

  • DELETE:用于删除一个资源

    ​ 版本是HTTP协议的版本

2). 首部字段

​ 首部行(请求头,响应头)

使用Key:value的方式保存数据:

  • 字符集:Accept-Charset
  • 正文的格式:Content-Type
  • .
  • .
  • .

响应报文中的状态码就是404,500,200那一堆东西:

  • 1xx:通知信息,如请求正在处理等
  • 2xx:请求成功
  • 3xx:重定向
  • 4xx:客户出现差错
  • 5xx:服务器出现差错

3). 正文

​ 这部分放置要传输的数据(买什么,买多少)

3. HTTP请求的发送

​ HTTP协议是基于TCP协议的,通过二进制流将数据传给对方时,在TCP层会按照TCP协议把二进制流变成一个一个报文发送给对方.

​ 每发送一个报文段,都需要对方回应一个确认号ack,保证这个确认号之前的数据全部收到了.

​ TCP在发送每一个报文的时候,都需要加上源地址,源端口号,目标地址和目标端口号,将这些信息放入IP头中,交给IP层进行传输.

​ IP层需要查看目标地址是否和自己在一个局域网中,如果在,就发送ARP协议来请求这个目标地址对应的MAC地址,将源MAC地址和目标MAC地址放入MAC头,发送出去.

网络层的ARP协议工作原理:

网络层的ARP协议完成了IP地址与物理地址的映射。

首先,每台主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。

当源主机需要将一个数据包要发送到目的主机时,会首先检查自己ARP列表中是否存在该IP地址对应的MAC地址:如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。

此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

​ 如果不在一个局域网,需要将这个IP包发送到网关,先发送ARP协议请求网关的MAC地址,然后步骤和之前类似.

​ 一层一层的跳跃后,终于达到了目标地址的局域网,找到目标的MAC地址,然后发送出去.

​ 目标机器发现MAC地址符合,就将包收起来.发现IP地址符合,就拆包到TCP层.TCP层分发到指定端口后验证序列号,发现序号是不是当前需要的,如果是就返回一个ACK.如果不是,就丢弃包.

4. HTTP协议各个版本

参考博客:从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

(1). HTTP 0.9

​ 最原始的HTTP协议,每一个请求都要经历TCP连接的建立和断开.

​ 只有一个GET方法.只能回复HTML格式的字符串.

(2). HTTP 1.0

​ 任何格式都可以发送了(文字,图像,视频,二进制)

​ 加入了POST和HEAD方法

​ 加入了请求头,描述元数据

(3). HTTP 1.1

​ 引入了持久连接,也就是TCP连接默认是不关闭的,可以被多个HTTP请求复用.客户端和服务端一段时间没有互动后才会主动断开连接.

​ 引入了管道机制,在同一个TCP连接里面,可以同时发送多个请求.但请求的回复还是按顺序回复的.

(4). HTTP 2

​ 二进制协议,在之前HTTP 1.1版本的头信息是文本(ASCII编码),数据体可以使文本也可以是二进制.而HTTP 2之后,头信息和数据体都是二进制的.统称为帧.

​ 客户端可以同时发送多个请求或者回应,而且不用按照顺序一一对应.也就是异步性.为了实现这个功能,HTTP 2为每个数据包添加了唯一的编号,用编号来唯一对应请求包和响应包.

​ 头信息压缩.一方面,头信息使用gzip等方式压缩后再发送,另一方面客户端和服务端都会维护一个存储了头信息的表,所有字段都对应一个索引号.每次只发送其中的索引号.

5. HTTPS协议

​ 基于HTTP协议,通过SSL或者TLS提供加密处理数据,验证身份以及数据完整性保护.

​ 内容加密:采用混合加密技术,中间者不能查看明文内容

​ 验证身份:通过证书认证客户端访问的是自己的服务器.

​ 保护数据完整性:防止传出的内容被中间人冒充或修改

(1). SSL建立连接过程

  1. C端向S端发送请求,连接到S端的443端口.==发送的信息是随机值1和C端支持的加密算法==.
  2. S端收到信息后进行==响应==,包括==随机值2和匹配好的协商加密算法==,这个加密算法是==C端发过来所支持的算法的子集==.
  3. S端发送给C端第二个响应,是==数字证书==,数字证书必须要有一整套.可以自己制作也可以向组织申请(自己制作的证书会在客户端弹出不安全提醒).一整套证书其实就是一对==公钥和私钥==.传送的==证书是其中的公钥==.
  4. C端==解析证书==,这个工作是由客户端的TLS完成的.
    1. 首先会验证公钥是否有效
    2. 如果没问题,那么==生成一个随机值(预主密钥)==
  5. C端验证证书通过后,==通过随机值1,随机值2和预主密钥组装会话秘钥==.然后==通过证书的公钥加密会话秘钥==
  6. 传送加密信息==传输的是加密后的会话秘钥==,让==服务端通过解密得到随机值1,随机值2和预主密钥==
  7. 服务端==组装==出会话秘钥,应与客户端的会话秘钥一致
  8. 客户端通过会话秘钥==加密一条数据发送给服务端==,验证是否能正常接收消息
  9. 服务端通过会话秘钥==加密一条消息回传给客户端==,如果都能正常接收,那么表明SSL层连接建立完成

(2) 对称加密与非对称加密

​ 对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的==公钥进行加密==处理,对方接收到加密信息后,使用自己的==私钥进行解密==。

​ 由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354

推荐阅读更多精彩内容