DNS的作用就是用来找到域名所对应的 IP地址
位于 网络层 的 IP 协议,大家所熟知的 IP地址 就是由它进行封装并传往下一层
位于 传输层 的 TCP/UDP 两个协议, 一个是面向连接(STREAM), 一个是面向数据(DGRAM)的
MAC地址:对于网络上的主机而言,每一台主机就有一个专属的 MAC地址
端口号则是相当于一个房子的门,这个比喻在各大教材中广泛引用,但也的确贴切,假设 IP地址 是房子的地址,那么到了别人家要知道门在哪才行。
一个完整的应用程序传输数据时候 封装 的过程(从右向左依次封装)如图:
其中端口号实际上就是 应用程序的信息,接收数据时的 拆解 顺序与 封装 正好相反。
MAC地址是 48bit 的, 前24bit由 IEEE 分配, 后24bit 由厂商分配。原则上是唯一的.
域名 和 IP地址 的互查
gethostbyname 用于域名查找 IP信息及各类信息
struct hostent * gethostbyname(const char * hostname)
struct hostent 是存储查找到的各类型信息,后方会有介绍
hostname 即要查询的域名
gethostbyaddr 用于IP地址查找 域名及各类信息
struct hostent * gethostbyaddr(const char * addr, socklen_t len, int family)
addr 是要查询的 IP地址,之所以是 const char * 是因为C语言历史遗留的原因,实际上其类型应为 struct in_addr *(IPv4)
len 地址的长度,即 IPv4 为4, IPv6 为16
family 即协议的种类, IPv4 为 AF_INET, IPv6 为 AF_INET6