在浏览器中输入一个网址,解析其背后发生的故事

在浏览器中输入一个网址,解析其背后发生的故事

很多公司都喜欢问这个问题,当初考研时也会问到这个问题,所以浅层次地总结一下。

1. http协议 URL

在浏览器中输入一个网址,比如http://www.google.com,应用层的http协议,这里可以想到OSI七层参考模型和TCP/IP四层分别都是哪些层。
http协议本身是无连接的,但http使用了面向连接的TCP作为运输层协议,保证了数据的可靠传输,http不必考虑数据在传输过程中被丢弃后又怎样被重传。
URL(uniform resource locator)
URL一般形式是4个部分:
<协议>://<主机>:<端口>/<路径>

2. 域名

www.google.com是一个域名,域名百度百科的定义是:
域名(Domain Name),是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的地理位置(我理解的地理位置是DNS服务器是位置相关的)。
为什么会有域名?
因为IP地址不好记,所以引入域名。IP地址是Internet主机的作为路由寻址用的数字型标识,人不容易记忆。后续再写IP地址。
域名可分为不同级别,包括顶级域名、二级域名、三级域名、注册域名。.com是顶级域名,顶级域名又分为两类,一个是国家顶级域名,如中国是cn,美国是us;一个是国际顶级域名,如表示工商企业的 .Com,表示网络提供商的.net,表示非盈利组织的.org等。

3. DNS

只是输入一个域名,那么之后的过程是什么呢?
DNS(Domain Name System),即域名解析系统,叙述DNS的作用前,先叙述IP地址。在互联网上的每一个计算机都拥有一个唯一的地址,称作“IP地址”。因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住机器能直接读取的IP地址。DNS的工作就是解析出域名对应的IP地址。
从理论上讲,整个因特网可以只使用一个域名服务器,一个域名服务器也可以完成所有IP地址的查询,但是从效率和可靠性来讲,这样不可取,所以使用分布式的域名系统DNS。
DNS属于应用层的协议。
有4种域名服务器:
根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器。
DNS协议运行在UDP协议之上,使用端口号53。
linux下:$nslookup www.google.com,可查看本机DNS的IP地址和端口号,解析出谷歌域名对应的IP地址。
那么DNS域名解析的过程是什么?
域名解析的过程有递归和迭代解析两种(《计算机网络》谢版课本上讲过,现在回想还是朱老师讲得好)。
《谢书》原话:
域名到IP地址的解析过程的要点如下:当某一个应用进程需要把主机名解析为IP地址时,该应用进程就调用解析程序(resolver),并成为DNS的一个客户,把待解析的域名放在DNS请求报文中,以UDP用户数据报方式发给本地域名服务器(使用UDP目的是为了减少开销)。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用进程获得目的主机的IP地址后即可进行通信。

3.1 递归查询(recursive query)

递归查询指:
如果客户端配置的本地域名服务器不能解析出客户端请求的IP地址,则本地域名服务器代替客户端进行查询,将请求发送给根域名服务器,根域名服务器再向其他域名服务器发送请求,直到根域名服务器获取到客户端请求的IP地址,根域名服务器返回给本地域名服务器,
然后由本地域名服务器告诉客户端查询的IP地址。

3.3 迭代查询(iterative query)

迭代查询指:如果本地域名服务器不能解析出客户端请求的IP地址,则后续所有的查询工作本地域名服务器代替客户端向其他域名服务器发送请求,本地域名服务器获取到客户端请求的IP地址后返回给客户端。

4. 端口号

现在拿到IP地址,端口号也是需要的。
每一条TCP连接有两个端点,那么TCP连接的端点是神马?
TCP连接的端点是套接字(socket)。根据RFC 793定义:端口号拼接到IP地址即可构成了套接字。因此,有如下:
套接字socket = (IP地址:端口号)
每一条TCP连接唯一地被通信两端的两个端点(即两个套接字)所确定。
TCP连接 ::= {socket1, socket2} = {(IP1:port1),(IP2:port2)}
IP1、IP2分别是两个端点主机的IP,而port1、port2分别是两个端点主机的端口号。IP或port号,任意有一个不同都是不同的连接。
注意:
同一个IP地址可以有多个不同的TCP连接,而同一个端口号也可以出现在不同的连接种。

如果地址不包含端口号,根据协议的默认端口号确定一个。端口只是一个逻辑概念,和计算机硬件没有关系。
例如:www.guokr.com 不包含端口号,http协议默认端口号是80。如果你输入的url是http://www.guokr.com:8080/ ,那表示不使用默认的端口号,而使用指定的端口号8080。
不知不觉已经来到了网络层,运输层TCP如何保证可靠传输呢?那就要重新学习一遍计算机网络,滑动串口,拥塞控制等等。

5. 服务器返回客户端的请求

现在两端已经建立连接,服务器收到客户端的请求后,会解析请求信息,包括各种资源的访问,是否有缓存,请求的方式等等。返回给客户端请求的内容。

6. ARP协议 RARP协议

这两个协议都是在网络层,ARP(Address Resolution Protocol),ARP协议是将IP地址解析为MAC地址的协议,局域网中的通信都是基于MAC地址的。RARP(Reverse Address Resolution Protocol),反向地址转换协议,将局域网中某个主机的物理地址转换为IP地址。

参考:
[1] 《计算机网络》第五版 谢希仁
[2] http://www.guokr.com/question/554991/ 果壳讲得也可以
[3] http://coolshell.cn/articles/11564.html coolshell

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值