{'fraction_non_alphanumeric': 0.021360069747166522, 'fraction_numerical': 0.0, 'mean_word_length': 5.152815013404826, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Improving the dependability of computer networks

Current network protocols deal with network failures. Reliable transport protocols such as TCP can handle transient packet losses. Routing protocols such as OSPF can detect persistent failures and adapt to a new network topology. However, the time these mechanisms need to recover from failures is unpredictable, making them inadequate for real-time communications that require QoS (Quality-of-Service) guarantees. 
A persistent failure can result in a long service disruption. To provide timely and successful recovery in case of persistent failures, we need to reserve spare resources a priori. This thesis investigates several ways to use spare resources to improve the dependability of real-time communications. First, we developed an algorithm for choosing backup routes. Spare resources, such as bandwidth, are limited and, thus, multiple channels can contend over these limited resources. To prevent contention among backup channels, we need to carefully select backup routes. We preselect backup routes to achieve fast recovery, and steer the real-time traffic disrupted by a link failure through the backup routes. Second, we address the problem of managing spare resources. By reserving spare resources for each real-time channel, routers incur high overhead because they need to maintain routing information for each backup channel. As the number of backup channels increases, the cost of maintaining information may become unacceptably high. To cope with this problem, we reserve a pool of spare resources for all backup channels, and defer allocation of resources to a specific channel until they are needed. 
In addition to failures of links or routers, the disruption of Domain Name System (DNS) affects the dependability of computer networks. The current DNS replicates name servers to improve its availability. Although the replication can overcome sporadic failures such as OS crashes and power outages, it is not effective for malicious attacks, which may cause all local servers to fail. We developed a distributed approach for DNS: each client machine maintains a small DNS cache and shares the cache contents with other client machines. Our approach provides a continuous DNS service even when all local name servers fail.