CS 144 check7: putting it all together

Exercises

经验:两边的TCP连接建立得尽快,如果服务器端启动了,客户端没有紧接着启动就连不上。

这是什么神奇的bug呢?

和我之前给域控刷SOC的版本一样遇到的bug一样。如果域控启动了,在我本地的电脑没有马上和域控的SOC通上信,就连不上了,得重启域控。

实操

服务器端:

客户端:

文件收发测试:

总结一下Lab

除了一开始写的get_URL函数,整个Lab其实就写了几个类:ByteStream、Reassembler、TCPReceiver(Wrap32)、TCPSender(TCPRetransmissionTimer)、NetworkInterface、Router。

Lab0: ByteStream

编写的ByteStream在单个线程中使用。具体ByteStream需要实现:

1、字节被写在"输入"端,并且可以以相同的顺序从"输出"端读取。

2、字节流是有限的:写入器可以结束输入,然后就不能写入更多的字节。

3、当阅读器读取到流的末尾时,它将达到"EOF"(文件的末尾),并且不能读取更多的字节。

Lab1: Reassembler

Reassembler必须处理三类知识:

1、作为流中下一个字节的字节。

2、符合流的可用容量但还无法写入的字节,因为早期的字节仍然未知。这些应该存储在Reassembler的内部

3、超出流的可用容量的字节。这些应该被丢弃。Reassembler将不会存储任何不能立即推送到字节流的字节,或者立即存储早期的字节已知的字节。

Lab2: TCPReceiver(Wrap32)

TCPReceiver从对等方的发送方接收消息(通过receive()方法),并将它们转换为对Reassembler的调用,Reassembler最终写入传入的ByteStream。

TCPReceiver的信息有责任告诉发送器:

1、第一个未组装字节的索引(ackno)。这是接收方从发送方需要的第一个字节。

2、窗口大小(window size)。输出ByteStream中的可用容量

TCPReceiver代码编写最困难的地方是TCP怎么表示在流中的每个字节的位置(seq number)。

其中,seqno是在TCP头中放置的编号,stream index是在Reassemler中放置的编号。

Lab3: TCPSender(TCPRetransmissionTimer)

TCPSender从出站字节流转换为将成为不可靠数据报的有效负载的段。TCPSender的责任:

1、跟踪window size

2、填满window

3、跟踪有哪些片段receiver没有回应。这些片段叫做outstanding片段

4、重新发送outstanding片段。

TCPRetransmissionTimer是一个超时重传定时器,责任:

1、开始、停止计时

2、累计延时

3、记录是否超时

4、扩充超时判断

Lab5: NetworkInterface

NetworkInterface抽象了一个网络接口层。其实就是实现了承上(接收外面来自硬件传输来的数据报)、启下(将数据报给到网络协议)。或者启下、承上。

Lab6: Router

Router的任务是根据路由表转发接收到的数据报:路由表是一系列规则,用于指导路由器针对任何给定的数据报应如何进行转发。

  • 发送出什么接口。
  • 下一跳的IP地址。

疑惑记录

如何使用gdb来调试lab、C++的语法、Wrap32的wrap。

使用gdb来调试lab:待我做完MIT.s081再说吧。

C++的语法:做了TinySTL再说吧。

Wrap32的wrap:先不管。我的目标是星辰大海,终有一天会理解的。

参考:

  1. CS 144
  2. CS144 | Winter 2024, Lab 0~7 记录(已开源)
相关推荐
白狐_7984 小时前
【408计算机网络|第04章·下|408-CN-04B】网络层(下):路由算法、RIP、OSPF、BGP、IPv6与路由器
计算机网络·算法·智能路由器
白狐_7982 天前
【408计算机网络|第01章|408-CN-01】计算机网络概述与体系结构:性能指标、分层、OSI与TCP/IP
网络协议·tcp/ip·计算机网络
白狐_7982 天前
【408计算机网络|第03章·上|408-CN-03A】数据链路层(上):组帧、差错控制与可靠传输
网络·网络协议·计算机网络
阿慧今天瘦了嘛3 天前
计算机组成原理概述:从硬件到软件的桥梁
计算机网络·算法
Flandern11113 天前
HTTPS(TLS 1.3)完整流程
数据库·网络协议·计算机网络·https
沐苏瑶3 天前
计算机网络核心笔记:打通 TCP/UDP 与 HTTP/HTTPS 底层逻辑(重点上)
笔记·计算机网络·http·https
ZJH__GO4 天前
网络编程v2--多客户端互通
java·运维·服务器·开发语言·计算机网络
Tsuki_tl4 天前
吃透 TCP:可靠传输完整原理【上】
网络协议·tcp/ip·计算机网络·三次握手·后端面试·四次挥手·传输层
shiyi.十一5 天前
第2章:应用层 — 知识要点与架构
网络·计算机网络·架构
sbjdhjd5 天前
SQL 注入零基础详解:原理、手工注入流程与 Sqli-Labs 靶场实战1~5关和第9关思路
数据库·sql·计算机网络·web安全·网络安全·网络攻击模型·安全架构