[C++ 网络协议编程] 域名及网络地址

这篇具有很好参考价值的文章主要介绍了[C++ 网络协议编程] 域名及网络地址。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. DNS服务器

DNS(Domain Name System):是对IP地址和域名(如:www.baidu.com等)进行相互转换的系统,其核心是DNS服务器。

[C++ 网络协议编程] 域名及网络地址,网络协议,网络协议,c++

我们输入的www.baidu.com是域名,是一种虚拟地址,而非实际地址,DNS服务器会将这个虚拟地址转换为实际地址,即IP地址。若我们直接输入IP地址,则不会发生上面的转换。

如果想获取某个域名对应的IP地址,则可以cmd输入:ping www.baidu.com

如果想获取本机注册的默认的DNS服务器地址,则可以cmd输入:nslookup(windows)、nslookup server(linux)

所有计算机都记录着默认DNS服务器地址,通过这个DNS服务器就能得到相应域名的IP地址信息,如果本机的默认DNS服务器解析不了这个域名,那么就会逐级往上询问,直到根DNS服务器,它直到应该向哪个DNS服务器询问,再向下级DNS专递解析请求,得到IP地址后,返回给发起请求的主机。所以,DNS就是一种层次化管理的分布式数据库系统

[C++ 网络协议编程] 域名及网络地址,网络协议,网络协议,c++

2. IP地址和域名之间的转换

IP地址和域名之间的关系:一个IP地址可以对应多个域名,一个域名也可以对应多个IP地址。

通常来说,域名是不会变化的,但是IP地址是可以随时变化的,因为服务器会变化,尤其是像那种有多个服务器进行负载均衡的,就有多个IP地址,所以,我们在编写程序时,要通过用户输入的域名来解析获取IP地址。

2.1 gethostbyname函数(利用域名获取IP地址)

#include <netdb.h>
struct hostnet* gethostbyname(const char* hostname);
成功返回hostnet结构体,失败返回Null指针
struct hostent
{
    char* h_name;
    char** h_aliases;
    int h_addrtype;
    int h_length;
    char** h_addr_list;
}
参数 含义
h_name 存有官方域名。官方域名代表某一主页,不是所有公司都有
h_aliases 其它可以访问这个域名所指向主页的域名。同一个IP可以绑定多个域名。
h_addrtype 地址族信息,若是IPv4则是AF_INET,IPv6则是AF_INET6
h_length 保存IP地址字节长度。IPV4则是4,IPV6则是16
h_addr_list

以整数形式保存域名对应的IP地址,每个数组实际上是以in_addr结构体存储的。

struct in_addr
{
    in_addr_t      s_addr;        //32位IPv4地址
}

所以在使用时,要进行强制转换为in_addr* 类型

hostent参数结构:

[C++ 网络协议编程] 域名及网络地址,网络协议,网络协议,c++

h_addr_list数组实际上是以in_addr结构体存储的,为什么不直接以in_addr数组存储,而是以字符数组存储?

答:是因为为了兼容IPv6地址信息,考虑到通用性,所以用字符数组存储。

那为什么不用void*存储?

答:是因为当时还没有对void指针标准化,当时无法明确指出指针类型时采用的就是char指针。 文章来源地址https://www.toymoban.com/news/detail-663605.html

2.2 gethostbyaddr函数(利用IP地址获取域名)

#include<netdb.h>
struct hostent* gethostbyaddr(
const char* addr,          //含有IP地址信息的in_addr结构体指针,同时为了传递IPv4地址之外的其他信息,所以声明为char指针
socklen_t len,             //向第一个参数传递的地址信息字节数,IPv4为4,IPv6为16
int family                 //地址族信息
);

到了这里,关于[C++ 网络协议编程] 域名及网络地址的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络协议】聊聊DNS协议如何域名解析和负载均衡

    我们知道如果使用IP地址进行访问网站,很难进行记忆,所以DNS的作用是将域名转换成对应的IP地址。如果全世界都使用同一台DNS服务器,那么DNS服务器本身需要保证服务的高可用、高性能,以及分布式等。最好的方式就是分层。 根DNS服务器:返回顶级域名DNS服务器的IP地址

    2024年02月05日
    浏览(50)
  • 网络层&&IP协议的基本原理 数据链路层&&ARP协议 域名解析以及一些重要技术

    网络层作用:在复杂的网络环境中确定一个合适的路径。 tcp/ip协议,tcp解决可靠性与效率,ip提供在网络中传输的能力。 传输层决定了单次向下交付数据包的大小。 IP(Internet Protocol)协议是一种网络层协议,用于在互联网上进行数据传输。它定义了数据如何在网络中进行分

    2024年02月15日
    浏览(42)
  • 【网安 | 网络协议】ARP协议(地址解析协议)

    在使用nmap时可以使用-PR指令,通过发送ARP请求包进行主机存活探测。 那么这一过程的原理是什么呢? 在了解什么是ARP协议后,问题就迎刃而解了。 地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。 在网络中各个主机相互信任的基础

    2024年02月04日
    浏览(36)
  • NAT协议(网络地址转换协议)详解

    NAT协议是将IP数据报头中的IP地址转换为另外一个IP地址的过程,主要用于实现私有网络访问公有网络的功能 。这种通过使用少量的IP地址代表较多的私有IP地址的方式,将有助于减少IP地址空间的枯竭。 IPv4地址随着用户的增多压力不断增大,但是每一个路由器的IP地址下面都

    2024年02月14日
    浏览(42)
  • 【计算机网络】网络基础--协议/网络协议/网络传输流程/地址管理

    网络的发展分为一下几个阶段: 独立模式: 计算机之间相互独立: 此时计算机之间是相互独立的,每个人在执行任务的时候是独立的,需要等待前一个将任务完成之后,自己才能进行执行任务,是串行执行的,效率很低。 网络互联: 多台计算机连接在一起, 完成数据共享:

    2024年02月03日
    浏览(45)
  • 【计网笔记06】计算机网络之应用层协议(SMTP协议、POP3协议、HTTP协议)、DNS域名系统、电子邮件系统

    这篇文章,主要介绍计算机网络之应用层协议(SMTP协议、POP3协议、HTTP协议)、DNS域名系统、电子邮件系统。 目录 一、计算机网络之应用层 1.1、应用层介绍 1.2、网络应用模型

    2024年02月08日
    浏览(53)
  • 计算机网络:MAC地址 & IP地址 & ARP协议

    如果两台主机通过一条链路通信,它们不需要使用地址就可以通信,因为连接在信道上的主机只有他们两个。换句话说, 使用点对点信道的数据链路层不需要使用地址 。 再来看使用共享信道的总线型局域网: 总线上的某台主机要给另一台主机发送帧,表示帧的信号通过总线

    2024年04月17日
    浏览(46)
  • 计算机网络 day4 IP地址的两部分-A、B、C、D、E五类IP地址-私有地址-子网掩码-DNA服务器-域名解析服务

    目录 三创网络拓扑结构图:  普通家庭网络拓扑结构图:(也可以直接使用 子母路由器 (母:无线路由器)(子:信号放大器、中继器)) 网络层:(network layer) 搜索IP地址所在地:iP地址查询--手机号码查询归属地 | 邮政编码查询 | iP地址归属地查询 | 身份证号码验证在

    2024年02月01日
    浏览(49)
  • 以用户角度理解网络-静态IP和动态IP-DNS域名系统-网关- DHCP协议- 一次简单的网络请求

    本机的IP地址 子网掩码 网关的IP地址 DNS的IP地址 静态IP指的是计算机每次开机都分到相同的IP地址,动态IP指的是计算机开机后自动地分配一个IP地址,不用人为设定。 动态IP所使用的协议就是DHCP协议。 TCP/IP提供了通过IP地址来连接到设备的功能,但对用户来讲,记住某台设备

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包