URL及连接过程-计算机网络复习笔记

本文是关于计算机网络复习的笔记,重点介绍了URL的概念及其组成部分,详细解释了DNS解析的过程,包括递归查询和迭代查询,以及浏览器如何通过TCP三次握手与服务器建立连接。此外,还提到了请求和传输数据的流程,以及网页渲染的基本步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算机网络复习笔记-URL及链接过程

URL的概念:

URL(Universal Resource Locator)统一资源定位符,也叫网页地址或者网址,用来表示在WWW上每一信息资源 统一的 且在网上 唯一的 地址。

  • 一个URL链接 由部分组成:传输协议 / 服务器 / 域名 / 端口 / 虚拟目录 / 文件名 / 锚 / 参数
  • 语法格式为(带方括号[]的为可选项):
    protocol : // hostname [:port] / path / [;parameters][?query]#fragment

上面的链接有几个要注意的地方:“;” 和“/”的使用,80端口默认不显示,“?” 到“#”之间跟着参数,多个参数使用“&”连接,“#”后面跟着锚。

protocol(协议): 指定使用的传输协议,如Http,Ftp,Https等

hostname(主机名): 是指存放资源的服务器的域名系统(DNS) 主机名或 IP 地址

port(端口号): 整数,可选,省略时使用方案的默认端口,如http的默认端口为80。有时候出于安全或其他考虑,可以在服务器上对端口进行重定义,即采用非标准端口号,此时,URL中就不能省略端口号这一项

path(路径): 由零或多个“/”符号隔开的字符串,一般用来表示主机上的一个目录或文件地址

parameters(参数): 这是用于指定特殊参数的可选项

query(查询): 可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用“&”符号隔开,每个参数的名和值用“=”符号隔开。

fragment(信息片断/锚点) 字符串,用于指定网络资源中的片断。

/

DNS解析及过程:

DNS(Domain Name System)解析(域名解析):是把域名指向网站空间IP,把方便用户识别和记忆的域名解析成机器之间能够理解的IP地址。域名的解析工作由DNS服务器完成。DNS实际上是一个域名和IP对应的数据库。

在进行DNS解析时,会经历以下步骤:

查询浏览器缓存
检查系统缓存
检查路由器缓存
查询ISP DNS 缓存
递归查询目标IP

查询浏览器缓存(浏览器会缓存之前拿到的DNS 2-30分钟时间)

检查系统缓存,检查hosts文件 这个文件保存了一些以前访问过的网站的域名和IP的数据。它就像是一个本地的数据库。如果找到就可以直接获取目标主机的IP地址了

检查路由器缓存,路由器有自己的DNS缓存 可能就包括了这在查询的内容

查询ISP DNS 缓存 ISP服务商DNS缓存(本地服务器缓存)那里可能有相关的内容

DNS服务器查询 当应用过程需要将一个主机域名映射为IP地址时,就调用域名解析函数,解析函数将待转换的域名放在DNS请求中,以UDP报文方式发给本地域名服务器。本地的域名服务器查到域名后,将对应的IP地址放在应答报文中返回。同时域名服务器还必须具有连向其他服务器的信息以支持不能解析时的转发。若域名服务器不能回答该请求,则此域名服务器就暂成为DNS中的另一个客户,向根域名服务器发出请求解析,根域名服务器一定能找到下面的所有二级域名的域名服务器,这样以此类推,一直向下解析,直到查询到所请求的域名。从根域名服务器到顶级域名服务器再到极限域名服务器依次搜索对应目标域名的IP。

DNS服务器查询过程

一、主机向本地域名服务器的查询一般都是采用递归查询:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

二、本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。

浏览器与网页的TCP链接过程

查询到服务器IP地址后,浏览器将与服务器进行一对一的TCP链接,过程也称作三次握手。

第一次握手: 客户端向服务器发送TCP报文,其中的SYN标志码为1表示需要与服务器进行同步链接,顺序码为x,同时客户端进入 SYN_SENT状态

第二次握手: 服务器收到连接请求后向客户端发送TCP确认报文,ACK码为1,SYN码置1,同时确认号设为x+1,并同时包括一个服务器端的顺序号y给客户端,同时服务器端进入SYN_RCVD状态

第三次握手: 客户端向服务器做出回应,ACK码置1,同时发送一个顺序码为x+1,确认码为y+1的数据报(可包含数据),客户端进入ESTABLISEHED状态,服务器收到后也进入了ESTABLISHED状态,链接建立完成

通过三次握手,建立了客户端和服务器之间的连接,现在可以请求和传输数据了。

请求和传输数据

其本质是在建立起的TCP连接中,按照HTTP协议标准发送一个索要网页的请求。

负载均衡 当一台服务器无法支持大量的用户访问时,将用户分摊到两个或多个服务器上的方法叫负载均衡。此时 如果网页服务器配置了负载均衡的话,DNS服务器返回给客户端的IP是负载均衡服务器的IP地址。负载服务器将会根据分配算法,制定一个后端Web服务器与之建立TCP连接,并转发浏览器的网页请求。之后 Web服务器收到请求,产生响应,并将网页发送给负载均衡服务器。服务器将网页交给filter链处理,并返回给浏览器(而Filter的功能可以理解成先把前一步生成的结果处理一遍,再返回给浏览器。比如可以将前面没有压缩的网页用gzip压缩后再返回给浏览器)

浏览器渲染

  • 客户端拿到服务器端传输来的文件,找到HTML和MIME文件,通过MIME文件,浏览器知道要用页面渲染引擎来处理HTML文件。浏览器根据页面HTML内容,生成DOM Tree。根据CSS内容,生成CSS Rule Tree(规则树)。调用JS执行引擎执行JS代码。
  • 根据DOM Tree和CSS Rule Tree生成Render Tree(呈现树)
  • 根据Render Tree渲染网页

网页静态资源加载
在浏览器解析页面内容的时候,会发现页面引用了其他未加载的image、css文件、js文件等静态内容此时浏览器会进行这些静态加载。浏览器根据url加载该url下的静态内容。本质上是浏览器重新开始第一部分的流程,所以这里不再重复阐述。区别只是负责均衡服务器后端的服务器不再是应用服务器,而是提供静态资源的服务器。

参考连接:https://blog.csdn.net/weixin_40017590/article/details/80596447
https://www.cnblogs.com/wuguanglin/p/url.html

### 关于计算机网络自顶向下的复习资料笔记 #### 教材版本的选择 对于学习《计算机网络 自顶向下方法》这本教材而言,不同版本之间的差异并不显著。第六版与第七版的内容基本保持一致,因此无论使用哪个版本都可以满足学习需求[^1]。 #### 学习资源整理 为了更好地理解掌握计算机网络的知识体系,可以从以下几个方面着手准备复习材料: - **章节知识点总结** 对每一章的核心概念技术要点进行提炼,形成简洁明了的笔记文档。例如,在第一章绪论部分重点理解计算机网络的基本模型及其各层次的功能;第二章应用层则需熟悉HTTP、FTP等常见协议的工作原理。 - **练习题解析** 针对每章后的思考题实践题目给出详细的解答过程,并尝试自己动手完成一些实验项目来加深印象。比如构建简单的Web服务器以验证HTTP请求响应机制。 - **补充阅读材料收集** 寻找其他优质的在线教程或学术论文作为辅助参考资料,拓宽视野并紧跟技术发展趋势。像官方RFC文档就提供了权威性的互联网标准说明。 ```python # Python代码示例:获取指定URL页面内容用于分析研究 import requests def fetch_webpage(url): response = requests.get(url) if response.status_code == 200: return response.text else: raise Exception(f"Failed to load page {url}") web_content = fetch_webpage('https://example.com') print(web_content[:50]) # 打印前50个字符查看网页开头部分内容 ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值