随笔分类 - linux tcp/ip
摘要:核心: 标记正在传输、已经确认段、 已经重传段,然后调整拥塞窗口以及重传算法达到最优传输! enum tcp_ca_state { TCP_CA_Open = 0, #define TCPF_CA_Open (1<<TCP_CA_Open) TCP_CA_Disorder = 1, #define
阅读全文
摘要:之前做过关于 sack dsack相关笔记:tcp dsack 其实关于sack的不好之处 也是比较明显的:在一定程度上来说,SACK可能就像DOS攻击一样,每次遍历都要消耗大量CPU,时间复杂度为O(n^2),n为packets in flight的数量。 SACK Advantages Rece
阅读全文
摘要:上一篇文章疑惑地方是:udp bind 同一个port 是否可行?以及如何查找sk 管理skbbuff 此时疑惑的是:udp没有bind 一个ip:port 去connect 会发生什么,connect 后发出send 调用呢?此过程中涉及到的ip port 如何填充呢? 如果socket没有con
阅读全文
摘要:之前也聊过udp:udp dns 的思考 UDP 传输块的管理 1、udp并不是在hash 接口中将其控制块添加到udp_hash散列表中,而是在绑定端口后才将其添加到散列表中; 2、并不是所有的udp传输控制块都在散列表中管理,只有当套接字绑定了端口之后,此时可以接收发送数据,才会添加到散列表中管
阅读全文
摘要:转载 https://segmentfault.com/a/1190000019292140 SYN Flood 攻击 TCP连接建立时,客户端通过发送SYN报文发起向处于监听状态的服务器发起连接,服务器为该连接分配一定的资源,并发送SYN+ACK报文。对服务器来说,此时该连接的状态称为半连接(Ha
阅读全文
摘要:执行 ./install/bin/staprun ./sigkill.ko 结果发现脚本执行命令刷屏了!! debug_bin]$ ./install/bin/staprun ./sigkill.ko sig[17] SIGCHLD was sent to sh (pid:15237) by exe
阅读全文
摘要:拓扑: client >AA-tproxy-BB server client server 之间使用tproxy 代理 从抓取报文来看,在管理连接的时候出现大量ack报文,以上不是完整报文 直接给结论吧: server主动关闭发出FIN, BB 收到FIN后,发出Fin-ack,同时去AA 主动关闭
阅读全文
摘要:对 TCP,在网卡不支持 TSO 时,使用和不使用 GSO 的情形 TSO : 在 分析:IP层发包时:如果是gso 报文会调用 ip_finish_output_gso 来处理 static int ip_finish_output(struct sock *sk, struct sk_buff
阅读全文
摘要:struct tcp_request_sock { struct inet_request_sock req; const struct tcp_request_sock_ops *af_specific; struct skb_mstamp snt_synack; /* first SYNACK
阅读全文
摘要:在处理 ngbe 驱动问题时, 目前发现 hook netifrecv 会使用GRO 功能: GRO(Generic Receive Offload)的功能将多个 TCP 数据聚合在一个skb结构,然后作为一个大数据包交付给上层的网络协议栈,以减少上层协议栈处理skb的开销,提高系统接收TCP数据包
阅读全文
摘要:socket隔离了用户进程和协议栈,RX/TX queue隔离了协议栈和设备驱动 隔离有隔离的好处,但也有坏处!!目前存在一种 突破这种隔离的方法,让socket直接深入到设备层直接poll skb!!注意,这是一个poll操作,并不是让socket直接处理协议栈流程。socket直接poll的意思
阅读全文
摘要:纵观virtio网络的发展, 控制平面由最原始的virtio到vhost-net协议,再到vhost-user协议,逐步得到了完善与扩充; 数据平面上,从原先集成在QEMU中或内核模块的中,到集成了DPDK数据平面优化技术的vhost-user,最终到使用硬件加速数据平面。在保留virtio这种标准
阅读全文
摘要:1. 概述 前边系列将Virtio Device和Virtio Driver都已经讲完,本文将分析virtqueue; virtqueue用于前后端之间的数据交换,一看到这种数据队列,首先想到的就是ring-buffer,实际的实现会是怎么样的呢? 2. 数据结构 先看一下核心的数据结构: 通常Vi
阅读全文
摘要:1. 概述 先来张图: 图中罗列了四个关键模块:Virtio Device、Virtio Driver、Virtqueue、Notification(eventfd/irqfd); Virtio Driver:前端部分,处理用户请求,并将I/O请求转移到后端; Virtio Device:后端部分,
阅读全文
摘要:ex: test2 test3 test4
阅读全文
摘要:对于TIMEWAIT以及FIN_WAIT_2 状态中 TCP协议栈的处理可以参考这篇文章:主动关闭TCP如何处理 对于CLOSE_WAIT LAST_ACK FIN_WAIT1 CLOSING等状态的处理,见如下: 在主动关闭方发送了FIN之后,进入FIN_WAIT_1状态,在此状态收到了ACK,则
阅读全文
摘要:目前遇到一个问题: server 端回复报文! 设备端回复报文: 也就是盒子设备 收到http 请求转发出去时,server 回复http 200 ok后,代理设备回复了ack ,server 收到ack 立即发出rst; 所以来看看代理设备收到rst会怎么处理?如果收包队列中还有报文没有读走怎么处
阅读全文
摘要:Google研究发现TCP三次握手是页面延迟时间的重要组成部分,所以他们提出了TFO:在TCP握手期间交换数据,这样可以减少一次RTT。根据测试数据,TFO可以减少15%的HTTP传输延迟,全页面的下载时间平均节省10%,最高可达40%.论文见:google_TFO_研究 用户向Server发送SY
阅读全文
摘要:接着昨天的继续看,说完收包再来说发包! 发包逻辑主要涉及到:tcp三次握手时:发送syn--TCP_SYN_SENT状态、syn_ack TCP_NEW_SYN_RECV状态、TCP_LISTEN 、TCP_ESTABLISHED 等状态时发包 首先看下 作为服务端时, TCP_LISTEN 、TC
阅读全文