bind中基数树的建立

BIND9新引入了视图的概念,简单的来讲就是能根据不同的来源IP来返回不同的数据。其中网段的存储,网段的快速匹配都是用基数树来实现的。下面是BIND创建基数树的代码。

相关结构体

BIND的IP地址结构

1
2
3
4
5
6
7
8
9
10
11
struct isc_netaddr {
unsigned int family;
union {
struct in_addr in;
struct in6_addr in6;
#ifdef ISC_PLATFORM_HAVESYSUNH
char un[sizeof(((struct sockaddr_un *)0)->sun_path)];
#endif
} type;
isc_uint32_t zone;
};

tinyhttpd源码解析,最简单的HTTP服务器

简介

tinyhttpd 是一个不到 500 行的超轻量型 Http Server,全部用ANSI C编写,用来学习非常不错,可以帮助我们真正理解服务器程序的本质。
看完所有源码,真的感觉有很大收获,无论是 unix 的编程,还是 GET/POST 的 Web 处理流程,都清晰了不少。废话不说,开始我们的 Server 探索之旅。

主要函数

所有函数的声明

1
2
3
4
5
6
7
8
9
10
11
12
void accept_request(int);  
void bad_request(int);
void cat(int, FILE *);
void cannot_execute(int);
void error_die(const char *);
void execute_cgi(int, const char *, const char *, const char *);
int get_line(int, char *, int);
void headers(int, const char *);
void not_found(int);
void serve_file(int, const char *);
int startup(u_short *);
void unimplemented(int);

C语言发送http请求

C语言发送http请求和普通的socket通讯,原理是一样的.无非就三步connect()连上服务器,send()发送数据,recv()接收数据.只不过发送的数据有特定的格式.下面的是简单发送一个http请求的例子

DNS介绍

简介

域名系统(Domain Name System)是一种分层的分布式命名系统,用于连接到互联网或互联网上的计算机、服务或其他资源。它将更容易记忆的域名转换为使用底层网络协议定位和识别计算机服务和设备所需的数字IP地址.

域名服务器发展历史

DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,它是由解析器和域名服务器组成的。域名服务器是指保存有该网络中所有主机的域名和对应IP地址,并具有将域名转换为IP地址功能的服务器。
域名系统的发展要从ARPAnet网络的发展说起,DNS就是为了解决ARPAnet的一些问题而开发的。ARPAnet是美国国防部在20世纪60年代建立的一个试验性计算机网络,