CS144 Lab:Lab7
最简单的 “Lab” 🌟个人仓库传送门(包含所有完整初始代码🌟 Lab 7 Lab 7 什么代码都不需要写。Just putting it all together ! 这个 Lab 将之前 7 个实验里所有实现的内容全部整合在一起,并完成一些测试,与真实网络进行通信。 下面是我们实现的最终网络技术栈的结构图, 测试 对话通信 上图中你可能会注意到…
CS144 Lab:Lab6
这个 Lab6 就更 easy 啦 Lab6 介绍 在这个实验中,我们将完成一个简易路由器,其功能是:对于给定的数据包,确认发送接口以及下一跳的 IP 地址。为了简化实验难度,该实验中无需处理任何复杂路由协议,实验代码推荐只需 25-30 行。 这个 Lab 不需要依赖之前 Lab0-4 实现的 TCP 协议,只需要实现两个接口。 添加一条路由规则…
CS144 Lab:Lab5
这个 Lab 相比前面的 Lab4 就要简单很多啦 Lab5 介绍 Lab5 的任务是实现网络接口 Network Interface(也被称为适配器),具体来说,就是实现 ARP 协议。 下面是官方的解释图,一张图概况了 7 个 Lab 的是做了什么工作。这个 Network Interface 就是用于负责网络层和数据链路层之间的数据交换。 T…
CS144 Lab:Lab4
因为旅游、配环境问题等原因这个 Lab4 拖得有点久,现在终于完成了,虽然性能还不是最优。 Lab4 介绍 TCPConnection 需要将 TCPSender 和 TCPReceiver 结合,实现成一个 TCP 终端,同时收发数据。 据说这应该是整个 Project 中最难的 Lab 了,完成这个 Lab 后将完整实现 TCP 协议。文档表示…
CS144 Lab:Lab3
磨了 3 天才搞完,第 4 天才来得及写文档 😭 Lab3 介绍 本次实验是完成 TCPSender 部分,我也把文档来回读了好几遍才弄懂各个细节 TCPSender 负责将数据以 TCP 报文的形式发送,其需要完成的功能有: 将 ByteStream 中的数据以 TCP 报文形式持续发送给接收者。 处理 TCPReceiver 传入的 ackno…
CS144 Lab:Lab2
Lab2 介绍 在 Lab2,我们将实现一个 TCPReceiver,用以接收传入的 TCP Segment 并将其转换成用户可读的数据流。 TCPReceiver 除了将读入的数据写入至 ByteStream 中以外,它还需要告诉发送者两个属性: 第一个未组装的字节索引,称为确认号 ackno,它是接收者需要的第一个字节的索引。 第一个未组装的字…
CS144 Lab:Lab1
由于写这个 Lab1 的笔记距离完成 Lab1 实验1 已经过去了很久,所以可能会比较简略 Lab1 介绍 在 Lab1 中,需要实现一个流重组器:将传入的没一份打乱的字节流重新组合形成原来的有序的字节流。即实现 StreamReassembler 类。 为什么要这样做? TCP 对处理乱序和重复包的健壮性来自于它能将字节流的任意摘录拼接回原始流的…
CS144 Lab:Lab0
Lab0 首先有两个小实验热身,然后就是配置开发环境,熟悉实验环境,并实现 ByteStream 据了解,CS144 的 Lab 现在有两个大版本,一个是 Sponge 版本,一个是 Minnow,Sponge 是旧版本,也是大多数人完成实验的版本,8 个 Project 带你实现整个 TCP/IP 协议栈。而 Minnow 是 2023 年春季新…
Linux 下搭建嵌入式开发环境
什么,都 3202 年了,你还在用丑陋的 Keil 开发嵌入式?不如来试试在 Linux 下使用现代化编辑器/IDE 优雅地开发嵌入式。本文将介绍如何在 Linux 下搭建完整的嵌入式开发工具链,以WSL2 + VSCode为例进行嵌入式开发。 环境准备 WSL2 Ubuntu 22.04 LTS VSCode GNU Make 4.3, cmak…