【网络】IP、域名、端口号和DNS域名解析之间的联系简介(给服务器添加域名来验证)_域名端口号-程序员宅基地

技术标签: 网络  

网络服务访问

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

  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

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37774171/article/details/122562519

智能推荐

CTFshow web入门web171-sql1_ctfshowweb171-程序员宅基地

文章浏览阅读102次。说明到3就没有了,直接进行union查询 (此时将1改为-1)本题考察sql注入联合查询union select。继续到1‘ order by 4--+首先我们试着注入1‘ and 1=1’继续到1‘ order by 3--+回显异常,说明存在注入。_ctfshowweb171

软件测试工程师面试基础题(应届生和测试小菜必备)最基础的面试题_软件测试基础知识面试题-程序员宅基地

文章浏览阅读6.7k次,点赞18次,收藏214次。​ 答:(美国电器和电子工程师协会)IEEE提出的软件工程标准术语,使用人工和自动手段来运行或测试某个系统的过程,目的在于检验它是否满足规定的需求或是弄清预期结果与实 际结果之间的差别。简单定义:找出软件中的BUG答:在软件开发过程中容易出现缺乏有效沟通,软件复杂,编程错误,需求不断变更,时间的压力,缺乏文档的代码,软件开发工具和人员的自大等原因引发的错误,通过测试能够找出其中的错误,解决错误,从而提高软件的质量答:计划工作内容需求分析工作内容 对开发的软件进行详细的定义,由需求分析人员和用户共同讨_软件测试基础知识面试题

快速掌握RabbitMQ(三)——消息确认、持久化、优先级的C#实现_c# rabbitmq 消息为持久化-程序员宅基地

文章浏览阅读490次。阅读目录1 消息确认 1 生产者端消息确认(tx机制和Confirm模式) 2 消费者端消息确认(自动确认和显示确认) 2 消息持久化/优先级 1 消息持久化(Persistent) 2 消息优先级(Priority) 3 小结 回到顶部1 消息确认  在一些场合,如转账、付费时每一条消息都必须保证成功的被处理。AMQP是金融级的消息队列协议,有很高的可靠性,这里介绍在使用RabbitMQ时怎么保证消息被成功处理的。消息确认可以分为两种:一种..._c# rabbitmq 消息为持久化

* swiper in ./node_modules/vue-awesome-swiper/dist/vue-awesome-swiper.js_*swiper in-程序员宅基地

文章浏览阅读4.7k次,点赞11次,收藏6次。项目安装swiper轮播后,启动报错:_*swiper in

三个Makefile通用模板_-duse_debug-程序员宅基地

文章浏览阅读301次。转载自 这里编译可执行MakefileVERSION =1.00CC =gccDEBUG =-DUSE_DEBUGCFLAGS =-WallSOURCES =$(wildcard ./source/*.c)INCLUDES =-I./includeLIB_NAMES =-lfun_a -lfun_soLIB_PATH =-L./libOBJ =$(patsubst %.c, %.o, $(SOURCES))TARGET =app#links$(TAR_-duse_debug

DiskGenius v4.30专业版下载_diskgenius下载 csdn-程序员宅基地

文章浏览阅读329次。文件预览、扇区编辑、加密分区恢复、Ext4分区恢复、RAID恢复等高级功能应有尽有,满足个人用户及企业用户对数据恢复的各种需求。安全快速地恢复硬盘、移动硬盘、U盘、内存卡、RAID、虚拟磁盘上因误删除、格式化、分区损坏、分区丢失、病毒破坏、系统崩溃及其他未知原因丢失的数据。不管数据是什么原因丢失的,只要没有被覆盖,还有残留的文件信息,就可以正常查找到并恢复。双击文档、图片、视频、音频、文本、PDF等可以查看文件内容,以便准确预判恢复效果。(访问密码: 2024)_diskgenius下载 csdn

随便推点

Mybatis generator 1.4.x 入门教程--转载_sqlprovideradapter-程序员宅基地

文章浏览阅读1.2k次。Mybatis generator 1.4.x 入门教程一、前言​ 最近因为公司开了新的项目,所以在构建骨架的时候发现mybatis最新的版本已经更新到了1.4.0了,尝试了一下,比起之前的mybatis版本,有了更好的优化,用上了lamada表达式,还支持动态sql查询,所以在这里安利一波,因为之前我用的Laravel ORM,所以比较习惯使用这种lamada表达式来查询,可能之前用习惯了以前的查询方式的二、官方文档地址官方文档地址三、集成 mybatis Generator 1.4._sqlprovideradapter

.NET Framework应用跨域问题解决方案_.net 跨域-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏6次。CORS 全称 Cross-Origin Resource Sharing,是一种允许当前域(domain)的资源(比如 html/js/web service)被其他域(domain)的脚本请求访问的机制,通常由于同域安全策略(the same-origin security policy)浏览器会禁止这种跨域请求。_.net 跨域

element ui树形组件过滤搜索_elementui tree 实现对树的搜索过滤-程序员宅基地

文章浏览阅读1.1k次。<template> <div> <el-input placeholder="输入关键字进行过滤" v-model="filterText"></el-input> <el-tree :data="menus" :props="defaultProps" node-key="catId" ref="menuTree" @node-click="nodeclick" ._elementui tree 实现对树的搜索过滤

android之Fragment_android fragment-程序员宅基地

文章浏览阅读2.6k次。目录一Fragment的简介和生命周期: <1> Fragment的简介 <2> Fragment的生命周期二将Fragment添加到Activty中使用 <1>概述 <2>使用不兼容方法将Fragemnt添加到Activity中使用 <2.1>不兼容方法..._android fragment

聚类分析(K-means算法)_k-means聚类分析-程序员宅基地

文章浏览阅读7.3w次,点赞65次,收藏508次。一、聚类分析1.1 聚类分析 聚类: 把相似数据并成一组(group)的方法。‘物以类聚,人以群分’ 不需要类别标注的算法,直接从数据中学习模式 所以,聚类是一种 数据探索 的分析方法,他帮助我们在大量数据中探索和发现数据结构1.2 相似度与距离度量 定义距离来度量表示相似度: 欧式距离,曼哈顿距离,闵氏距离..._k-means聚类分析

ARM异常及中断处理介绍(中断是异常的一种)_arm undefine exception-程序员宅基地

文章浏览阅读4.3k次,点赞6次,收藏24次。中断概念:是一个过程,是CPU在执行当前程序的过程中因硬件或软件的原因插入了另一段程序运行的过程。因硬件原因引起的中断过程的出现时不可预测的,即随机的,而软中断是事先安排好的。中断源概念:可以引起中断的信号源。中断优先级ARM处理器中有7种类型的异常,按优先级从高到低的排列如下:复位异常(Reset)、数据异常(Data Abort)、快速中断异常(FIQ)、外部中断异常(IRQ)、预取..._arm undefine exception

推荐文章

热门文章

相关标签