没有前言 直接原理
cdn原理分为4步:
1)、用户向浏览器提供要访问的域名;
2)、浏览器调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址;
3)、浏览器使用所得到的IP地址,域名的服务主机发出数据访问请求;
4)、浏览器根据域名主机返回的数据显示网页的内容。
下面看一段c代码
#include <sys/socket.h>
#include <stdio.h>
int main()
{
char *ptr,**pptr;
struct hostent *hptr;
char str[32];
char str[32];
ptr = "www.baidu.com";
if((hptr=gethostbyname(ptr))==NULL)
{
printf("gethostbyname error for host:%s\n",ptr);
return 0;
}
//将主机规范名打印出来
printf("official hostname:%s\n",hptr->h_name);
//主机可能有多个别名,将所有别名分别打印出来
for(pptr=hptr->h_aliases;*pptr!=NULL;pptr++)
printf("alias:%s\n",*pptr);
//根据地质类型,将地址打印出来
switch(hptr->h_addrtype)
{
case AF_INET:
case AF_INET6:
pptr=hptr->h_addr_list;
//将刚才得到的所有地址都打印出来,其中调用了inet_ntop()函数
for(;*pptr!=NULL;pptr++){
printf(" address:%s\n",inet_ntop(hptr->h_addrtype,*pptr,str,sizeof(str)));
}
break;
default:
printf("unknow address type\n");
break;
}
return 0;
}
official hostname:www.a.shifen.com
alias:www.baidu.com
address:119.75.218.77
address:119.75.217.56
它用gethostbyname函数访问baidu会返回两个ip地址,一般客户端只需要一个ip地址,浏览器是不会区分哪个ip地址更有效率的,所以就需要设置服务器中间层,具体步骤是 :
1.客户端(浏览器)gethostbyname -> 公网名字服务器 -> 中间缓存层名字服务器 计算客户ip地址 返回真正的ip
2.客户端通过socket绑定ip地址访问边缘服务器 返回数据
以上步骤是我猜的 希望高手指点