访问一个网页过程中发生了什么

前言

本文以小明在图书馆连接网线,并访问网页为例,剖析TCP/IP协议栈工作原理,让读者了解这神奇的计算机网络底层协议的作用。

上网流程图

获取本机的IP【DHCP】

当小明连上网线,通过以太网接口连上了学校的交换机,而校园网其实就是一个ISP(Internet Service Provider),提供DNS服务。
1. 小明笔记本连接网络并没有自己的IP,而IP是互联网的唯一标识地址。在图书馆局域网内,小明笔记本创建了DHCP请求消息,并且封装进UDP中,然后封装成IP数据报:
Source IP:0.0.0.0 Des IP:255.255.255.255 【广播专用地址】
Source port:68 Des port:67
2. IP同时也被封装进入以太帧中,具体如下:
Sou MAC: 本地MAC Des MAC:FF:FF:FF:FF:FF:FF【广播帧】
3. 交换机接收到广播帧,立马向所有输出链路转发消息
4. 局域网的路由器接收到了该帧,并对其进行解析,
frame→datagram→segment→DHCP请求Message,其中提取UDP信息属于多路分解
5. 路由器网关为192.168.0.1/24【192.168.x.x保留作为局域网地址】,所以通过CIDR的分配原则,路由器决定给用户分配192.168.0.108IP地址,这时候,DHCP ACK Message被封装进入UDP中。
Sou:IP 192.168.0.1 Des:IP:255.255.255.255 Ack也是广播来的噢
另外,DNS服务器的ip,网关ip,被分配的ip都是封装到
注意,24为子网掩码,子网内的IP与其相与,都是得到子网的IP,即192.168.0.x
6. 交换机通过自学习的功能,把之前转发的MAC映射表存储起来,这时候,帧直接在交换机中转发
7. 笔记本获得DHCP ACK消息,在UDP中的Bootstrap Protocol,获取了自己的IP地址,同时也知道DNS服务器的IP地址以及局域网网关的IP地址了

这里写图片描述


获取网关的MAC【ARP】

小明此时想浏览www.baidu.com网站查找点信息,小明便在浏览器上输入了url【注意,没有特别指明都是访问http的】。链路层传递帧需要知道目标的mac地址,而现在笔记本只知道网关的IP,所以,此时会先查找得到网关的MAC地址。ARP是有时间限制的,其请求跟http请求并不是因果关系,是独立开来的。

  1. 笔记本对外发送ARP查询消息
    Sour MAC: 本地的 DesMac:FF:FF:FF:FF:FF:FF
    Sour IP: 本地 DesIp:网关ip
    【相当于广播,who has gateway ip?tell local ip~】
  2. 网关路由器回复ARP消息,并把其mac地址放在源mac中传输。当笔记本拿到消息,便自己维护ARP表。

这里写图片描述


获取目标IP【DNS】

  1. 笔记本通过UDP封装DNS请求消息,目标port为 53,并发送给网关路由器。
  2. 网关路由器,直接通过转发表选择校园网的路由器,并转发消息,校园网的所有路由器都会解析IP信息,获取des Ip结合自治系统内部选路以及自治系统间选路算法,来把IP数据报转发到DNS服务器。
  3. DNS服务器开始查DNS数据库中是否有该DNS映射记录,如果找到,则会立马通过UDP封装DNS reply消息,发送回局域网网关路由器。
  4. 局域网网关路由器,通过NAT地址转换技术,借助端口,将desIp定位到小明的笔记本。
  5. 笔记本收到DNS回复消息,此时便获取到了百度的ip地址。

这里写图片描述
目标ip为本地DNS服务器

DNS查找路径:
本地DNS服务器→根DNS服务器→TLD【Top-Level Domain】DNS服务器→权威【authoritative】DNS服务器
递归查找:一路查到底
迭代查找:返回给local DNS服务器
实际:递归+迭代,自己请求localDNS是递归查询,但本地分别向不同DNS服务器查询属于迭代查询

DNS报文信息
这里写图片描述

这里写图片描述

这里写图片描述

自治系统内部选路
RIP(Routing Information):
RIP通告报文被封装在UDP上,使用端口520
类似DV算法,每经过一个subnet记为1hop,选择hop最少的路径,每隔30s邻居会互相告知路径情况,超过180s 则会认为邻居死亡,该路径移除。
每个路由器维系到达邻居的跳数信息,最大跳数限制为15。

OSPF(Open Shortest Path First):
使用端口号89
类似LS算法,自行实现可靠信息传输,且实现Link-state广播
广播其连接状态每30min一次,不单单向邻居广播

自治系统间选路
BGP(BorderGateway Protocol)
唯一使用TCP作为传输层的路由协议
AS与AS之间的连接叫eBGP,AS内部连接叫iBGP,eBGP交换两端路由器的信息,并通过iBGP告知AS内的其他路由器的信息。


建立通信【TCP】

  1. 笔记本向百度的ip发送TCP SYN请求报文,此时,数据包信息如下:
    传输:本地端口 目的端口:80
    网络:本地IP 目的IP:百度的ip
    链路:本地mac 目的Mac:网关路由器的MAC
    seq=x;
  2. 百度的服务器接收到SYN请求报文,便回复SYN ACK,其中ack号为SYN请求报文+1,即x+1,seq=y
  3. 笔记本接收到SYN ACK,便向百度服务器发送ACK,ack=y+1,seq=x+1,握手完成,开始数据传输。

这里写图片描述

浏览网页【HTTP】

  1. 笔记本向服务器发送HTTP get的请求报文信息。
  2. 服务器获取到笔记本的HTTP的请求报文,服务器便向笔记本发送TCP ack确认报文,来告诉笔记本已经收到请求。
  3. 服务器向笔记本发送HTTP response报文信息。
  4. 笔记本接收到response信息,便会向服务器发送ack确认信息。
    1)http
    浏览器解析HTTP超文本内容,小明就看到了闪亮亮的网页啦。
    2)https
    此时小明收到是code=302的重定向http响应报文到https:,于是,笔记本向百度服务器 443 端口请求建立TLS连接,首先经过TCP握手阶段,再通过TLS握手阶段,协商后再获取相应的数据。

注:直接输入https://网址,是会自动进行TLS连接,而不会采用普通的http协议,数据被加密在SSL上,而SSL封装在TCP内。

TLS握手:
这里写图片描述


总结

网页的请求访问,涉及了TCP/IP协议栈的各个方面,在共同的作用下,完成一次完整的会话,核心过程如下:
1. 获取本机IP【UDP封装DHCP】
2. 获取网关MAC【ARP】
3. 获取域名映射的IP地址【UDP封装DNS】
4. 建立连接,获取数据【TCP三次握手,TLS握手,HTTP协议】

各层所用协议:
应用层:DNS,DHCP,HTTP,RIP,OPSF,BGP
传输层:TCP,UDP
网络层:IP
链路层:ARP

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值