总结:网络访问流程
本文会详细讲解当我们在浏览器输入www.baidu.com后到底发生了什么。讲解过程分为三部分,首先是总体流程,然后是对其中的一些细节的探讨,最后对一些重要的问题进行汇总。
1 总体流程
-
使用
DHCP
获取配置信息:-
当一台新的电脑接入网络后,首先会使用动态主机配置协议
DHCP(Dynamic Host Configuration Protocol)
协议从DHCP
服务器获取一些必要的配置信息,例如:本机的IP
地址,默认路由器的IP
地址,DNS
服务器的IP
地址。 -
DHCP
请求被封装成UDP
报文(UDP
中没有协议字段,通过端口号区分UDP
中存放的协议,DHCP
客户端使用的端口号为68
,服务端使用的是67
),然后再被封装成IP
报文(IP
首部协议字段为17
代表数据部分是UDP
),最后封装成以太网数据帧发送。 -
在
windows
中我们可以通过在cmd
中输入ipconfig /all
命令,查看这些信息。
-
-
使用
DNS(Domain Name System)
解析www.baidu.com
对应的IP
地址:-
首先会在我们的电脑中看是否能够查找到
www.baidu.com
对应的IP
地址,可以使用ipconfig /displaydns
查看域名对应的IP
地址。 -
因为我们是第一次访问该网址,因此不存在这条记录,需要请求本地域名服务器,然后可以通过迭代和递归两种方式查询域名对应的
IP
地址。 -
DNS
请求被封装成UDP
报文(DNS
熟知端口号为53
),然后再被封装成IP
报文,最后封装成以太网数据帧发送。 -
封装成以太网数据帧需要使用到地址解析协议
ARP(Address Resolution Protocol)
协议解析路由器端口IP
对应的硬件地址。 -
DNS
对应的数据报路由到DNS
服务器:-
这里使用到路由算法(
RIP
、OSPF
、BGP
)。 -
最后
DNS
服务器将www.baidu.com
对应的IP
地址。
-
-
-
使用
HTTP (HyperText Transfer Protocol)
请求数据:-
http
使用熟知端口号80
,使用TCP
进行可靠传输(和UDP
一样,TCP
中也没有协议字段,也是通过端口号区分TCP
中存放的协议)然后再被封装成IP
报文(IP
首部协议字段为6
代表数据部分是TCP
),最后封装成以太网数据帧发送。
-
2 细节探讨
-
DHCP
:-
采用广播形式发送发现报文(目的地址为
255.255.255.255
,原地址为0.0.0.0
)通知DHCP
服务器。可能会有多个服务器应答,主机从中选择一个应答即可。 -
为了让互联网中的
DHCP
服务器不太多,不是给每个网络分配一个DHCP
服务器,而是每个网络至少配备一个DHCP中继代理。电脑的请求以广播的形式打到DHCP中继代理,然后代理再以单播的形式通知DHCP
服务器。 -
DHCP
服务器分配给计算机的IP
都是临时的,每次DHCP
服务器会从IP
池(池化技术:数据库连接池、线程池)中分配一个IP
给计算机,计算机可以拥有这个IP
一段时间,这段时间被称为租用期(lease period)。
-
-
DNS
:-
域名系统对于网络来说是必要的吗?不是必须要有的,存在的原因是因为
IP
地址不方便人类记忆。 -
既然域名要映射为
IP
地址,互联网上可不可以不用IP
地址呢?这是不可以的,因为IP
的长度是固定的,方便机器处理。而域名的长度并不是固定的,机器处理起来比较困难。 -
域名系统采用树状结构管理,例如
www.baidu.com
,*域名是com
,代表公司;然后是二级域名baidu
;最后是www
,是World Wide Web
的缩写,代表万维网。 -
使用
DNS
域名服务器对域名进行解析,分为两种方式,如下图:
- 全世界有很多根域名服务器,但是分布不均,但它们只使用
13
个不同IP
地址的域名,即a.rootservers.net、b.rootservers.net、...、m.rootservers.net
。简写为A~M
。
-
-
UDP
:- 无连接的;尽最大努力交付,不保证可靠交付;
-
TCP
:-
TCP
中的关键问题:可靠传输、流量控制、拥塞控制以及连接和释放。 -
可靠传输:(1)差错检测;(2)确认机制;(3)超时重传;(4)序号。
-
流量控制:利用滑动窗口机制可以很方便地在
TCP
连接上实现对发送方的流量控制(接收方利用TCP
头部的窗口字段通知发送方可以发送的数据量,单位字节)。零窗口会导致死锁问题,解决办法是使用持续计时器,计时器时间到,就发送一个零窗口探测报文段(仅携带一字节的数据)。 -
拥塞控制:判断网络出现拥塞的依据就是出现了超时。使用**慢开始(slow-start)、拥塞避免(congestion avoidance)、快重传(fast retrainsmit)、快恢复(fast recovery)**解决。
-
TCP
的连接:三次握手;TCP
的释放:四次挥手。
-
-
ARP
:-
路由器中我们需要重新封装
MAC
帧,这就需要我们根据IP
地址得到下一跳的硬件地址。注意这里硬件地址是下一跳的硬件地址,不一定是IP
数据报首部的IP
地址对应的硬件地址。只有最后一条是IP
数据报中的IP
地址对应的硬件地址。 -
通过广播和单播的形式进行
ARP
。 -
使用
arp -a
可以查看IP
和硬件地址的映射关系。
-
-
RIP
:-
内部网关协议:RIP(路由信息协议);
-
RIP
是一种分布式的基于距离向量的路由选择协议。是互联网的标准协议,其最大的优点就是简单。 -
RIP
允许一条路径上最多有15
个路由器,因此距离为16
相当于不可达。可见,RIP只适用于小型互联网。 -
RIP
协议的三个要点为(who、what、when
):(1)仅和相邻的路由表交换信息;
(2)交换的信息是自己的路由表;
(3)按照固定的时间间隔交换信息。例如,每隔30秒。
-
RIP
使用UDP
封装(RIP
熟知端口号是520
)。 -
RIP
的优点:实现简单,开销较小。 -
RIP
的缺点:(1)限制了网络的规模;(2)好消息传播的快,而坏消息传播的慢。 -
基于的原理:
Bellman-Ford
算法(图论中的算法):设X
是A
到B
的最短路径上的一点,则A->X
,X->B
都是最短路径(可以用反证法证明)。
-
-
OSPF
:-
OSPF
全称为Open Shortest Path First
,中文名称为开放最短路径优先。 -
OSPF
最主要的特征就是使用分布式的链路状态协议(这里的链路就是指两个路由器都有接口的网络),而不是像RIP
那样使用距离向量协议。 -
OSPF
协议的三个要点为(who、what、when
):(1)向本AS中的所有路由器发送信息,使用的是洪泛法:就是路由器通过所有输出端口向相邻的路由器发送信息,而每一个相邻路由器又将此信息发往其所有相邻的路由器。
(2)发送的信息是本路由器相邻的所有路由器的链路状态,所谓的链路状态就是:本路由器和哪些路由器相邻,以及该链路的度量(费用、距离、延时、带宽等)。
(3)链路发生变化时,才会发送信息。
-
OSPF
直接使用IP
数据报传输数据,OSPF
对应IP
数据报首部的协议字段为89
。 -
基于的原理:
Dijkstra
算法。
-
-
BGP
:-
BGP
全称为Border Gateway Protocol
,中文名称为边界网关协议。 -
为什么不同自治系统(
AS
)之间的路由选择不能使用RIP
或者OSF
?(1)互联网的规模太大,使得
AS
之间路由选择十分困难;(2)
AS
之间的路由选择必须考虑相关策略。两个例子:① 某个自治系统可能更愿意让付了服务费的网络经过自己;② 我国国内的站点在相互传输数据时不应经过国外兜圈子,特别是,不要经过某些对我国的安全有威胁的国家。 -
因此,
BGP
只能力求找一条能够到达目的网络且比较好的路由(不要兜圈子),而并非要寻找一条最佳路由。因此BGP
采用了路径向量(path vector)路由选择协议。(RIP
采用距离向量协议,OSPF
采用链路状态协议)。 -
BGP
使用TCP
传输(对应端口号为179
)。
-
-
HTTP
:-
http
使用TCP
进行可靠传输(使用熟知端口号80
)。 -
一般会使用到代理服务器
(proxy server)
:又称为万维网高速缓存(Web cache)
,它代表浏览器发出HTTP
请求。代理服务器的最重要的作用就是加快用户访问网络的速度。是局部性原理(CPU
中的Cache
,存储系统,Redis
中的LRU
策略)的一个体现。 -
HTTP
的报文分为两类:请求报文,响应报文。-
请求报文主要关注:请求行中的方法字段,例如
GET
、PUT
、POST
。 -
响应报文主要关注:状态行中的状态码字段,例如:
200
表示成功;3xx
表示重定向;404
表示错误的请求;500
表示服务器内部错误。
-
-
3 重要问题探讨
-
数据链路层的三个基本问题?
- (1)封装成帧;(2)透明传输;(3)差错检测。
-
如何在总线网上实现一对一的通信呢?
- 一台主机在总线上发送一个消息,这个消息所有的主机都能收到,收到消息的主机根据消息中的目的
MAC
地址是否是自己决定是否保留该消息。因此不是发给自己的消息在数据链路层就被过滤掉了。
- 一台主机在总线上发送一个消息,这个消息所有的主机都能收到,收到消息的主机根据消息中的目的
-
IP
数据报的有效长度是多少?- IP数据报的有效长度在46到1500字节(Byte)之间。
-
网络的扩展方式?
-
局域网的扩展:
-
在物理层扩展以太网:集线器;
-
在数据链路层扩展以太网:网桥,以太网交换机。(自学习算法)
-
-
网络层:路由器;
-
-
既然网络链路上传送的帧最终按照硬件地址找到目的主机的,那么为什么我们还需要使用抽象的IP地址,而不是直接使用MAC地址通信?
- 这是因为全世界存在各式各样的网络,他们使用不同的硬件地址。要使这些异构网络能够相互通信就必须进行非常复杂的硬件地址转换工作,几乎不可能。类似的问题还有计算器中的长度等的转换,我们可以统一先转到米,然后再转换到目标单位,这样只需要搞清楚各个单位和米之间的关系即可。类似的问题还有货币的转换。
-
解决
IP
地址不够用的方法?(1)采用无分类域间路由选择
CIDR
,使IP
地址的分配更加合理;(2)采用网络地址转换 NAT 方法以节省全球 IP 地址;
(3)用具有更大地址空间的新版本的 IP 协议
IPv6
(根本措施)。 -
TCP连接为什么使用三次握手?两次不行吗?
- 两次不行!这是为了已经失效的连接请求突然有传送到了
B
。例如A
发送连接请求1
,结果这个连接请求1
在网络中滞留了很久,导致A
又发送连接请求2
,这次连接成功,直到这次连接释放后 连接请求1
才到达B
,此时B
认为这个新的连接请求,给与A
回复,如果两次握手,B
会认为连接成功建立,其实没有,导致资源的浪费;如果三次握手,A
不对B
的答复给与回复,此时就没有建立连接,不会造成资源的浪费。
- 两次不行!这是为了已经失效的连接请求突然有传送到了
-
Cookie和Session的区别?
-
Cookie
是在客户端存储用户的信息,Session
是在服务器端存储客户的信息。这里主要介绍Cookie
。
-
-
转发和重定向的区别?
- 转发由服务器端进行页面跳转,重定向由客户端进行页面跳转。如下图:
-
windows
下的网络命令汇总:
ipconfig -all # 显示网络的详细信息,包括MAC地址、IP地址、DHCP信息、DNS信息等
ipconfig /all # 等价于ipconfig -all
ping www.baidu.com # 测试网络连通性,基于网际控制报文协议(ICMP)中的询问报文
tracert www.baidu.com # 查看到达www.baidu.com经过的路径,基于网际控制报文协议(ICMP)中的差错报文
arp -a # 查看IP地址和硬件地址的映射关系
route print # 查看本机路由表
route print -4 # 查看本机IPv4路由表
ipconfig /displaydns # 查看域名和IP地址的对应关系