/GBN

简易的GBN套接字实现

Primary LanguageC++

A Simple Go Back To N Network Stack

计网实验一,简易的Go Back To N网络协议栈


一个简易的基于UDP的Go Back To N 协议网络栈以及Socket接口,并实现了一个利用该Socket 进行文件传输的小程序。只支持Linux平台。

代码规范

  • 函数名全部以大写开头,静态方法全部小写,不使用_分隔单词
  • 类名全部以大写开头
  • 成员变量以及成员静态变量统一小写,并在结尾加上_
  • 常量全部大写

协议实现规定

对于PDU帧:

  • 采用定长帧,帧格式GBNPDU.h有详细介绍
  • 定长帧中数据包部分长度统一为4KB

对于滑动窗口以及缓冲:

  • 使用std::deque进行缓冲,没有缓冲区大小限制

对于连接的结束:

  • 双方传输完数据后互相发送Fin包,不携带数据
  • 为了简化实现,接收到对方的Fin包后,只保证返回一个ACK,并且没有例如Time_wait的状态,直接结束套接字 这样可能会导致某一方无限重传最后的Fin包

对于套接字接口:

  • 套接字接口中,默认阻塞读取并无超时,默认非阻塞写入并且无限重传。写入只会将数据包写入缓冲区 读取结束的套接字返回0。写入已关闭的则抛出异常。
  • 其他错误一律以异常进行抛出
  • 没有监听状态

其他:

  • 日志输出到标准错误输出