茱莉亚·伊万斯

第25天:把所有的事情都弄清楚

今天我在TCP堆栈上做了更多的工作!我读了一点史蒂文斯的TCP/IP协议说明,其中我得到了一个确切的见解:我发送的每个TCP数据包(除了初始SYN)都可以设置ACK标志。

这大大简化了我的分组发送代码——我意识到基本上可以用相同的方法构造每个分组,除了标志和有效载荷。现在我可以写

def_send_syn(self): self._send(flags="S”(self.state="“同步发送”“

而不是

def send_syn(self): syn_pkt=self.ip_header/TCP(dport=self.dest_port,sport=self.src_port,标志=S”,seq=self.seq)self.listener.send(syn_pkt)self.state="“同步发送”“

现在,我处理ACK的方法基本上就是为我接收到的每个包发送一个ACK。这并非真正有效(因为如果我接收到成吨的数据包非常快,那么不经常确认是有意义的)。但这不是不正确的,这就是我想要的。

我还决定,我希望能够成为TCP服务器以及TCP客户端。所以我开始写作绑定().目前为止:

def bind(self): pass

说真的,我从来没想过绑定()以前工作过。它有管理多个连接!请排队!当人们同时给我发包裹时,我该怎么办?在我有时间之前忽略它们?我不明白。

测试非常棒。我喜欢测试。我今天重构了几乎所有的代码这种承诺代码仍然有效,因为测试。= D

然而,写作测试有点糟糕,因为它需要花费很长时间。接下来:为

  • 接收无序数据包
  • 接收重复数据包
  • 在TCP握手的服务器端