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