计算机 · 2021年12月19日 0

Linux高性能服务器读书笔记

第一章 TCP/IP协议详解

1.1.4

OSPF(Open Shortest Path First,开放最短路径优先)协议,是一种动态路由更新协议,用于路由器之间的通信,以告知对方路由各自的路由信息。

DNS协议

RFC1035

一篇老外的博客

DNS报文头部信息的格式:
                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      ID                       |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |QR|   Opcode  |AA|TC|RD|RA|   Z    |   RCODE   |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    QDCOUNT                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    ANCOUNT                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    NSCOUNT                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                    ARCOUNT                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+


ID:一对查询的标识;
QR:查询/应答标志,0表示这是一个查询报文,1表示这是一个应答报文;
opcode:定义查询和应答的类型。0表示标准查询,1表示反向查询(由IP地址获取主机域名),2表示请求服务器状态;
AA:授权应答标志,仅由应答报文使用。1表示域名服务器是授权服务器;
TC:截断标志,仅当DNS报文使用UDP报文服务时使用。1表示DNS报文超过512字节,并被截断;
RD:递归查询标志,1表示执行递归查询,即如果当前DNS服务器不能解析某个域名,那么它应该向其他域名服务器执行递归查询,直到查询到结果返回给客户端;
0表示这是迭代查询,即如果当前DNS服务器不能解析某个域名,那么它就将自己知道的其他DNS服务器的IP地址返回给客户端,客户端可以自己考虑向这些其他DNS服务器发送查询请求;
RA:允许递归标志;仅由应答报文使用,1表示DNS服务器支持递归查询;
zero:未使用的3位,必须都设置为0;
rcode:4位返回码,表示应答的状态;0表示无错误,3表示域名不存在;
QDCOUNT表示DNS报文后面跟的查询问题的个数,ANCOUNT表示应答资源记录数,NSCOUNT表示授权资源记录数,ARCOUNT表示额外资源记录数;


查询问题的格式(Question section format):

                                    1  1  1  1  1  1
      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                                               |
    /                     QNAME                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     QTYPE                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     QCLASS                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

QNAME封装了要查询的域名,www.google.com就被表示为{3,'w','w','w',6,'g','o','o','g','l','e',3,'c','o','m',0}这样的字符数组,规律很明显,就是每一级域名前面填一个数字,表示该级域名对应的部分的字符个数,最后用0结尾。这个QNAME可能占奇数个字节,也可能占偶数个字节。
QTYPE:16位,表示查询类型,1表示类型A,获取目标主机的IP地址,5表示类型CNAME,获取目标主机的别名;12表示类型PTR,反向查询;
QCLASS:通常为1,表示获取IP地址;

应答资源记录、授权资源记录、额外资源记录都使用同一种格式,即资源记录(Resource Record, RR)格式。


      0  1  2  3  4  5  6  7  8  9  0  1  2  3  4  5
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                                               |
    /                                               /
    /                      NAME                     /
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TYPE                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                     CLASS                     |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                      TTL                      |
    |                                               |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
    |                   RDLENGTH                    |
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
    /                     RDATA                     /
    /                                               /
    +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+

NAME:该资源记录对应的域名,与question section format中QNAME含义相同;
TYPE:16位,类型,与question section format中类型含义相同;
CLASS:16类,类,与question section format中类含义相同;
TTL:32位,生存时间,表示该查询记录结果可被本地客户端程序缓存多长时间;
RDLENGTH:16位,资源数据长度,表示后面的RDDATA有多少个字节;
RDDATA:资源数据;

第14章 多线程编程

  • 使用pipe和eventfd给处于epoll_wait状态的线程发消息