总结:网络访问流程

总结:网络访问流程

本文会详细讲解当我们在浏览器输入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服务器:

      • 这里使用到路由算法(RIPOSPFBGP)。

      • 最后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算法(图论中的算法):设XAB的最短路径上的一点,则A->XX->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的报文分为两类:请求报文,响应报文。

      • 请求报文主要关注:请求行中的方法字段,例如GETPUTPOST

      • 响应报文主要关注:状态行中的状态码字段,例如: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地址的对应关系
上一篇:DHCP原理与配置


下一篇:winform自定义分页控件