# tcpip_tiny **Repository Path**: meha555/tcpip_tiny ## Basic Information - **Project Name**: tcpip_tiny - **Description**: 一个TCP/IP网络协议栈,实现了以太网、ARP、IP、UDP、TCP协议,以及socket接口. - **Primary Language**: C - **License**: Not specified - **Default Branch**: master - **Homepage**: https://lishutong1024.github.io - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 39 - **Created**: 2023-09-07 - **Last Updated**: 2023-09-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # diy-tcpip ## 介绍 从0手写一个TCP/IP网络协议栈,实现了以太网、ARP、IP、UDP、TCP协议,以及socket接口。 该项目配套相应的付费视频,介绍了完整的TCP/IP协议栈的实现,如对课程有兴趣,欢迎访问:[点击访问课程](https://lishutong1024.github.io) ![alt 课程链接](course.png) **特别注意:本项目代码非《从0手写TCP/IP协议栈》课程的配套代码,而是最终项目效果的演示代码。如需课程配套代码,请将订单截图发给我。联系方式在上述链接中可以找到。** ## # 功能特性 - 这里是列表文本标准Socket接口: - 接口:socket、bind、connnect、close - 接口:sendto、recvfrom、send、recv、read、write、setsockopt - 这里是列表文本具体类型 - 基于SOCK_RAW:允许应用程序收发IP数据包 - 基于SOCK_DGRAM:允许应用程序收发UDP数据包 - 基于SOCK_STREAM(开发中):允许应用程序收发TCP数据包 - 多线程 - 支持多线程操作同一socket接口,即允许不同线程进行同时读写 - 支持同时创建任意多个应用,无论是客户端还是服务器 - 数据包 - 将数据包组织多块链接的方式,提升内存的利用效率 # 协议支持 - 以太网协议:支持以太网数据包的收发和数据包的处理 - 地址解析协议ARP - 完整支持ARP的查询和响应过程 - 支持无回报(免费)ARP包的发送 - 使用可配置的大小的ARP缓存,可提升查询效率 - 使用定时期周期性地更新ARP缓存,自动清理无效的缓存项 - 可使用输入的ARP包和IP包进行缓存的更新,减少网络通信量 - IPv4协议 - 支持基本的IP数据包的收发、校验和的计算 - 支持IP数据包的分片与重组、重组超时处理 - 内置路由表,从而可以通过路由器上网 - ICMPv4协议 - 支持对输入的echo请求进行响应(即可以让别人ping自己) - 提供发送目的端口不可达的信息,以便通知其它机器访问错误 - UDP协议 - 基本的UDP输入输出处理,将输入包正确传递给应用程序 - TCP协议 - 支持TCP状态机切换 - 基于计时器的数据发送超时重传 - 根据RTT情况自适应计算RTO,减少数据重发操作 - 基于重复ACK的快速重传 - 零窗口与TCP持续计时器 - 应用层协议: - 网络时间服务NTP - 实现了客户端,可以查询NTP服务器获取当前时间 - 简单文件传输协议TFTP - 实现TFTP客户端:可以从服务器端上传和下载文件 - 实现TFTP服务器:允许客户端向服务器上传和下载文件 - 支持带选项的TFTP请求处理 - 数据包丢失时可自动重发 - 超文本传输协议HTTP: - 实现多线程版本的HTTP服务器,可以为客户端提供网页访问功能 - 域名解析协议DNS - 支持域名解析,转换成IP地址 - 支持添加多个DNS服务器 - 缓存DNS查询结果,超时自动删除 - 允许多个任务同时进行查询