Skip to content

Latest commit

 

History

History
62 lines (42 loc) · 1.76 KB

routing.md

File metadata and controls

62 lines (42 loc) · 1.76 KB

路由处理(本地 dns 缓存)

核心功能就是根据 url 中的 host 参数快速得到对应的 IP 地址,避免在连接时进行 dns 解析,耗费时间。

数据结构

/**
 * --------------------------------------------------
 * |    hash    |       host        |       ip      |
 * --------------------------------------------------
 * |   0x1234   |  www.jiedev.com   | 192.168.0.122 |
 * |   0x5678   |  www.github.com   | 192.168.0.123 |
 * |   xxxxxx   |  xxxxxxxxxxxxxx   | xxx.xxx.x.xxx |
 * --------------------------------------------------
 */

typedef struct routing {
    uint32_t            hash;
    char                *host;
    char                *ip;
} routing_t;


static routing_t _routing_table[ROUTING_TABLE_SIZE] = {0};

维护一个路由表,保存了 hostip 的关系,路由表的默认大小是 ROUTING_TABLE_SIZE,值为 10,可由用户修改,路由表的核心就是数组,在实际处理过程中会循环记录,当路由表不足的时候,会选择先缓存的表覆盖掉。

外部函数

  • host 与 ip 关系的记录。

    void routing_record(const char* host, const char *ip);
  • host 与 ip 关系的搜索。

    char *routing_search(const char* host);

内部实现

  • 哈希算法的实现,其中忽略了大小写字母。

    static int _routing_to_lower(int c)
    
    static uint32_t _routing_hash(const char* str)
  • 匹配算法的实现,依旧是忽略的大小写,它与哈希算法的配合实现了时间复杂度为 O(n+m)

    static int _routing_match(const char *str, const char *cmd)

上一篇tls 加密传输

下一篇network 网卡