文章目录
- @[TOC](文章目录)
- 1:解析URL网址,从而生成发送给Web服务器的Http请求信息
- 2:真实地址查询-----(DNS域名解析)
- 3:调用协议栈
- 4:可靠的传输 TCP
- 5:远程定位--IP地址
- 6:两点传输--获取MAC地址
- 7:网卡--出口
- 8:送别者--交换机
- 9:出境大门--路由器
- 10:相互扒皮--服务端与客户端
文章目录
- @[TOC](文章目录)
- 1:解析URL网址,从而生成发送给Web服务器的Http请求信息
- 2:真实地址查询-----(DNS域名解析)
- 3:调用协议栈
- 4:可靠的传输 TCP
- 5:远程定位--IP地址
- 6:两点传输--获取MAC地址
- 7:网卡--出口
- 8:送别者--交换机
- 9:出境大门--路由器
- 10:相互扒皮--服务端与客户端
1:解析URL网址,从而生成发送给Web服务器的Http请求信息
URL 进行解析之后,浏览器确定了 Web 服务器和文件名,接下来就是根据这些信息来生成 HTTP 请求消息了。这里的文件指的就是我们要访问服务器中某个目标文件。
2:真实地址查询-----(DNS域名解析)
通过浏览器解析 URL 并生成 HTTP 消息后,需要委托操作系统将消息发送给 Web 服务器。但在发送之前,还有一项工作需要完成,那就是查询服务器域名对于的 IP 地址,因为委托操作系统发送消息时,必须提供通信对象的 IP 地址。
比如我们打电话的时候,必须要知道对方的电话号码,但由于电话号码难以记忆,所以通常我们会将对方电话号 + 姓名保存在通讯录里。
所以,== 有一种服务器就专门保存了 Web 服务器域名与 IP 的对应关系,它就是 DNS 服务器==。
域名解析的过程:
其实就是先访问== 本地的DNS服务器==,看是否解析过该域名,解析过那就直接取过来;如果没有的话那就去请求== 根域名服务器==,根域名服务器给一个方向后去== 顶级域名服务器中查找IP;然后顶级域名服务器然你去权威域名服务器==找对应的IP,找到为止。
3:调用协议栈
- 通过 DNS 获取到 IP 后,就可以把 HTTP 的传输工作交给操作系统中的协议栈;
- 应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。
- 协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,它们两会接受应用层的委托执行收发数据的操作。-- 协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据刽被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。
4:可靠的传输 TCP
- 在 HTTP 传输数据之前,首先需要 TCP 建立连接,TCP 连接的建立,通常称为三次握手,三次握手目的是保证双方都有发送和接收的能力。这里需要注意的是我们三次握手的过程的中发送的TCP报文,也是需要经过经过网络层和链路层的封装的,要不这条TCP报文如何传输啊,都不知道路
- 如果Http请求消息过长,这时 TCP 就需要把 HTTP 的数据拆解一块块的数据发送,而不是一次性发送所有数据。
- TCP报文的生成: TCP 协议里面会有两个端口,一个是浏览器监听的端口(通常是随机生成的),一个是 Web 服务器监听的端口(HTTP 默认端口号是 80, HTTPS 默认端口号是 443)。
- 在双方建立了连接后,TCP 报文中的数据部分就是存放 HTTP 头部 + 数据,组装好 TCP 报文之后,就需交给下面的网络层处理。
5:远程定位–IP地址
- TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成网络包发送给通信对象。
- 在 IP 协议里面需要有源地址 IP 和 目标地址 IP:
- 源地址IP,即是客户端输出的 IP 地址;
- 目标地址,即通过 DNS 域名解析得到的 Web 服务器 IP。
- HTTP 是经过 TCP 传输的,所以在 IP 包头的协议号,要填写为 06(十六进制),表示协议为 TCP。
- IP报文的生成:(IP的协议里是TCP协议,TCP协议中的数据部分包含HTTP请求消息)。
6:两点传输–获取MAC地址
- 每台设备都有一个MAC地址,我们在交换机中传输信息的过程中,需要知道交换机MAC地址。
- 如何获取发送方的MAC,和接收方的MAC呢?
- 发送方MAC 地址是在网卡生产时写入到 ROM 里的,只要将这个值读取出来写入到 MAC 头部就可以了。
- 接收方的MAC地址 是先查询ARP缓存,如果有记录该IP地址对应的MAC地址那就直接获取,如果没有的话,那就喊呗(广播)
7:网卡–出口
- IP 生成的网络包只是存放在内存中的一串二进制数字信息,没有办法直接发送给对方。因此,我们需要将数字信息转换为电信号,才能在网线上传输,也就是说,这才是真正的数据发送过程。
- 负责执行这一操作的是网卡,要控制网卡还需要靠网卡驱动程序。这样将数字信号转换成电信号才能传输出去。
8:送别者–交换机
- 交换机的设计是将网络包原样转发到目的地。交换机工作在 MAC 层,也称为二层网络设备。
- 交换机根据自身的MAC表,将这个数据包转发到路由器。
9:出境大门–路由器
- 经过路由器的话,那么我们就可以进入其他网络了
- 路由器和交换机的区别
网络包经过交换机之后,现在到达了路由器,并在此被转发到下一个路由器或目标设备。
这一步转发的工作原理和交换机类似,也是通过查表判断包转发的目标。
不过在具体的操作过程上,路由器和交换机是有区别的。
因为路由器是基于 IP 设计的,俗称三层网络设备,== 路由器的各个端口都具有 MAC 地址和 IP 地址==;
而交换机是基于以太网设计的,俗称二层网络设备,交换机的端口不具有 MAC 地址。 - 路由器的基本原理:
路由器的端口具有 MAC 地址,因此它就能够成为以太网的发送方和接收方;同时还具有 IP 地址,从这个意义上来说,它和计算机的网卡是一样的。
当转发包时,首先路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。 - 路由器的包接收操作:
检查 MAC 头部中的接收方 MAC 地址,看看是不是发给自己的包,如果是就放到接收缓冲区中,否则就丢弃这个包。
总的来说,路由器的端口都具有 MAC 地址,只接收与自身地址匹配的包,遇到不匹配的包则直接丢弃。 - 查询路由表确定输出端口
完成包接收操作之后,路由器就会去掉包开头的 MAC 头部。
MAC 头部的作用就是将包送达路由器,其中的接收方 MAC 地址就是路由器端口的 MAC 地址。因此,当包到达路由器 之后,MAC 头部的任务就完成了,于是 MAC 头部就会被丢弃。
接下来,路由器会根据 MAC 头部后方的 IP 头部中的内容进行包的转发操作。 - 路由器的发送操作
- 首先,我们需要根据路由表的网关列判断对方的地址。
- 如果网关是一个 IP 地址,则这个IP 地址就是我们要转发到的目标地址,还未抵达终点,还需继续需要路由器转发。-
- 如果网关为空,则 IP 头部中的接收方 IP 地址就是要转发到的目标地址,也是就终于找到 IP 包头里的目标地址了,说
明已抵达终点。
- 知道对方的 IP 地址之后,接下来需要通过 ARP 协议根据 IP 地址查询 MAC 地址,并将查询的结果作为接收方 MAC 地
址。路由器也有 ARP 缓存,因此首先会在 ARP 缓存中查询,如果找不到则发送 ARP 查询请求。获取到MAC地址后
再将MAC地址封装到数据包上。 - 网络包完成后,接下来会将其转换成电信号并通过端口发送出去。这一步的工作过程和计算机也是相同的。
- 发送出去的网络包会通过交换机到达下一个路由器。由于接收方 MAC 地址就是下一个路由器的地址,所以交换机会根据
这一地址将包传输到下一个路由器。接下来,下一个路由器会将包转发给再下一个路由器,经过层层转发之后,网络包
就到达了最终的目的地。 - == 在网络包传输的过程中,源 IP 和目标 IP 始终是不会变的,一直变化的是 MAC 地址,因为需要 MAC 地址在以太网内进行两个设备之间的包传输。==
- 首先,我们需要根据路由表的网关列判断对方的地址。
10:相互扒皮–服务端与客户端
- 数据包抵达服务器后,服务器会先扒开数据包的 MAC 头部,查看是否和服务器自己的 MAC 地址符合,符合就将包收起来。
- 接着继续扒开数据包的 IP 头,发现 IP 地址符合,根据 IP 头中协议项,知道自己上层是 TCP 协议。
- 于是,扒开 TCP 的头,里面有序列号,需要看一看这个序列包是不是我想要的,如果是就放入缓存中然后返回一个 ACK,如果不是就丢弃。TCP头部里面还有端口号, HTTP 的服务器正在监听这个端口号。
- 于是,服务器自然就知道是 HTTP 进程想要这个包,于是就将包发给 HTTP 进程
- 服务器的 HTTP 进程看到,原来这个请求是要访问一个页面,于是就把这个网页封装在 HTTP 响应报文里。
- HTTP 响应报文也需要穿上 TCP、IP、MAC 头部,不过这次是源地址是服务器 IP 地址,目的地址是客户端 IP 地址。
- 穿好头部衣服后,从网卡出去,交由交换机转发到出城的路由器,路由器就把响应数据包发到了下一个路由器,就这样跳啊跳
- 最后跳到了客户端的城门把手的路由器,路由器扒开 IP 头部发现是要找城内的人,于是把包发给了城内的交换机,再由交换机转发到客户端。
- 客户端收到了服务器的响应数据包后,同样也非常的高兴,客户能拆快递了!
- 于是,客户端开始扒皮,把收到的数据包的皮扒剩 HTTP 响应报文后,交给浏览器去渲染页面,一份特别的数据包快递,就这样显示出来了
- 最后,客户端要离开了,向服务器发起了 TCP 四次挥手,至此双方的连接就断开了。