随笔分类 -  linux tcp/ip

摘要:概念 由于网络乱序到达等原因,导致RTO超时重传,但是实际上包没有被丢弃,也就是说RTO超时是一次误判,称为虚假的重传超时(Spurious retransmission timeouts),比如RTT突然增加,比如链路的变更,或是带宽的竞争,或是链路本身rtt波动较大如无线,这些都有可能触发虚假R 阅读全文
posted @ 2021-11-19 18:49 codestacklinuxer 阅读(380) 评论(0) 推荐(0)
摘要:拥塞控制状态处理 /* open状态: open状态是常态, 这种状态下tcp 发送放通过优化后的快速路径来接收处理ack,当一个ack到达时, 发送方根据拥塞窗口是小于还是大于 满启动阈值, 按照慢启动或者拥塞避免来增大拥塞窗口 disorder 状态: 当发送方收到 DACK 或者SACK的时候 阅读全文
posted @ 2021-11-19 18:48 codestacklinuxer 阅读(338) 评论(0) 推荐(0)
摘要:拥塞窗口的调整撤销 很多网络不支持ECN,所以追踪丢失包时需要推测。重新排序(reordering)对于发送方来说通常是一个问题,因为它不能分清缺失的ACK是由于丢失还是被延迟了,所以TCP可能会做出错误的判断,不必要的调整了拥塞窗口。这时就需要一种对错误的拥塞调整做出修正的机制——拥塞窗口调整撤销 阅读全文
posted @ 2021-11-18 21:37 codestacklinuxer 阅读(401) 评论(0) 推荐(0)
摘要:核心: 标记正在传输、已经确认段、 已经重传段,然后调整拥塞窗口以及重传算法达到最优传输! enum tcp_ca_state { TCP_CA_Open = 0, #define TCPF_CA_Open (1<<TCP_CA_Open) TCP_CA_Disorder = 1, #define 阅读全文
posted @ 2021-11-18 14:15 codestacklinuxer 阅读(928) 评论(0) 推荐(0)
摘要:之前做过关于 sack dsack相关笔记:tcp dsack 其实关于sack的不好之处 也是比较明显的:在一定程度上来说,SACK可能就像DOS攻击一样,每次遍历都要消耗大量CPU,时间复杂度为O(n^2),n为packets in flight的数量。 SACK Advantages Rece 阅读全文
posted @ 2021-11-16 20:35 codestacklinuxer 阅读(343) 评论(0) 推荐(0)
摘要:上一篇文章疑惑地方是:udp bind 同一个port 是否可行?以及如何查找sk 管理skbbuff 此时疑惑的是:udp没有bind 一个ip:port 去connect 会发生什么,connect 后发出send 调用呢?此过程中涉及到的ip port 如何填充呢? 如果socket没有con 阅读全文
posted @ 2021-11-15 19:07 codestacklinuxer 阅读(470) 评论(0) 推荐(0)
摘要:之前也聊过udp:udp dns 的思考 UDP 传输块的管理 1、udp并不是在hash 接口中将其控制块添加到udp_hash散列表中,而是在绑定端口后才将其添加到散列表中; 2、并不是所有的udp传输控制块都在散列表中管理,只有当套接字绑定了端口之后,此时可以接收发送数据,才会添加到散列表中管 阅读全文
posted @ 2021-11-12 10:23 codestacklinuxer 阅读(638) 评论(0) 推荐(0)
摘要:转载 https://segmentfault.com/a/1190000019292140 SYN Flood 攻击 TCP连接建立时,客户端通过发送SYN报文发起向处于监听状态的服务器发起连接,服务器为该连接分配一定的资源,并发送SYN+ACK报文。对服务器来说,此时该连接的状态称为半连接(Ha 阅读全文
posted @ 2021-10-11 14:40 codestacklinuxer 阅读(279) 评论(0) 推荐(0)
摘要:执行 ./install/bin/staprun ./sigkill.ko 结果发现脚本执行命令刷屏了!! debug_bin]$ ./install/bin/staprun ./sigkill.ko sig[17] SIGCHLD was sent to sh (pid:15237) by exe 阅读全文
posted @ 2021-08-03 19:53 codestacklinuxer 阅读(141) 评论(0) 推荐(0)
摘要:拓扑: client >AA-tproxy-BB server client server 之间使用tproxy 代理 从抓取报文来看,在管理连接的时候出现大量ack报文,以上不是完整报文 直接给结论吧: server主动关闭发出FIN, BB 收到FIN后,发出Fin-ack,同时去AA 主动关闭 阅读全文
posted @ 2021-06-30 23:29 codestacklinuxer 阅读(95) 评论(0) 推荐(0)
摘要:对 TCP,在网卡不支持 TSO 时,使用和不使用 GSO 的情形 TSO : 在 分析:IP层发包时:如果是gso 报文会调用 ip_finish_output_gso 来处理 static int ip_finish_output(struct sock *sk, struct sk_buff 阅读全文
posted @ 2021-06-16 19:43 codestacklinuxer 阅读(912) 评论(0) 推荐(0)
摘要:struct tcp_request_sock { struct inet_request_sock req; const struct tcp_request_sock_ops *af_specific; struct skb_mstamp snt_synack; /* first SYNACK 阅读全文
posted @ 2021-06-14 23:42 codestacklinuxer 阅读(155) 评论(0) 推荐(0)
摘要:在处理 ngbe 驱动问题时, 目前发现 hook netifrecv 会使用GRO 功能: GRO(Generic Receive Offload)的功能将多个 TCP 数据聚合在一个skb结构,然后作为一个大数据包交付给上层的网络协议栈,以减少上层协议栈处理skb的开销,提高系统接收TCP数据包 阅读全文
posted @ 2021-06-08 15:58 codestacklinuxer 阅读(1764) 评论(0) 推荐(0)
摘要:socket隔离了用户进程和协议栈,RX/TX queue隔离了协议栈和设备驱动 隔离有隔离的好处,但也有坏处!!目前存在一种 突破这种隔离的方法,让socket直接深入到设备层直接poll skb!!注意,这是一个poll操作,并不是让socket直接处理协议栈流程。socket直接poll的意思 阅读全文
posted @ 2021-06-05 14:19 codestacklinuxer 阅读(419) 评论(0) 推荐(0)
摘要:纵观virtio网络的发展, 控制平面由最原始的virtio到vhost-net协议,再到vhost-user协议,逐步得到了完善与扩充; 数据平面上,从原先集成在QEMU中或内核模块的中,到集成了DPDK数据平面优化技术的vhost-user,最终到使用硬件加速数据平面。在保留virtio这种标准 阅读全文
posted @ 2021-05-30 15:56 codestacklinuxer 阅读(384) 评论(0) 推荐(0)
摘要:1. 概述 前边系列将Virtio Device和Virtio Driver都已经讲完,本文将分析virtqueue; virtqueue用于前后端之间的数据交换,一看到这种数据队列,首先想到的就是ring-buffer,实际的实现会是怎么样的呢? 2. 数据结构 先看一下核心的数据结构: 通常Vi 阅读全文
posted @ 2021-05-30 15:48 codestacklinuxer 阅读(200) 评论(0) 推荐(0)
摘要:1. 概述 先来张图: 图中罗列了四个关键模块:Virtio Device、Virtio Driver、Virtqueue、Notification(eventfd/irqfd); Virtio Driver:前端部分,处理用户请求,并将I/O请求转移到后端; Virtio Device:后端部分, 阅读全文
posted @ 2021-05-30 15:39 codestacklinuxer 阅读(502) 评论(0) 推荐(0)
摘要:ex: test2 test3 test4 阅读全文
posted @ 2021-04-24 14:19 codestacklinuxer 阅读(153) 评论(0) 推荐(0)
摘要:对于TIMEWAIT以及FIN_WAIT_2 状态中 TCP协议栈的处理可以参考这篇文章:主动关闭TCP如何处理 对于CLOSE_WAIT LAST_ACK FIN_WAIT1 CLOSING等状态的处理,见如下: 在主动关闭方发送了FIN之后,进入FIN_WAIT_1状态,在此状态收到了ACK,则 阅读全文
posted @ 2021-04-23 16:01 codestacklinuxer 阅读(316) 评论(0) 推荐(0)
摘要:目前遇到一个问题: server 端回复报文! 设备端回复报文: 也就是盒子设备 收到http 请求转发出去时,server 回复http 200 ok后,代理设备回复了ack ,server 收到ack 立即发出rst; 所以来看看代理设备收到rst会怎么处理?如果收包队列中还有报文没有读走怎么处 阅读全文
posted @ 2021-04-21 20:39 codestacklinuxer 阅读(754) 评论(0) 推荐(0)