网络服务访问

当我们把项目部署到自己的服务器上以后,一般可以通过两种形式访问项目

  1. ip+端口号
  2. 域名访问

那么这两种访问项目的方式的区别是什么呢?哪一种更好一些?IP,域名,端口号之间有什么联系呢?

域名访问可以不填写端口号,但是仅限于80端口,80端口是为HTTP(HyperText Transport Protocol)即超文本传输协议开放的,此为上网冲浪使用次数最多的协议,主要用于WWW(World Wide Web)即万维网传输信息的协议。

可以通过HTTP地址(即常说的“网址”)加“: 80”来访问网站,因为浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“: 80”了。

其他服务,域名同样也需要加端口号才能访问。

IP,域名,端口号的基本概念

IP

IP,(英语:Internet Protocol Address,又译为网际协议地址),缩写为IP地址(英语:IP Address),是分配给网络上使用IP协议的设备的数字标签。常见的IP地址分为IPv4与IPv6两大类。目前我们使用的都是IPv4的地址,IPv4地址由32位二进制数组成,常以XXX.XXX.XXX.XXX形式表现。(以上参考于维基百科)

通俗点说就是IP地址是用于标识出网络上的每一台主机的编号。有这个编号,网络上的其他主机才能在互联网浩若繁星的主机中定位到唯一的一台主机。

域名

域名,(英语:domain name),是由一串用“点”分隔的字符组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。域名按域名系统(DNS)的规则流程组成。在DNS中注册的任何名称都是域名。域名用于各种网络环境和应用程序特定的命名和寻址目的。(以上参考于维基百科)

域名结构

我们通过域名树的方式来查看域名的结构,可以看出来,它实际上是一个倒过来的树,最上面的是根,没有对应的名字。因为根没有名字,所以根下面的一级节点就是顶级域名,往下同理。我们以 www.baidu.com/ 为例,www 是三级域名,baidu 是二级域名,com 是顶级域名,各级域名之间通过 . 相连。域名在互联网中是唯一的。

域名和IP地址之间有区别也有联系,域名通常会和IP进行绑定,通过访问域名来访问网络上的主机的服务。IP地址通常指的是网络中的主机,而域名则通常表示一个网站,一个域名可以绑定到多个ip上,多个域名也可以绑定到一个ip上。

端口号

端口,(英语:port),主要分为物理端口和逻辑端口。我们一般说的都是逻辑端口,用于区分不同的服务。因为网络中一台主机只有一个IP,但是一个主机可以提供多个服务,端口号就用于区分一个主机上的不同服务。一个IP地址的端口通过16bit进行编号,最多可以有65536个端口,标识是从0~65535.(以上参考于维基百科)

端口号分为公认端口(0~ 1023)、注册端口(1024~ 49151)和动态或私有端口号(49152~65535)。我们自己的服务一般都绑定在注册端口上。

  • 公认端口(0~ 1023):它们紧密绑定(binding)于一些服务。通常这些端口的通讯明确表明了某种服务的协议。任何TCP/IP实现所提供的服务都用0-1023之间的端口号。我们的私用端口号不应该使用这个区间内的端口,除非你向IANA注册了。例如:80端口实际上总是HTTP通讯,HTTP协议是建立在TCP协议之上的一种应用。还有21对应着FTP,25对应着SMTP,110对应着POP3等。
  • 注册端口(1024~ 49151):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。
  • 动态或私有端口号(49152~65535):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。但这是我们一般程序可以使用的端号区间,你可以使用这其中的端口,这样,你的程序就不会和别的公用的程序冲突了

DNS域名系统

互联网中的域名系统 DNS 被设计成一个层次树状结构的联机分布式数据库系统,并且采取的是客户服务器的方式,将域名和IP地址相互映射联系了起来。

域名服务器的层次结构:
(来自https://blog.csdn.net/codejas/article/details/80086068)

DNS 使大多数名字都在本地进行解析,只有少量的解析需要在互联网通信,因此效率很高。采取分布式的一个好处是,即使单个计算机出了故障,也不会妨碍 DNS 系统的正常运行。

域名到 IP 地址的解析是通过许多分布在互联网上的域名服务器完成的。

解析的主要过程如下:

  1. 当一个主机中的进程需要把域名解析为 IP 地址时,该进程就会调用解析程序,首先在本地的浏览器缓存,hosts,系统缓存中查找,如果有,解析结束,没有就下一步
  2. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,主机把待解析的域名放在 DNS 的请求报中,以 UDP 用户数据报方式发送给本地域名服务器。
  3. 本地域名服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,如果没有,本地域名服务器向其他DNS服务器查询,在查找域名后,把对应的 IP 地址放在回答报文中返回给主机。
  4. 获得 IP 地址的后主机即可进行通信。

比如:

域名如:alibaba.com (URL地址)
IP地址为:xx.233.xxs.12 (访问)

首先,第一步浏览器会请求DNS返回域名对应的IP,浏览器还提供了DNS数据缓存服务,如果某个域名已经被解析过了,浏览器就会缓存解析的结构,下次查询时直接使用,减少一次网络请求。

拿到IP后,就需要获取端口号,如果url没有明确指出端口号,HTTP协议默认是80端口。

在实际情况中,因为用户和服务器之间存在代理服务器比如nginx,这个解析到的域名一般是代理服务器的 IP地址(或者IP地址 :80端口 ),代理服务再去转发请求到真正的业务服务器,业务服务器和IP和端口号就跟访问的域名没啥关系了。

域名和端口号是怎么对应起来的?

客户端输入域名,通过DNS将域名解析成为服务器ip,找到代理服务器,因为http协议服务所占用的端口默认为80端口,所以会访问服务器的80端口,然后再通过代理服务器将请求转发到不同的服务器以及端口中.

如图:域名和端口号的对应
(来自https://blog.csdn.net/qq_43778308/article/details/109382424)

应该通过域名访问项目吗?

答案是必须的。

如果用IP+端口号的方式访问,会有以下后果:

  • 首先,非常难记,域名是对人友好的有含义的字符,而ip都是4组基本无规律的数字,对人不友好.
  • 其次,如果服务器中的资源发生迁移,那么原先的服务器ip地址就无效了,必须要重新使用新的ip地址访问服务器,用户还要再去记忆一遍IP地址。但是如果是使用域名则不存在这个问题.
  • 最后,不安全,通过ip直接访问服务器是非常危险的,相当于将整个服务器的大门向所有人打开,造成的后果是别有用心的人能够非常容易攻击到服务器.域名访问就能杜绝这种情况,用户是不知道服务器的IP地址的,而且就算有人通过域名恶意攻击,直接和用户交互的代理服务器也可以保护内容服务器。这样就算代理服务器被攻破,损失也相对较小。

从域名到服务器的流程是怎么样的?

首先是域名解析,然后客户端拿到域名对应的IP地址,客户端再根据IP地址去对指定服务器资源进行访问(默认80端口)。

域名解析的大致过程如下图
(来自https://blog.csdn.net/qq_43778308/article/details/109382424)

DNS的查询方式有几种?

当客户端程序要通过一个主机名称来访问网络中的一台主机时,它首先要得到这个主机名称所对应的IP地址,因为IP数据报中允许放置的是目地主机的IP地址,而不是主机名称。

可以从本机的hosts文件中得到主机名称所对应的IP地址,但如果hosts文件不能解析该主机名称时,只能通过向客户机所设定DNS服务器进行查询了。(这里hosts文件是本地查询)

按照如下流程查询IP

浏览器缓存→hosts&系统缓存→路由器缓存→ISP DNS 缓存

查询方式可大致分为以下几种:

  • 本地查询:客户机平时得到的DNS查询记录都保留在DNS缓存中,客户机操作系统上都运行着一个DNS客户端程序。当其他程序提出DNS查询请求时,这个查询请求要传送至DNS客户端程序。DNS客户端程序首先使用本地缓存信息进行解析,如果可以解析所要查询的名称,则DNS客户端程序就直接应答该查询,而不需要向DNS服务器查询,该DNS查询处理过程也就结束了。
  • 直接查询:如果DNS客户端程序不能从本地DNS缓存回答客户机的DNS查询,它就向客户机所设定的本地DNS服务器发一个查询请求,要求本地DNS服务器进行解析。本地DNS服务器得到这个查询请求,首先查看一下所要求查询的域名是不是自己能回答的,如果能回答,则直接给予回答,如是不能回答,再查看自己的DNS缓存,如果可以从缓存中解析,则也是直接给予回应。

当本地域名服务器自己不能回答客户机的DNS查询时,它就需要向其他DNS服务器进行查询。此时有两种方式:递归和迭代

  • 递归查询:本地DNS服务器自己负责向其他DNS服务器进行查询,一般是先向该域名的根域服务器查询,再由根域名服务器一级级向下查询。最后得到的查询结果返回给本地DNS服务器,再由本地DNS服务器返回给客户端。

递归查询结构图如下(图片来自https://blog.csdn.net/codejas/article/details/80086068)

  • 迭代查询:当本地域名服务器自己不能回答客户机的DNS查询时,也可以通过迭代查询的方式进行解析。DNS服务器不是自己向其他DNS服务器进行查询,而是把能解析该域名的其他DNS服务器的IP地址返回给本地域名服务器,本地域名服务器再继续向这些DNS服务器进行查询,直到得到查询结果为止。

迭代查询结构图如下:
(图片来自https://blog.csdn.net/codejas/article/details/80086068)

DNS缓存机制

关于DNS缓存的机制,有一篇非常详细的文章What really happens when you navigate to a URL。

简单来说,一条域名的DNS记录会在本地有两种缓存:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,

如果未命中则访问OS缓存,最后再访问DNS服务器(一般是ISP提供),然后DNS服务器会递归式的查找域名记录,然后返回。

DNS记录会有一个ttl值(time to live),单位是秒,意思是这个记录最大有效期是多少。经过实验,OS缓存会参考ttl值,但是不完全等于ttl值,

而浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。

Windows访问DNS后会把记录保存一段短暂的时间

可通过ipconfig /displaydns 查看windows的DNS缓存、通过ipconfig /flushdns来清除。

而在修改hosts文件后,所有OS中DNS缓存会被清空,而浏览器缓存则不发生变化

DNS解析负载均衡之优缺点

优点:

  • 配置简单,无成本费用
  • 将负载均衡的工作交给了DNS服务器,省去了管理的麻烦

缺点:

  • 记录的添加与修改是需要一定时间才能够生效的(因为DNS缓存了A记录)。一旦有一台服务器坏了需要下线,即使修改了A记录,要使其生效也需要较长的时间,这段时间,DNS任然会将域名解析到已下线的服务器上,最终导致用户访问失败。
  • 不能按需分配负载,DNS并不知道各服务器的真实负载情况,所以负载效果不是很好

实际的情况:

在实际的项目部署,我们一般会将部分服务器使用DNS解析,利用域名解析作为第一级负载均衡.再在服务器中使用NGINX负载均衡作为第二级负载均衡。

给服务器添加域名

域名购买(去腾讯云或者阿里云都可以)

购买域名,还会要你填写你自己的个人信息模板来进行审核

购买成功后,自行进入控制台进行域名解析

域名解析,A记录表示将该域名映射到一个IP地址上面
(一个域名可以对应多个IP地址,同时一个IP地址也可以有多个域名)
我这里将域名映射到了我的两个服务器IP上面

使用nslookup 命令查看某域名对应的IP地址

nslookup 域名

一个域名对应了多个IP地址

Windows电脑快速清除本地DNS缓存(win+r 然后输入cmd打开终端)
有时候你在阿里云或者腾讯云控制台虽然改了域名解析,但是还是会访问以前的那个IP地址,因为你电脑本地有DNS的缓存,电脑访问某个网络服务的时候,先会去本地电脑查询,如果有域名解析就直接访问了,没有才会去DNS服务器查询

ipconfig/flushdns

通过域名访问服务器的服务

我域名刚买,所以还无法访问,他需要备案,待备案之后我再展示结果
注意:我加了端口号9000,除80端口以外,其他服务还是需要添加端口号

References:

  • https://blog.csdn.net/qq_43778308/article/details/109382424
  • https://www.pianshen.com/article/38191349414/
  • https://baike.baidu.com/item/80%E7%AB%AF%E5%8F%A3/7581041?fr=aladdin
  • https://baike.baidu.com/item/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%AB%AF%E5%8F%A3/8986083?fr=aladdin
  • https://blog.csdn.net/Linuxdianc/article/details/5045520
  • https://blog.csdn.net/codejas/article/details/80086068
  • https://www.cnblogs.com/qingdaofu/p/7399670.html
  • https://my.oschina.net/flashsword/blog/99068#comments

(写博客主要是对自己学习的归纳整理,资料大部分来源于书籍、网络资料和自己的实践,整理不易,但是难免有不足之处,如有错误,请大家评论区批评指正。同时感谢广大博主和广大作者辛苦整理出来的资源和分享的知识。)

【网络】IP、域名、端口号和DNS域名解析之间的联系简介(给服务器添加域名来验证)相关推荐

  1. 复习-网络编程之IP和端口号

    一. 网络编程中有两个主要的问题: 1.如何准确地定位网络上一台或多台主机;定位主机上的特定的应用(分别对应2.1): 2.找到主机后如何可推高效地进行数据传输(分别对应2.2): 二.网络编程中的两 ...

  2. Java之初步识别网络编程:IP、端口号、TCP/UDP、Socket、URL等

    文章目录 一.网络编程概述 二.网络通信要素概述 三.通信要素1:IP和端口号 IP相关 InetAdress类 如何实例化InetAddress 端口号 四.通信要素2:网络协议 TCP/IP协议簇 ...

  3. QT udp自动获取对方ip和端口号

    Tip: 用printf打印QString方法如下: QString output printf("%s\n",output.toStdString().data()); 正文:Q ...

  4. java 正则表达式 提取ip_java正则表达式提取地址中的ip和端口号

    由于我需要用到java正则表达式提取地址中的ip和端口号,所以我就写了一个demo,测试一下,下面是demo public class Test0810_1 { public static void ...

  5. 获取本机ip和端口号

    获取本机ip window.location.hostname 获取端口号 location.port 获取主机名+端口号 location.host 示例 console.log('ip:'+loc ...

  6. 如何获取标准网络服务的端口号,协议名等

    如何获取标准网络服务的端口号,协议名等 标准的网络服务(应用层协议)都规定了具体的传输协议.端口号等.如我们最常见的http协议的端口号为80,使用tcp传输.本机主机在/etc/services的网 ...

  7. 网络编程(part7)--网络主机/IP地址/域名/端口号

    鄙人学习笔记 文章目录 网络主机(host) 功能 地址 查看本机网络地址命令 举个例子 IP地址 功能 结构 特殊IP 域名 定义 作用 ping 举个例子 端口号(port) 作用 特点 取值范围 ...

  8. 深入浅出的解释什么是IP地址、子网掩码、端口号、DNS、网关(初学者一定要看看)

    文章目录 一.IP地址 二.子网掩码 三.端口号 四.DNS协议 五.网关 一.IP地址 IP地址:要实现电脑之间的通信,就必须要有一个ip地址.IP地址由网络地址和主机地址构成. 作用:确认位置. ...

  9. Python网络编程基础之ip地址,端口号,TCP,socket

    Python网络编程基础 IP地址 ip地址表现形式 查看ip地址 Linux Windows 检查网络是否正常 端口与端口号 端口号分类 知名端口号 动态端口号 TCP协议 概念 TCP通讯步骤 特 ...

最新文章

  1. windows平台安装php_memcache模块
  2. python十一:集合(set)
  3. windows环境下安装scrapy框架报错问题--最快捷有效的解决方案
  4. 室内空气流动原理图_家庭新风系统示意图 新风系统运行原理介绍
  5. java抽象类和接口总结
  6. Maven 配置文件 POM 的常用依赖配置代码
  7. 【渝粤教育】电大中专Office办公软件 (4)作业 题库
  8. 黑科技揭秘:眼科大夫如何应用5G+8K完成远程会诊?
  9. 漫画:程序员战力图鉴
  10. linux svn可视化工具,CentOS6.5安装SVN 可视化管理工具iF.SVNAdmin
  11. testng连接MySQL_Selenium+TestNG实战-8-连接数据库方法去验证文章是否发布
  12. linux 查看端口号
  13. IIS设置的解决方案
  14. 中国双色向滤光镜行业市场供需与战略研究报告
  15. 项目需求讨论--可能是用InputFilter来做的最好的金额限制
  16. Excel表格中如何批量删除工作表
  17. android模拟器 opengl,在Android模拟器上缺少OpenGL驱动程序
  18. C++后端开发学习路线及推荐学习时间
  19. FreeRTOS任务切换过程深层解析
  20. 基础计算机教学论文,基础计算机论文,关于民办院校计算机基础课程实践教学体会相关参考文献资料-免费论文范文...

热门文章

  1. 计算机网络中tx和fx,100Base-TX/T4/FX以太网含义及用法
  2. ArcGIS基于爬虫数据绘制人口分布密度图
  3. 全球历史气候数据分享
  4. 前端----HTML/CSS 单边框
  5. 纯CSS边框渐变动画
  6. 出圈游戏c语言用指针求,出圈游戏程序设计.doc
  7. C语言free如何知道要free多大的空间
  8. 墨客IPFS子链技术交流
  9. Python与单片机通信——serial库
  10. 内存和CPU匹配方法详解