DartNet网络协议栈

起因

要想弄懂一个技术,我一贯的学习路线,就去读它的源码,再动手实现它。自己动手主动学习,一点一点地将它搭建起来。一来满足自己的好奇欲,二来本质的深刻理解使我能够更放心地使用它。于是上知乎搜索如何更好的学习TCP/IP协议,就淘到了达特茅斯的lab DartNet,该实验有框架代 码。省去很多琐碎的工作。正合我意,撸起袖子开启了网络协议栈的不归路。

我将该项目的所有代码实现托管在github上, 传送门 .欢迎start

DartNet介绍

DartNet是一个类TCP/IP协议栈它的核心是简单可靠传输(SRT)层和简单网络协议 (SNP)层
Simple Reliable Transport(SRT)实现了运输层TCP的功能 ,保证数据流的可靠传输。Simple Network Protocol (SNP)实现了网络层IP的功能,完成网络层的两个重要功能:转发和选路。

DartNet整个实验运行起来的框架
DartNet

由于DartNet不能在互联网的路由器上运行我们的代码,为了绕过不能更改路由器代码的限制,于是设计了覆盖网络层(overlap),在终端系统中构建网络节点作为路由。最终DartNet的简单可靠传输(SRT)层和简单网络协议(SNP)层在构建的覆盖网络层(overlap)上运行,完成DartNet协议栈的测试与实验。

下图所示的DartNet协议栈,客户端和服务器创建套接字来完成两个主机间的数据传输。DartNet是一个自顶向下的分层架构。第n-1层为第n层提供服务和API。SRT为应用程序提供字节流的可靠传送,SNP提供类似于IP的端系统之间的转发和选路。覆盖层运行DartNet堆栈的端主机网络。

DartNet的通信协议栈
DartNet Communications Stack

在DartNet中,每对相邻节点之间存在TCP连接。在每个节点上,存在覆盖网络(overlap)层,简单网络协议(SNP)层,简单可靠传输(SRT)层和应用层

DartNet API函数调用
DartNet API

小结

接下来的几篇文章,会对每一层的功能原理,以及数据结构进行相关的介绍。上图中的API函数将在对应层一一实现