uIP是Adam Dunkels写的专为8位/16位平台上的TCP/IP协议栈。
如果你和我一样,看过一些TCP/IP方面的理论书,但苦于没有一个简单易懂的TCP/IP代码实现,感觉总是有一层面纱笼罩着神秘的TCP/IP,恭喜你,这次有福了。
uIP总共7千余行代码,核心代码2千不到,少的可以说“干瘪”,但是他却实现了很多基本的东西如arp,icmp,ip分片,TCP。
看完这个再去看linux的TCP/IP实现,应该会简单的多。
以下是我根据函数uip_process整理出的TCP状态机。
红色虚线是服务端的迁移过程,蓝色虚线是客户端的迁移过程,黑色虚线是共同的过程。
说明:若发出的包(非纯ACK)迟迟没有收到确认包,重发一定次数后,状态机均回到UIP_CLOSE,上图为简化没有画出。