【第三届青训营-后端专场】课后作业 -《打开抖音互联网会发生什么》

1,658 阅读2分钟

大家直接在评论区发布答案就可以哦~

课后作业1- UDP socket 实现 ack,感知丢包重传

作业要求:

  1. 学会 UDP socket 编程
  1. 先从简单的 ack 学习,客户端等待 ack 再发包
  1. 什么时候客户端认为是丢包?
  1. 重传怎么考虑效率?
  1. 能不能不阻塞只穿丢掉的中间的段?

课后作业2- 三台同网段内的服务器,模拟实现一个路由器

方法一: Linux 操作系统配置法

提示:

  1. 了解Linux的路由配置方式
  1. 确保是同网段直连可达的环境。在三台机器上另外配置IP网段和路由
  1. 一台机器做客户端,一台机器做路由器,一台机器做服务端
  1. 客户端配置到达服务器的下一跳指向路由器,路由器上配置到达服务端的路由

方法二: 用户态 socket 编程实现简易 route 软件

提示:

  1. 收到指定的包后,做转发
  1. 注意是修改报文的 MAC ,不是修改 IP
  1. 实现一个对称路由。这样可以实现 TCP 交互
  1. 可以通过 ping 来验证
  1. 可以支持 traceroute 吗?

    < 作业提交截止时间:5月17日 10:00前 >

正确答案:

课后作业1:

开放性问题,答案只要合理即可。具体实现可以参考github.com/networkprot…

根据作业要求的顺序一点点去实现,由简单ack功能入手到复杂的流控。

课后作业2:

开放性问题,答案只要合理即可。具体实现可以参考:

  1. 静态路由表的注入可以在代码内用全局变量表示,也可以写一个配置文件去注入。
  1. socket编程收raw包
  1. 解析raw包的IP层数据,根据静态路由表找到目标IP的下一跳
  1. 获取下一跳的MAC地址(linux有命令/系统调用接口,也可以自己实现简单的arp请求,保存目标MAC地址)
  1. 修改目标MAC地址为下一跳的MAC,修改源MAC地址为本机的出口网卡MAC。
  1. ttl记得-1,然后转发数据包。