DNS问题排查思路参考文章 这篇博客主要是在推特中无意翻到了这篇博客,尝试以翻译的形式做一套笔记,分享的同时加强自己的记忆。 Why is DNS still hard to learn? (jvns.ca) 系统背后做的事情 当我们发起一个DNS请求的时候,基本上发生的就是下面两件事 电脑向一个被标记为resolver的服务器发送一个DNS请求。 resolver服务器首先会检查缓存,并且在必要的时候再 2023-07-30 知识记录 #DNS
网络抓包记录学习记录 这个博客主要记录了自己尝试通过抓包分析并解决一些问题的心路历程,从结果上来说很可能问题并没有解决,但是尝试解决这个问题的过程中遇到的一些问题以及自己的思考想通过写博客的方式先记录下来,在以后自己知识储备扩充的时候也许就可以回过头来看看解决下。 第一次抓包 遇到的问题 今天在尝试部署zerotier的zeronsd私有DNS服务的时候遇到了一个问题:无论是在我之前国内的服务器A上还是 2023-07-27 小技巧 #Wireshark
基础算法(一)基础算法(一) 快速排序 快排 题目链接:785. 快速排序 - AcWing题库 快排的主要思想是基于分治 找到分界点 对于一整串数组,首先找到一个值作为分界点。分界点的取值有三种取值方法: 取区间的左边界 取区间的中间位置的值 随机取一个位置 调整区间 让分界点(设为x)前面的区间部分全都是小于等于x的值,数组后面的部分则都是大于等于x的部分。 递归处理左右两段 再对区间的 2023-06-20 知识记录 #算法
使用clink优化cmd参考链接 chrisant996/clink: Bash’s powerful command line editing in cmd.exe (github.com) chrisant996/clink-flex-prompt: Flex prompt for Clink (github.com) 预先准备 苦于powershell每次都要一秒多的启动速度,偶然这两天发现了clink这个 2023-06-17 安装引导 #Windows #cmd
CS144-Lab6 计算机网络:路由转发路由转发 这个实验就是最后一个需要写代码的实验了。主要需要解决的问题是一个IP数据包传入之后,如何通过已有的路由表确定下一跳的IP地址 这个实验中主要的问题点就是CIDR的匹配。解决这个问题,我们只需要先将CIDR转为子网掩码,也就是以0为基数,左移(32 - 前缀)位,最后得到的也是子网掩码的值。但是这里有一个问题就是,当mask是uint32_t的时候,如果前缀的长度为0,那么子网掩码会变成 2023-04-24 知识记录 #cs144 #network
CS144-Lab5 计算机网络:Network Interface的功能Network Interface 在通过TCP协议将数据包进行封装准备好以后,就需要“快递公司”来对这些数据包进行分发了。这个过程可以划分为两个部分,一个是数据包在中转转发的过程中需要经过的“中转”设备有哪些,其次就是如何选择“中转”的线路。 在网络接口的部分,主要实现的逻辑是作为发送的某一个节点,在知道了下一个中转站的IP地址以后,如何将数据包进行交付。 需要实现的逻辑 首先对目前的知识进 2023-04-24 知识记录 #cs144 #network
CS144-Lab4 计算机网络:TCP Connection的实现TCP Connection TCP Connection的部分本身并不难,这个实验的主要核心是学习使用tshark或wireshark一类的工具对TCP的网络状况进行分析,找出正确或错误的数据包。 需要实现的逻辑 在这个实验中我们需要将前面写的TCP Sender和TCP Receiver两个部分的逻辑进行合并,使得两者之间可以进行数据的传输。 除了几个可以直接调用前面实验函数的函数以外,我 2023-04-10 知识记录 #cs144 #network
使用Yadm管理Linux配置文件今年暑假看Missing-course的时候开始意识到备份Linux配置文件的重要性,以后即使切换机器也可以很容易的恢复自己喜欢的编程环境。在简单搜索了几个方式以后,决定使用yadm作为管理工具,并且写了一个模板,便于分享和使用。 Yadm Dotfiles 使用说明 该仓库的主要用途为使用yadm作为管理工具,通过Github来同步自己的Dotfiles 先在自己当前环境下安装yadm 2022-12-12 小技巧 #Linux #Yadm
CS144-Lab3 计算机网络:TCP Sender的实现TCP Sender 需要实现的主要逻辑 追踪Receiver返回的windows_size(可接受的剩余容量)和ackno(已经确认接收的字符位置) 只要数据来了就直接对数据进行封装并发送,只有在窗口被消耗为零的情况下才停止发送 将没有被acknowledge的数据包存储起来,在超时的时候进行发送 实现细节 对于超时重传的时间判断,使用已经提供的tick()函数,每次调用的时候传入多 2022-12-03 知识记录 #cs144 #network
CS144-Lab2 计算机网络:TCP Receiver的实现TCP Receiver Index和Seqno的转换 为了节省在TCP Header当中的空间,在StreamReassembler里面写的index虽然是一个uint64_t的类型,但是在实际的Header中是使用一个uint32_t的seqno来进行标记位置的。对于uint32_t的seqno和uint64_t的index的相互转换则是通过以4GiB (2^32 bytes)为一个长度进 2022-11-22 知识记录 #cs144 #network