用户态协议栈
文章平均质量分 91
丰恒谷
拥有一颗改变世界的心,可惜找不到我的源代码!
展开
-
用户态协议栈之epoll实现
1 epoll编程问题 对于数据传输send/recv这些接口的而言;如何判断send数据,对方有没有接收成功? 采用send返回值无意义。,send发送数据只是将数据拷贝到协议栈,而数据的发送是协议栈自动处理的(何时发送也是由自己组装的). 2 粘包分包问题 产生原因:应用程序多次调用send后,只是将数据从用户空间拷贝到内核协议栈。而对于协议栈很容将两次的send包一起发送。 解决方案:a): tcp应用层协议添加长度域 b)每个包加上分割符 c)定长包(比较low,不推荐使用) 3 多个线程,并发的给原创 2021-08-25 14:41:59 · 405 阅读 · 0 评论 -
用户态协议栈之滑动窗口与定时器
1 tcp帧头 source prot:源端口 16位 Destination port:目的端口 16位 sequence Number:序列号 32位 ack number:应答序号 32位 header length:头长度 4bits resv:4位 CWR:1位 ECE:1位 URG:1位 ACK:1位 PSH:1位 RST:1位 SYN:1位 FIN:1位 Windows size:窗口大小 16bits tcp checksum:校验和 Ugrent pointer: options:选项原创 2021-08-24 00:42:11 · 248 阅读 · 1 评论 -
用户态协议栈之tcp/ip设计
1 解决问题 对于服务器而言,正常的接受一帧Data的过程,客户端先通过网络发送一帧数据到网卡,再经过协议栈,最后通过系统调用叨叨应用程序。具体的流程图如下: 针对上面的两个流程,涉及到两次拷贝(网卡拷贝到协议栈,协议栈拷贝到应用程序),所以就产生了用户态协议栈,将协议栈网络解析作为应用程序的一部分。 2 用户态协议栈原理 1 定义组成图 用户态协议栈主要是用来减少拷贝。采用通过网卡的nmap,DMA方式,将网卡映射到内存中,底层采用DMA直接通道。应用程序直接去内存中取。DMA无copy,copy赋值原创 2021-08-22 15:45:47 · 1114 阅读 · 2 评论