网络服务访问
我们将项目部署到自己的服务器之后,一般可以通过两种方式访问项目:
那么这两种访问项目的方式到底有什么区别呢?哪种方式更好?IP、域名、端口号之间有什么联系呢?
域名访问时不需要填写端口号,但仅限于80端口。80端口是为HTTP(超文本传输协议)开放的,HTTP(超文本传输协议)是互联网上最常用的协议,主要用于WWW(万维网)传输信息。
您可以在HTTP地址(俗称“网站”)后面加上“:80”即可访问网站,由于网页浏览服务的默认端口号为80,因此您只需输入网站地址,无需输入“:80”。
对于其他服务,也需要添加域名和端口号才能访问。
IP基本概念、域名、IP端口号
IP,(英文:IPv4,又译为互联网协议地址),简称网际协议地址(英文:IP),是分配给网络上使用 IP 协议的设备的数字标签。常见的 IP 地址分为 IPv4 和 IPv6 两类。目前我们使用的是 IPv4 地址,由 32 位二进制数组成,常用 XXX.XXX.XXX.XXX 的形式表示。(以上引用来自维基百科)
简单来说,IP地址就是用来标识网络上每台主机的一个编号,网络上的其他主机通过这个编号就可以在互联网上无数的主机中找到唯一的一台主机。
域名
域名(英文:name)是由“点”分隔的一串字符组成的计算机或计算机组的名称,用于在数据传输过程中识别计算机的电子位置。域名是根据域名系统(DNS)的规则组成的。在DNS中注册的任何名称都是域名。域名用于特定于各种网络环境和应用程序的命名和寻址目的。(以上引用来自维基百科)
域名结构
我们可以通过域名树看到域名的结构。它其实是一棵倒置的树,最上面是根,没有对应的名字。由于根没有名字,所以根下面的一级节点就是顶级域名,再往下也是一样。比如www是三级域名,baidu是二级域名,com是顶级域名。各级域名之间都是通过.来连接的。域名在互联网上是唯一的。
域名和IP地址有区别也有联系,域名通常与IP地址绑定,通过访问域名来访问网络上主机的服务;IP地址通常指网络上的主机,域名通常代表一个网站;一个域名可以绑定多个IP地址,一个IP地址也可以绑定多个域名。
端口号
端口主要分为物理端口和逻辑端口,我们通常说的是逻辑端口,用来区分不同的服务。因为网络中的一台主机只有一个IP,但是一台主机可以提供多种服务,所以端口号就是用来区分一台主机上的不同服务的。一个IP地址的端口以16位进行编号,最多可以有65536个端口,标识从0到65535。(以上引用来自维基百科)
端口号分为公认端口(0~1023)、注册端口(1024~49151)和动态或私有端口号(49152~65535),我们自己的服务一般都绑定在注册端口上。
DNS 域名系统
互联网中的域名系统DNS被设计为一个在线的分布式数据库系统,具有分层的树形结构,并采用客户端-服务器方式将域名和IP地址相互映射。
域名服务器的层次结构:
(来源)
DNS 使得大多数名称可以在本地进行解析,只有少量的解析需要在互联网上进行通信,因此效率很高。采用分布式方式的一个好处是,即使单台计算机出现故障,也不会妨碍 DNS 系统的正常运行。
域名到IP地址的解析是通过分布在互联网上的众多域名服务器来完成的。
解析的主要流程如下:
当主机中的进程需要将域名解析为IP地址时,该进程会调用解析程序,首先在本地浏览器缓存、hosts、系统缓存中查找,如果找到则解析完成,如果没有找到则进行下一步。如果hosts和本地DNS解析器缓存中没有对应的URL映射关系,则首先查找TCP/IP参数中设置的首选DNS服务器,这里我们称之为本地DNS服务器。主机把需要解析的域名放在DNS请求报文中,以UDP用户数据报的形式发送给本地域名服务器。本地域名服务器收到查询后,如果本地配置区域资源中包含需要查询的域名,则将解析结果返回给客户端,完成域名解析;如果没有找到,则本地域名服务器会查询其他DNS服务器,找到域名后,将对应的IP地址放在应答报文中返回给主机,主机获得IP地址后就可以进行通信了。
例如:
域名如:(URL地址)
IP地址为:xx.233.xxs.12(访问)
首先浏览器会请求DNS返回域名对应的IP,浏览器也提供了DNS数据缓存服务,如果某个域名已经解析过,那么浏览器就会把解析后的结构缓存起来,下次查询的时候直接使用,减少一次网络请求。
获取到IP之后还需要获取端口号,如果URL没有明确指定端口号,HTTP协议默认使用80端口。
实际情况中,由于用户与服务器之间存在nginx等代理服务器,解析出来的域名一般是代理服务器的IP地址(或者IP地址:80端口),代理服务再将请求转发给真正的业务服务器,业务服务器、IP、端口号与访问的域名无关。
域名和端口号如何对应?
客户端输入域名,通过DNS将域名解析为服务器IP,找到代理服务器,并访问服务器的80端口(由于http协议服务占用的端口默认为80端口)。然后代理服务器将请求转发到不同的服务器和端口上。
如图:域名与端口号的对应关系
(来源)
项目是否应该通过域名访问?
答案是肯定的。
如果使用IP+端口号来访问,会出现以下后果:
从域名到服务器的流程是怎样的?
首先进行域名解析,然后客户端获取域名对应的IP地址,客户端根据IP地址访问指定的服务器资源(默认端口为80)。
域名解析的一般流程如下
(来源)
DNS查询方法有几种?
当客户程序想通过主机名访问网络中的某台主机时,它首先必须获得该主机名对应的IP地址,因为IP数据报中允许放置的是目的主机的IP地址,而不是主机名。
主机名对应的IP地址可以从本机的hosts文件中获取。但如果hosts文件无法解析主机名,则只能通过客户端设置的DNS服务器进行查询。(这里hosts文件是本地查询)
按照以下流程查询IP
浏览器缓存 → 主机和系统缓存 → 路由器缓存 → ISP DNS 缓存
查询方法大致可以分为以下几类:
当本地域名服务器无法回答客户端的DNS查询时,需要向其他DNS服务器查询。有两种方式:递归和迭代
递归查询结构图如下(图片来自)
迭代查询结构如下:
(图片来自)
DNS缓存机制
关于DNS缓存的机制,有一篇很详细的文章What when you to a URL。
简单来说,一个域名的DNS记录会有两个本地缓存,一个是浏览器缓存,一个是操作系统缓存。在浏览器访问时,会优先访问浏览器缓存。
若未命中,则访问OS缓存,最后访问DNS服务器(一般由ISP提供),DNS服务器再递归查找域名记录并返回。
DNS记录会有一个ttl值(time to live),单位是秒,表示该记录的最大有效时间,经过实验,OS缓存会参考ttl值,但并不完全等于ttl值。
浏览器DNS缓存时间与ttl值无关,各个浏览器都采用固定值。
访问 DNS 后,记录将被保存一小段时间
可以使用 / 查看 DNS 缓存,并使用 / 清除 DNS 缓存。
修改hosts文件后,所有OS中的DNS缓存都会被清除,但是浏览器缓存不会改变。
DNS解析负载均衡的优缺点
优势:
缺点:
实际情况:
在实际的项目部署中,我们一般对一些服务器采用DNS解析,将域名解析作为一级负载均衡。然后在服务器中使用NGINX负载均衡作为二级负载均衡。
为服务器添加域名
购买域名(可以去腾讯云或者阿里云)
在购买域名的时候,会要求您填写自己的个人信息模板以供审核。
购买成功后,进入控制台进行域名解析
域名解析,A记录就是将域名映射到IP地址
(一个域名可以对应多个IP地址,一个IP地址也可以有多个域名)
我已经将域名映射到我的两个服务器IP了。
使用命令查看某个域名对应的IP地址
nslookup 域名
一个域名对应多个IP地址
快速清除电脑本地DNS缓存(win+r然后输入cmd打开终端)
有时候,即使你在阿里云或者腾讯云控制台里更改了域名解析,你还是会访问到原来的IP地址,因为你的电脑有DNS缓存。电脑在访问某个网络服务时,会先查询本地电脑,如果有域名解析就直接访问,如果没有,就会查询DNS服务器。
ipconfig/flushdns
通过域名访问服务器服务
我刚买了域名,还不能访问,需要注册,注册后我会展示结果。
注:我添加的是端口号9000,除了80端口,其他服务依然需要添加端口号。
:
(写博客主要是为了总结和整理自己的学习,大部分资料来源于书籍、网上资料以及自己的实践,整理起来不容易,但难免有不足之处,如有错误,还请在评论区批评指正。同时也感谢博主和作者们在整理资源、分享知识方面的辛勤付出。)
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。