发布时间:2025-12-09 19:24:14 浏览次数:4
本文会详细讲解当我们在浏览器输入www.baidu.com后到底发生了什么。讲解过程分为三部分,首先是总体流程,然后是对其中的一些细节的探讨,最后对一些重要的问题进行汇总。
使用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)请求数据:
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域名服务器对域名进行解析,分为两种方式,如下图:
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和硬件地址的映射关系。
ARP只会在局域网中存在。
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表示服务器内部错误。
数据链路层的三个基本问题?
如何在总线网上实现一对一的通信呢?
IP数据报的有效长度是多少?
网络的扩展方式?
局域网的扩展:
在物理层扩展以太网:集线器;
在数据链路层扩展以太网:网桥,以太网交换机。(自学习算法)
网络层:路由器;
既然网络链路上传送的帧最终按照硬件地址找到目的主机的,那么为什么我们还需要使用抽象的IP地址,而不是直接使用MAC地址通信?
解决IP地址不够用的方法?
(1)采用无分类域间路由选择 CIDR,使 IP 地址的分配更加合理;
(2)采用网络地址转换 NAT 方法以节省全球 IP 地址;
(3)用具有更大地址空间的新版本的 IP 协议 IPv6(根本措施)。
TCP连接为什么使用三次握手?两次不行吗?
Cookie和Session的区别?
转发和重定向的区别?
windows下的网络命令汇总:
在数据链路层已经对整个数据帧进行校验了,为什么还需要在传输层对整个UDP/TCP数据进行校验?如下图:
在数据链路层进行校验是防止传输过程中出错的数据仍然在网络中流通。
传输层对整个UDP/TCP数据进行校验的原因:路由器只包含下三层,假设路由器在网络层数据出错,在数据链路层会重新计算帧首和帧尾,这样出错的数据是可以在网上传输的,只有到达接收方的传输层,通过传输层对整个数据的校验从而丢弃该出错的数据。
可以防止硬件故障、软件bug、信号干扰、线路差、人为误操作,但是却无法防止人为故意篡改报文字段,需要其他的安全措施。可以参照网址:网址。