键入网址到网页显示,期间发生了什么?
文章目录
- 2.键入网址到网页显示,期间发生了什么?
- 2.1真实地址查询DNS:
- 2.2**协议栈:**上半部分是负责收发数据的TCP和UDP协议,下面一半是用IP协议控制网络包收发操作,在互联网上传数据时,数据会倍切分成一块块的数据报,而将数据包发送给对方的操作就是由IP负责的。
- 2.3可靠传输TCP:
- 2.3.1三次握手
- 2.3.2TCP分割数据
- 2.3.3 TCP报文生成
- 2.4远程定位IP
- 2.4.1多个网卡,就会有多个IP地址,那IP头部的源地址应该选择哪个IP呢?
- 2.4.2IP 报文生成
- 2.5两点传输-----MAC
- 2.5.1mac 包头格式
- MAC发送方和接受方如何确认?
- 既然知道要发给谁,如何获取对方的MAC?
- 广播获取的MAC地址会缓存。使用arp -a查看ARP缓存内容。
- MAC报文包含接受方和发送方的MAC地址,并且有上层协议类型。
- 3、出口网卡
- 3.1送别者——交换机
- 4、路由器
- 5、数据包到达服务器

2.键入网址到网页显示,期间发生了什么?
对URL进行解析,发送给Web服务器的请求信息。http:(协议) +//+ web服务器 + / + 目录名 + /+ …+ 文件名。服务器后面表示文件的路经名。
web服务器文件路径:web 服务的根目录(/),
**没有文件的路径名?**则请求默认文件。
生产HTTP请求信息? 对URL进行解析后,浏览器就确定了Web服务器和文件名,接下来就是根据这些信息生成HTTP请求信息。
2.1真实地址查询DNS:
域名, www.server.com. com后面还有一点表示根域名。下一层就是.com顶域名。
DNS作用:查询服务器域名对应的 IP 地址,根域的DNS服务器信息保存在所有DNS服务器(真实的物理实例服务器)。所有DNS服务去都可以找到和访问DNS服务器,所有只要客户端找到任意以太DNS服务器就可以通过它找到根域DNS服务器,然后再一路找到下层的某台DNS服务器。
域名解析流程:
1、客户端首先发出一个DNS请求,发送给本地的DNS服务器(TCP/IP协议设置中填写DNS服务器地址)。
2、本地域名服务器接受到客户端请求后,缓存表格中能找到www.server.com(域名),直接返回IP地址。如果没有,本地DNS会去问它的根域名服务器。
3、根DNS收到来自本地的DNS的请求后,发现后置是.com , 说"www.server.com"这个域名是.com区域管理,将.com顶级域名服务器地址给你,
4、本地DNS收到.com顶级域名服务器的地址后,发送请求到。com域DNS服务器中询问“老二,你能告诉我www.server.com”的ip地址吗?
5、.com 域名服务器说:”我给你负责www.server.com“区域的权威的DNS服务器地址,你去问他应该能做到,
6、然后本地DNS于是转向问权威DNS服务器:”老三,WWW.server.com“的域名解析地址是多少?
7、权威DNS服务器查询后将对应的IP地址XXXXX,告诉本地DNS。
8、本地DNS再将IP地址返回给客户端,客户端和目标建立连接。
至此,我们完成了DNS的解析。如果问路一般。
每次解析域名都要经过这么多步骤吗?
浏览器会先查看,自身有没有这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有就直接返回,没有去hosts文件查看,最后才回去问DNS服务器。
2.2**协议栈:**上半部分是负责收发数据的TCP和UDP协议,下面一半是用IP协议控制网络包收发操作,在互联网上传数据时,数据会倍切分成一块块的数据报,而将数据包发送给对方的操作就是由IP负责的。
DNS 获取 ip后,就可以把HTTP的传输工作交给操作系统中的协议栈。
(应用程序)Soket库。
**(协议栈)**Tcp,UDP -》 IP,ip协议包括ICMP协议和ARP协议,ARP用于根据IP地址查询以太网MAC地址。ICMP协议告知网络包传送过程中产生的错误以及各种控制信息。
IP下面的驱动程序:网卡驱动程序,
物理硬件网卡:硬件。
“原来我需要那么多大佬的协助啊,那我先去找找 TCP 大佬。
IP 地址的确定过程包括:
- 应用程序通过 Socket 指定本地和远程 IP 地址。
- 域名解析(DNS)将域名转换为 IP 地址。
- 操作系统和网络设备(如路由器、NAT)处理 IP 地址的路由和转发。
2.3可靠传输TCP:
HTTP是基于TCP协议传输的,所有这里我们先了解下TCP协议。‘
TCP包头格式:
2.3.1三次握手
client 发送(syn)请求报文,server端返回SYN-ACK报文(响应和请求),client端返回ack报文。
所以三次握手目的是保证双方都有发送和接收的能力。
2.3.2TCP分割数据
HTTP的数据较长,TCP需要把HTTP的数据拆分成一块块的发送,而不是一次性发送所有数据。
MTU:一个网络包的最大长度,以太网协议1500字节,
MSS:除去IP和TCP头部之后,一个网络包所能容纳的TCP数据的最大长度。
2.3.3 TCP报文生成
Tcp报文头部就是会存放在HTTP头部+数据。
2.4远程定位IP
TCP模块在执行连接、收发、断开等各阶段操作时,都需要委托IP模块将数据封装成网络包发送给通对象
IP协议需要源地址IP和目标地址IP以及协议号,06表示TCP协议。
源地址IP:客户端ip,目标地址ip:web服务器IP。
2.4.1多个网卡,就会有多个IP地址,那IP头部的源地址应该选择哪个IP呢?
通过路由表中的Destination目标地址,来区分各个网卡对应的子网,没有子网则使用默认网关发送到getway(路由器地址),网关的IP地址是具有路由功能的设备的IP地址。
2.4.2IP 报文生成
对TCP报文加上IP报文头,然后IP报文会携带协议信息,指明TCP协议。
2.5两点传输-----MAC
2.5.1mac 包头格式
MAC 头部是以太网使用的头部,它包含了接受方和发送方的MAC地址等信息,用于两点之间的传输。mac包头的协议类型只使用:
0800: IP协议。
0806:ARP协议。
MAC发送方和接受方如何确认?
发送方的MAC地址获取:MAC地址网卡生产时写入ROM。
接受方的MAC地址获取:查询路由表,在路由表中找到相匹配的条目,然后把包发给对应的网关(也就是gateway的IP地址),
既然知道要发给谁,如何获取对方的MAC?
ARP 协议(ip层协议)会在以太网中以广播的形式,对以太网所有地址查询IP地址是谁?请告诉我MAC地址。
广播获取的MAC地址会缓存。使用arp -a查看ARP缓存内容。
MAC报文包含接受方和发送方的MAC地址,并且有上层协议类型。
3、出口网卡
将数字信号转换成电信号,网卡驱动获取网络包之后,会将其复制到网卡内的缓存区中,接着会在其开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列。
起始帧分界符是一个用来表示包起始位置的标记。末尾的FCS(帧校验序列)用来检查包传输过程是否有损坏。
最后网卡会将包转为电信号,通过网线发送出去。
3.1送别者——交换机
交换机的设计是将网络包原样转发到目的地。交换机工作在MAC层,也称二层网络设备。
交换机的包接受操作:首先,电信号到达网线接口,交换机里的模块进行接收,接下来交换机里的模块将电信号转换成数字信号。
通过包末尾的FCS校验错误,如果没问题则放到缓冲区。这部分操作基本和计算机的网卡相同。
查询一下这个包的接受方MAC地址是否已经在MAC地址表中有记录了。mac地址表中包含设备的mac地址和设备连接在交换机的那个端口上。找不到mac地址的话,表明该地址的设备还没有向交换机发送过包,直接发送给所有端口。如果接收方 MAC 地址是一个广播地址,那么交换机会将包发送到除源端口之外的所有端口。
4、路由器
网络经过交换机之后,到达路由器,并在此背转发到下一个路由器或目标设备。
路由器是基于IP设计,俗称三层网络设备,路由器的各个端口都具有MAC地址和IP地址。
而交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有MAC地址。
路由器基本原理
类似于网卡具有IP地址,接受端口会接受发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。
路由器的包接受操作:查看mac是否是发给自己的,是则放到缓冲区,否则就丢弃这个包。
查询路由表确定输出端口:完成包接受操作之后,路由器就会去掉包开头的MAC头部。MAC头部的作用就是将包送达路由器,使用子网掩码和IP地址计算出网关地址即是匹配的路由路径。
路由器的发送操作:
网关为空表示到达终点,否则表示还未到达终点。知道ip地址后使用ARP协议根据ip地址查询MAC地址,并将查询的结结果作为接受方的MAC地址。
之后将填写输出端口的 MAC 地址,然后发送给下一个交换机,交换机根据mac地址选择端口,然后继续发送给下一个路由器,然后不断重复直到网络包到达目的地。
综上:源IP地址和目的IP地址是不会变的,网络包传输的过程中变化的只有mac地址。
5、数据包到达服务器
开始解析数据包,先后依次查看MAC地址是否符合服务器上的地址,然后是IP地址是否符合服务器的IP地址。然后查看TCP的报文头中的序列号,是否是我想要的,如何使就放入缓存返回ACK。TCP服务器存在端口号,然后HTTP的服务器监听这个端口号,取出数据将包发送给HTTP。服务器的HTTP进程解析请求,然后将网页封装成HTTP响应报文,HTTP响应报文也要穿上TCP、IP、MAC头部,目的地址使客户端IP地址。重复之前的流程,知道client接受到响应数据。最后客户端离开,向服务器发送TCP四次挥手,至此双方的连接就断开了。