经过对计算机网络的学习,我们了解了网络通信的过程,熟悉了网络协议栈各个层的工作机制与作用。那么现在我们回过头来看一个问题:
为什么我们从浏览器的地址栏中输入一个域名,就能给我们返回一个画面精美的网页。在我们点击回车的一瞬间到底发生了哪些事情?今天我们就来一起探索!
历史文章: 【计网】从零开始学习http协议 —理解http重定向和请求方法 【计网】从零开始学习http协议 —深入理解cookie和session 【计网】从零开始认识https协议 — 保证安全的网络通信 【计网】从零开始理解TCP协议 — 熟悉TCP报头结构并理解三次握手与四次挥手 【计网】从零开始理解TCP协议 — 拥塞控制机制,延迟应答机制,捎带应答,面向字节流 【计网】从零开始认识IP协议 — 认识网络层,认识IP报头结构 【计网】从零开始认识IP协议 — 理解网段划分,NAT策略,私有IP和公网IP,认识公网 【计网】网络层路由过程 ,理解IP分片与组装 【计网】从零开始认识arp协议
首先输入一个URL在地址栏中:
URL的结构中主要包含了:
浏览器做的第一步就是解析 URL 得到里面的参数,将域名和需要请求的资源分离开来,从而了解需要请求的是哪个服务器,请求的是服务器上什么资源等等。
确定了需要访问的服务器与需要获取的资源之后,就会形成https请求。 https请求报文结构如下:
这时浏览器作为应用层的工作已经完成,接下来就是网络协议栈的工作了!
浏览器形成https报文之后,此时还不能进入到网络协议栈中,因为还有一项重要工作没有做:
域名并不是目标服务器真正意义上的地址,互联网上每一台计算机都有自己的 IP 地址标识着,但是 IP 地址并不方便记忆,所以才设计出了域名。
这里引出一个域名等级的概念:
.root
或者 .
,根域名通常是省略的.com,.cn
等163.com
里的 163
,这个是用户可以进行注册购买的这时,本地域名服务器求助根域名服务器,根域名分析后发现是.com
二级域名,所以就告诉本地域名服务器去.com
服务器中寻找域名对应IP,这样一级一级向下寻找,最终找到域名的对应IP地址,这时本地域名服务器将得到的 IP 地址返回给操作系统,同时自己将 IP 地址缓存起来;操作系统将 IP 地址返回给浏览器,同时自己也将 IP 地址缓存起来;至此,浏览器就得到了域名对应的 IP 地址,并将 IP 地址缓存起来。
这时拥有了目的IP地址,可以进行网络协议栈的处理了!
形成https请求报文之后,浏览器做完传输层工作就做完了,接下来就是操作系统网络协议栈的工作:
传输层获取到应用层的https报文,进行封装,通常是使用TCP协议,传输层TCP协议提供了一种面向连接的、可靠的字节流服务:
TCP传输层有许多特殊机制用来保证通信的可靠性:拥塞控制,流量控制,滑动窗口,超时重传机制…
形成TCP报文之后,继续向下传递,交给网络层进行处理。
网络层对传输层报文进行封装,网络层报头结构为:
网络层发挥的作用是:数据报要通过怎样的路径(传输路线)才能到达对方主机,并传送给对方。
这个路径寻找过程类似问路,通过报文对路由器一次一次的中转路由,路由器通过自身的路由表(提前配置好的)指导下一个目标是哪一台主机,路由器最终会将报文发送到目标子网。
数据链路层的报头结构很简单:
如果不知道对方的MAC地址,那么就要先进行一下arp请求,获取到目标IP地址主机的MAC地址。arp请求会形成一个MAC帧发送到网络中进行广播,最终到达目标IP地址的主机,对方发送回来一份arp应答,这时我们的操作系统就知道了对方的MAC地址,可以发送报文过去了!!!
这里需要注意三张表:
这里就可以形成一份TCP/IP协议下是如何通信的过程了
源IP地址
为子节点的WAN口IP。总结一下:
上面发送报文的前提是已经建立了与目标主机的TCP连接,如果是第一次进行访问,那么会进行TCP三次握手:
这里的通信过程是传输层。
三次握手有以下作用:
关闭连接时,会进行四次挥手:
四次挥手使用最小的通信成本,建立了断开连接的共识!双方都不和对方通信了!并且也知道对方不再和我进行通信了!注意:双方的连接可能不是同时断开,这取决于对方如何处理。同时断开时可以成为三次挥手。
浏览器的 HTTPs请求报文通过 TCP 三次握手建立的连接通道发送,可能被分片若干报文段,这些报文段在服务器的网络层进行拼装,服务器在收到这些报文段后,按照网络层报头中的报文序号与13位偏移量以原来的顺序重组请求报文。然后向上传递数据,最终在应用层,将https请求获取完整,然后处理并返回一个 HTTP 响应。当然,HTTP 响应报文也要经过和 HTTP 请求报文一样的过程!
此时浏览器上输入URL后回车,到底发生了什么?已经讲解完毕!