网络协议(一)

协议的三要素:

源文件 -> 词法分析 ->语法分析 -> 语义分析 -> 代码生成 -> 目标文件

语法,就是这一段内容要符合一定的规则和格式。例如,括号要成对,结束要使用分号等。

语义,就是这一段内容要代表某种意义。例如数字减去数字是有意义的,数字减去文本一般来说就没有意义。

顺序,就是先干啥,后干啥。例如,可以先加上某个数值,然后再减去某个数值。
这就是计算机语言,教给计算机完成你的工作

那么网络协议,是教给所有机器,共同完成一件事情

HTTP/1.1 200 OK
Date:Tue,27 Mar 2018 15:50:26 GMT
Content-Type: text/html;charset=UTF-8
Content-Language:zh-CN
<!DOCTYPE html>
<html>
<head>
<base href="https:pages.kaola.com/"/>
<meta charset="utf-8"/><title>网易考拉3周年主会场</title>

这个符合协议的三要素
首先是符合语法,只有安装上面格式来,浏览器才认,例如,上来是状态,然后是首部,然后是内容.
第二,符合语义,按照约定的意思来,例如,状态200,表述网页成功返回.
第三,符合顺序,一点浏览器,就发送出一个HTTP请求,然后才有上面HTTP返回的东西
DNS 原理简析
背景:
域名系统 DNS (Domain Name System ): 作为域名和 IP 地址相互映射的一个分布式数据库,通过 DNS 可以将域名迅速解析为对应的 IP 地址,从而方便我们访问 Internet 上的任意一台主机(或网站)。

CDN(Content Delivery Network): 其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。

HTTPDNS: 使用 HTTP 请求来模拟 DNS 请求

DNS 原理
DNS 服务器类型:

内部 DNS :位于内网中,提供内网 DNS 服务,也具备 Internet DNS 缓存与转发能力
外部 DNS:位于 Internet 中,提供 Internet 的 DNS 服务(包括 DNS 缓存与转发)
主 DNS:提供 DNS 服务(包括查询,缓存写入)
辅 DNS:只提供 DNS 查询服务,与主 DNS 同步数据库
唯缓存 DNS:自身不具备 DNS 解析能力,但具有 DNS 缓存数据库
转发 DNS:具备转发特性,能将 DNS 请求转发给其他 DNS 服务器
权威 DNS: 自身数据库中存在与 DNS 请求相对应的映射
非权威 DNS:不存在相对应的映射,而存在对应缓存查询结果
本地 DNS: 即在主机的 DNS 设置值

域名组成: [ 主机名 ].[ 二级域名 ].[ 顶级域名 ],因此可以根据域名来在 树形结构 中找到一条从根到叶的路径,叶节点即是权威 DNS
这里写图片描述
DNS 服务器的功能:

权威 DNS,自身具备解析能力
转发 DNS
缓存 DNS
在由路由器组成的局域网中,本地 DNS 设置为自动获取(路由器),路由器 DNS 设置为(ISP 提供的 DNS),主机通过浏览器访问 http://www.jianshu.com 时 DNS 请求-响应情况:
这里写图片描述

“`
上图的文字描述如下:
1. 192.168.110.252 在浏览器访问 http://www.jianshu.com
2. 192.168.110.252 检查本地 hosts 文件中是否存在 www.jianshu.com 对应的 IP
3. 若无,192.168.110.252 继续检查本地 DNS 缓存中是否存在 www.jianshu.com 对应的 IP
4. 若无, 192.168.110.252 向本地 DNS 服务器发起 DNS 查询请求
5. 路由器接收到 DNS 查询请求后,检查路由器 DNS 缓存
6. 若无,路由器以外网地址 202.202.202.202 向本地 DSN 服务器 (ISP DNS)发起 DNS 查询请求
7. ISP DNS 接收到 DNS 查询请求后,发现自己不是权威 DNS ,且无对应的缓存数据,于是将请求转发给 其他 DNS 服务器 :happy:
8. 其他 DNS 服务器 接收到请求后,一样发现自己不是权威 DNS,且无对应的缓存数据,于是开始进行 DNS 迭代查询:将请求发送给 根域名服务器
9. 根域名服务器 接收到请求后,将 顶级域名服务器 (.com) IP 发送给 其他 DNS 服务器
10. 其他 DNS 服务器 根据 IP 将 DNS 查询请求发送给 顶级域名服务器
11. 顶级域名服务器 接收到请求后,将 二级域名服务器 (jianshu.com) IP 发送给 其他 DNS 服务器
12. 其他域名服务器 根据 IP 将 DNS 查询请求发送给 二级域名服务器
13. 二级域名服务器 接收到请求后,发现自己是权威 DNS 服务器,于是将 www.jianshu.com 映射的 IP 120.132.92.21 发送给 其他域名服务器
14. 其他域名服务器 接收到解析结果后,将 120.132.92.21 逐层返回传递下去,最终直至 192.168.110.252
15. 192.168.110.252 接收到 www.jianshu.com 解析结果 120.132.92.21 ,根据 IP 与 www.jianshu.com 建立 TCP 连接,然后发起 HTTP 请求主页内容
(https://www.jianshu.com/p/a73e963b63b1)

这里写图片描述
我们常用的是哪些网络协议,
当在浏览器上输入https//www.kaola.com这个URL,浏览器只知道名字是”www.kaola.com”,但是不知道具体的地点,所以不知道如何访问,于是,浏览器打开地址簿去查找,可以使用一般的地址簿协议DNS去查找,还可以使用另一个更加精准的地址簿查找协议HTTPDNS.通过DNS最终找到地址106.114.138.24,这是个IP地址,是互联网世界的门牌号.
知道了目标地址,浏览器开始打包它的请求,对于普通的浏览请求,使用的是HTTP协议,对于购物请求,需要进行加密传输,会使用HTTPS协议.无论是什么协议,里面都会写明”你要买什么和买多少”
这里写图片描述

DNS、HTTP、HTTPS 所在的层我们称为应用层。经过应用层封装后,浏览器会将应用层的包交给下一层去完成,通过 socket 编程来实现。下一层是传输层。传输层有两种协议,一种是无连接的协议UDP,一种是面向连接的协议TCP。对于支付来讲,往往使用 TCP 协议。所谓的面向连接就是,TCP 会保证这个包能够到达目的地。如果不能到达,就会重新发送,直至到达。

TCP 协议里面会有两个端口,一个是浏览器监听的端口,一个是电商的服务器监听的端口。操作系统往往通过端口来判断,它得到的包应该给哪个进程。
这里写图片描述

传输层封装完毕后,浏览器会将包交给操作系统的网络层。网络层的协议是 IP 协议。在 IP 协议里面会有源 IP 地址,即浏览器所在机器的 IP 地址和目标 IP 地址,也即电商网站所在服务器的 IP 地址。
这里写图片描述
操作系统既然知道了目标 IP 地址,就开始想如何根据这个门牌号找到目标机器。操作系统往往会判断,这个目标 IP 地址是本地人,还是外地人。如果是本地人,从门牌号就能看出来,但是显然电商网站不在本地,而在遥远的地方。

操作系统知道要离开本地去远方。虽然不知道远方在何处,但是可以这样类比一下:如果去国外要去海关,去外地就要去网关。而操作系统启动的时候,就会被 DHCP 协议配置 IP 地址,以及默认的网关的 IP 地址 192.168.1.1。

操作系统如何将 IP 地址发给网关呢?在本地通信基本靠吼,于是操作系统大吼一声,谁是 192.168.1.1 啊?网关会回答它,我就是,我的本地地址在村东头。这个本地地址就是MAC地址,而大吼的那一声是ARP协议。所以ARP协议是找出网关192.168.1.1的MAC地址的
这里写图片描述

于是操作系统将 IP 包交给了下一层,也就是MAC 层。网卡再将包发出去。由于这个包里面是有 MAC 地址的,因而它能够到达网关。

网关收到包之后,会根据自己的知识,判断下一步应该怎么走。网关往往是一个路由器,到某个 IP 地址应该怎么走,这个叫作路由表。

路由器有点像玄奘西行路过的一个个国家的一个个城关。每个城关都连着两个国家,每个国家相当于一个局域网,在每个国家内部,都可以使用本地的地址 MAC 进行通信。

一旦跨越城关,就需要拿出 IP 头来,里面写着贫僧来自东土大唐(就是源 IP 地址),欲往西天拜佛求经(指的是目标 IP 地址)。路过宝地,借宿一晚,明日启行,请问接下来该怎么走啊?
城关往往是知道这些“知识”的,因为城关和临近的城关也会经常沟通。到哪里应该怎么走,这种沟通的协议称为路由协议,常用的有OSPF和BGP。
城关与城关之间是一个国家,当网络包知道了下一步去哪个城关,还是要使用国家内部的 MAC 地址,通过下一个城关的 MAC 地址,找到下一个城关,然后再问下一步的路怎么走,一直到走出最后一个城关。

最后一个城关知道这个网络包要去的地方。于是,对着这个国家吼一声,谁是目标 IP 啊?目标服务器就会回复一个 MAC 地址。网络包过关后,通过这个 MAC 地址就能找到目标服务器。

目标服务器发现 MAC 地址对上了,取下 MAC 头来,发送给操作系统的网络层。发现 IP 也对上了,就取下 IP 头。IP 头里会写上一层封装的是 TCP 协议,然后将其交给传输层,即TCP 层。

在这一层里,对于收到的每个包,都会有一个回复的包说明收到了。这个回复的包绝非这次下单请求的结果,例如购物是否成功,扣了多少钱等,而仅仅是 TCP 层的一个说明,即收到之后的回复。当然这个回复,会沿着刚才来的方向走回去,报个平安。

因为一旦出了国门,西行路上千难万险,如果在这个过程中,网络包走丢了,例如进了大沙漠,或者被强盗抢劫杀害怎么办呢?因而到了要报个平安。

如果过一段时间还是没到,发送端的 TCP 层会重新发送这个包,还是上面的过程,直到有一天收到平安到达的回复。这个重试绝非你的浏览器重新将下单这个动作重新请求一次。对于浏览器来讲,就发送了一次下单请求,TCP 层不断自己闷头重试。除非 TCP 这一层出了问题,例如连接断了,才轮到浏览器的应用层重新发送下单请求。

当网络包平安到达 TCP 层之后,TCP 头中有目标端口号,通过这个端口号,可以找到电商网站的进程正在监听这个端口号,假设一个 Tomcat,将这个包发给电商网站。
这里写图片描述
电商网站的进程得到 HTTP 请求的内容,知道了要买东西,买多少。往往一个电商网站最初接待请求的这个 Tomcat 只是个接待员,负责统筹处理这个请求,而不是所有的事情都自己做。例如,这个接待员要告诉专门管理订单的进程,登记要买某个商品,买多少,要告诉管理库存的进程,库存要减少多少,要告诉支付的进程,应该付多少钱,等等。

如何告诉相关的进程呢?往往通过 RPC 调用,即远程过程调用的方式来实现。远程过程调用就是当告诉管理订单进程的时候,接待员不用关心中间的网络互连问题,会由 RPC 框架统一处理。RPC 框架有很多种,有基于 HTTP 协议放在 HTTP 的报文里面的,有直接封装在 TCP 报文里面的。

当接待员发现相应的部门都处理完毕,就回复一个 HTTPS 的包,告知下单成功。这个 HTTPS 的包,会像来的时候一样,经过千难万险到达你的个人电脑,最终进入浏览器,显示支付成功。

总结
www.kaola.com 具体IP地址查询用DNS,HTTPDNS ,查到结果是互联网世界的门牌号(106.114.138.24)

应用层 DNS HTTP,HTTPS

经过应用层封装后,浏览器将应用层的包交给

传输层 UDP(无连接),TCP(连接) (用socket编程来实现)

经过传输层封装后,浏览器将传输层的包交给操作系统的

网络层 IP协议

去外地找网关 DHCP协议配置网关的IP地址 默认的网关的IP地址为192.168.1.1

192.168.1.1网关的IP地址 通过ARP协议 找到网关IP所对应的MAC地址.

经过网络层封装后,操作系统将IP包包交给

MAC层 网卡将包发出去, 包里有MAC地址所以可以到达网关

网关就是路由器 路由协议 OSPF和BGP

就这样经过网关IP和他的MAC地址一直走到最后一个网关,
最后一个网关知道这个网络包要去哪,谁是目标IP,目标服务器回复一个MAC地址
网络包通过MAC地址就找到目标服务器.

目标服务器发现MAC地址对上了,取下MAC投,发送给操作系统的网络层
发现IP也对上了,取下IP头,IP头里装的是TCP协议,然后将其交给传输层TCP层

TCP层里有目标端口号,通过端口号,找到电商网站的进程正在监听这个端口号,
Tomcat将这个包发给电商网站
Tomcat通过RPC远程过程调用方式实现库存要减少,应该支付多少钱

猜你喜欢

转载自blog.csdn.net/u012581760/article/details/81660490