计算机网络基础(3)

DNS

域名系统是因特网的一项服务。它作为将域名和 IP 地址相互映射的一个分布式数据库,
能够使人更方便的访问互联网。
DNS 使用 TCP 和 UDP 端口 53

任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名。
因特网的域名系统DNS被设计成一个联机分布式数据库系统,并采用CS方式。采用层次结构的命名树作为主机的名字。

许多应用层软件经常直接使用域名系统 DNS,但计算机的用户只是间接而不是直接使用域名系统

名字到 IP 地址的解析是由若干个域名服务器程序完成的。域名服务器程序在专设的结点上运行,运行该程序的机器称为域名服务器

因特网的域名结构

层次树状结构的命名方法:

… . 三级域名 . 二级域名 . 顶级域名  

clipboard.png

域名服务器

一个服务器所负责管辖的(或有权限的)范围叫做.每一个区设置相应的权限域名服务器,用来保存该区中的所有主机的域名到IP地址的映射.

根域名服务器是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和 IP 地址。
不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助于根域名服务器. 根域名服务器并不直接把域名直接转换成 IP 地址。在使用迭代查询时,根域名服务器把下一步应当找的顶级域名服务器的 IP 地址告诉本地域名服务器

本地域名服务器对域名系统非常重要。
当一个主机发出 DNS 查询请求时,这个查询请求报文就发送给本地域名服务器。

域名解析过程

主机向本地域名服务器的查询一般都是采用递归查询
本地域名服务器向根域名服务器的查询通常是采用迭代查询


HTTP

HTTP协议定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档以及服务器怎样把文档传送给浏览器。

从层次的角度,HTTP是面向事务的应用层协议。它是万维网上能够可靠地交换文件的重要基础。它使用TCP连接进行可靠的传送。 HTTP本身是无连接的。HTTP协议是无状态的。(同一个客户第二次访问同一个服务器上的页面时,服务器响应与第一次相同。)

(1) 怎样标志分布在整个因特网上的万维网文档? 
使用统一资源定位符 URL (Uniform Resource Locator)来标志万维网上的各种文档。 
使每一个文档在整个因特网的范围内具有唯一的标识符 URL。 

(2) 用何协议实现万维网上各种超链的链接? 
在万维网客户程序与万维网服务器程序之间进行交互所使用的协议,是`超文本传送协议 HTTP `
HTTP 是一个`应用层协议`,它使用 TCP 连接进行`可靠`的传送。

(3) 怎样使各种万维网文档都能在因特网上的各种计算机上显示出来,
同时使用户清楚地知道在什么地方存在着超链? 
超文本标记语言 HTML (HyperText Markup Language)使得万维网页面的设计者
可以很方便地用一个超链从本页面的某处链接到因特网上的任何一个万维网页面,
并且能够在自己的计算机屏幕上将这些页面显示出来。 

(4) 怎样使用户能够很方便地找到所需的信息? 
为了在万维网上方便地查找信息,用户可使用各种的搜索工具(即搜索引擎)。

每个万维网网点都有一个服务器进程,它不断地监听TCP的端口80,以便发现是否有浏览器向它发出连接建立请求。一旦监听到连接建立请求,就建立TCP。这之后,浏览器就像万维网服务器发出浏览整个页面的请求.服务器接着就返回所请求的页面作为响应。最后TCP连接就被释放了。

用户点击鼠标后所发生的事件

(1) 浏览器分析超链指向页面的 URL。
(2) 浏览器向 DNS 请求解析 www.tsinghua.edu.cn 的 IP 地址。
(3) 域名系统 DNS 解析出清华大学服务器的 IP 地址。
(4) 浏览器与服务器建立 TCP 连接
(5) 浏览器发出取文件命令:
      GET /chn/yxsz/index.htm。
(6) 服务器给出响应,把文件 index.htm 发给浏览器。
(7) TCP 连接释放。
(8) 浏览器显示“清华大学院系设置”文件 index.htm 中的所有文本。

HTTP 报文结构

HTTP有两类报文:
1. 请求报文 -- 从客户向服务器发出请求报文
2. 响应报文 -- 从服务器得到客户的回答

HTTP请求/响应报文都是由三部分组成,报文区别就是开始行不同。
1 开始行
请求报文 : 请求行(方法,url, 版本)

e.g. GET /chn/yxsz/index.htm http/1.1

响应报文: 状态行(版本,状态码,短语)

e.g. HTTP/1.1 202 Accepted {接受}

2 首部行

3 实体主体

cookie 作用

HTTP是无状态的,如果想让HTTP服务器和客户之间传递状态信息(用cookie传递客户),就需要用cookie.

使用 Cookie 的网站服务器为用户产生一个唯一的识别码。利用此识别码,网站就能够跟踪该用户在该网站的活动。

状态码

所有状态码的第一个数字代表了响应的五种状态之一。

1xx : 请求已经接受,需要继续处理。
2xx : 请求已经被服务器接收、理解
    200 OK
    请求已成功,请求所希望的响应头或数据体将随此响应返回。
3xx : 重定向
4xx : 客户端错误
    400 bad request 由于包含语法错误,当前请求无法被服务器理解。除非进行修改,否则客户端不应该重复提交这个请求。
    401 unauthorized 当前请求需要用户验证。
    403 Forbbiden 服务器已经理解请求,但是拒绝执行它。
    404 Not Found 请求失败,请求所希望得到的资源未被在服务器上发现。
    没有信息能够告诉用户这个状况到底是暂时的还是永久的
    405 Method Not Allowed 请求行中指定的请求方法不能被用于请求相应的资源。
    该响应必须返回一个 Allow 头信息用以表示出当前资源能够接受的请求方法的列表。
    鉴于 PUT,DELETE 方法会对服务器上的资源进行写操作,
    因而绝大部分的网页服务器都不支持或者在默认配置下不允许上述请求方法,
    对于此类请求均会返回 405 错误。
5xx : 服务器错误
    503 Service Unavailable
    由于临时的服务器维护或者过载,服务器当前无法处理请求。
    这个状况是临时的,并且将在一段时间以后恢复。
    如果能够预计延迟时间,那么响应中可以包含一个 Retry-After 头用以标明这个延迟时间。
    如果没有给出这个 Retry-After 信息,那么客户端应当以处理 500 响应的方式处理它。

    505 HTTP Version Not Supported
    服务器不支持,或者拒绝支持在请求中使用的 HTTP 版本。

HTTP SSL

Https 是一种基于SSL的Http,所有的http数据都是在SSL协议封装之上传输的,Https协议是在Http协议的基础上,添加了SSL握手以及数据加密传输,也属于应用层协议

传输层安全协议TLS 及其前身安全套接层SSL是一种安全协议,目的是为互联网通信,提供安全及数据完整性保障。在发送方,SSL 接收应用层的数据,对数据进行加密,然后把加了密的数据送往 TCP 套接字。在接收方,SSL 从 TCP 套接字读取数据,解密后把数据交给应用层。
clipboard.png

SSL/TLS 可以达到
1. 所有信息都是加密传播,第三方无法窃听
2. 具有校验机制,一旦被篡改,通信双发立刻发现
3. 配备身份证书,防止身份被冒充。

SSL/TLS 协议的基本过程是这样的:
(1) 客户端向服务器端索要并验证公钥
(2) 双方协商生成 "对话密钥"
(3) 双方采用 "对话密钥" 进行加密通信

上面过程的前两步 -- 即“握手阶段”
"握手阶段" 涉及四次通信。需要注意的是,"握手阶段" 的所有通信都是明文的.

clipboard.png

  1. 客户端发出请求(clientHello)
    客户端(浏览器)先向服务器发出加密通信的请求。
    客户端向服务器提供
    (1) 支持的协议版本,TLS1.0?
    (2) 一个客户端生成的随机数,稍后用于生成“对话密钥”
    (3) 支持的加密方法,RSA公钥加密
    (4) 支持的压缩方法
  2. 服务器回应(serverHello)
    (1) 确认使用的加密通信协议版本
    (2) 一个服务器生成的随机数,稍后用于生成“对话密钥”
    (3) 确认使用的加密方法,比如RSA公钥加密
    (4) 服务器证书
  3. 客户端回应
    客户端收到服务器回应后,首先验证服务器证书。如果证书不是可信机构颁布,或者证书中的域名与实际域名不一致,或者证书已经过期,就会向访问者显示一个警告,有其选择是否还要通信。

    如果证书没有问题,客户端就会从证书中取出服务器的公钥

    then 向服务器发送下面三个信息:
    (1) 一个随机数。用户服务器公钥加密,防止被窃听。
    (2) 编码改变通知。表示随后的信息都将用双方商定的加密方法和密钥发送。
    (3) 客户端握手结束通知,表示客户端的握手阶段已经结束。这一项同时也是前面发送的所有内容的 hash 值,用来供服务器校验。

    --- 一共使用了3个随机数,用来生成会话密钥。

  4. 服务器做出最后的响应
    服务器在收到客户端的第三个随机数pre-master key之后,计算生成本次会话所用的“会话密钥”。 然后向客户端最后发送下面的信息:
    (1)编码改变通知,表示随后的信息都将用双方商定的加密方法和密钥发送。
    (2)服务器握手结束通知,表示服务器的握手阶段已经结束。这一项同时也是前面发送的所有内容的 hash 值,用来供客户端校验。

    至此,整个握手阶段全部结束。接下来,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用 "会话密钥" 加密内容。


HTTP get/post区别

Http 定义了与服务器交互的不同方法,最基本的方法有 4 种,分别是 GET,POST,PUT,DELETE. HTTP 中的 GET,POST,PUT,DELETE 就对应着对这个资源的查 ,改 ,增 ,删 4 个操作。GET 一般用于获取 / 查询 资源信息,而 POST 一般用于更新 资源信息.

语义上: get是获取指定URL的资源,是读操作,无论对某个资源get多少次,它的状态是不会改变的。在这个意义上,我们说get是安全的(not 密码学意义/数据保护意义 上的安全)。 因为GET是安全的,所以get返回的内容可以被浏览器,cache服务器缓存起来。

post是对指定资源“追加/添加”数据,所以是不安全的,每次提交的post,参与的代码都会认为这个操作会修改操作对象资源的状态。

安全的是指没有明显的对用户有影响的副作用 (包括修改该资源的状态)。HTTP 方法里的 GET 和 HEAD 都是安全的。幂等的是指一个方法不论多少次操作,结果都是一样。PUT(把内容放到指定 URL),DELETE(删除某个 URL 代表的资源),虽然都修改了资源内容,但多次操作,结果是相同的,因此和 HEAD,GET 一样都是幂等的。

所以根据 HTTP 协议,GET 是安全的,也是幂等的,而 POST 既不是安全的,也不是幂等的。


想更一进步的支持我,请扫描下方的二维码,你懂的~!

图片描述

阅读 2.1k

推荐阅读
我们俩
用户专栏

学习笔记 ,分享与反思。互联网搬砖工

86 人关注
74 篇文章
专栏主页