随笔分类 -  linux tcp/ip

摘要:1. 概述 前边系列将Virtio Device和Virtio Driver都已经讲完,本文将分析virtqueue; virtqueue用于前后端之间的数据交换,一看到这种数据队列,首先想到的就是ring-buffer,实际的实现会是怎么样的呢? 2. 数据结构 先看一下核心的数据结构: 通常Vi 阅读全文
posted @ 2021-05-30 15:48 codestacklinuxer 阅读(204) 评论(0) 推荐(0)
摘要:1. 概述 先来张图: 图中罗列了四个关键模块:Virtio Device、Virtio Driver、Virtqueue、Notification(eventfd/irqfd); Virtio Driver:前端部分,处理用户请求,并将I/O请求转移到后端; Virtio Device:后端部分, 阅读全文
posted @ 2021-05-30 15:39 codestacklinuxer 阅读(507) 评论(0) 推荐(0)
摘要:ex: test2 test3 test4 阅读全文
posted @ 2021-04-24 14:19 codestacklinuxer 阅读(154) 评论(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 阅读(327) 评论(0) 推荐(0)
摘要:目前遇到一个问题: server 端回复报文! 设备端回复报文: 也就是盒子设备 收到http 请求转发出去时,server 回复http 200 ok后,代理设备回复了ack ,server 收到ack 立即发出rst; 所以来看看代理设备收到rst会怎么处理?如果收包队列中还有报文没有读走怎么处 阅读全文
posted @ 2021-04-21 20:39 codestacklinuxer 阅读(759) 评论(0) 推荐(0)
摘要:Google研究发现TCP三次握手是页面延迟时间的重要组成部分,所以他们提出了TFO:在TCP握手期间交换数据,这样可以减少一次RTT。根据测试数据,TFO可以减少15%的HTTP传输延迟,全页面的下载时间平均节省10%,最高可达40%.论文见:google_TFO_研究 用户向Server发送SY 阅读全文
posted @ 2021-04-01 19:06 codestacklinuxer 阅读(248) 评论(0) 推荐(0)
摘要:接着昨天的继续看,说完收包再来说发包! 发包逻辑主要涉及到:tcp三次握手时:发送syn--TCP_SYN_SENT状态、syn_ack TCP_NEW_SYN_RECV状态、TCP_LISTEN 、TCP_ESTABLISHED 等状态时发包 首先看下 作为服务端时, TCP_LISTEN 、TC 阅读全文
posted @ 2021-03-06 18:37 codestacklinuxer 阅读(177) 评论(0) 推荐(0)
摘要:目前在处理盒子产品时,发现wan口和lan口收发报文时还在走内核路由逻辑,因为从wan口进来的包如果转发只能从lan口转发出去,所以此时路由查找是个多余动作!!此处应该是一个可以优化点,来试一试吧!!mark,也不想不通为啥一个产品这么多年都没有人去思考这些!!! 工作中还是要多想一想为什么?不要随 阅读全文
posted @ 2021-03-05 14:04 codestacklinuxer 阅读(226) 评论(1) 推荐(1)
摘要:这段时间 tcp 本地lo 接口进程间通信 总是出现 tcp 三次握手 失败!! 同时前段时间驱动以及Tcp/ip 协议栈出现问题 那怎样调试呢?目前 一般都是ftrace kprobe 在使用kprobe 过程中发现,kprobe 是对每条指令都可以hook,如果hook 每个函数的时候, 想知道 阅读全文
posted @ 2021-03-01 20:59 codestacklinuxer 阅读(193) 评论(0) 推荐(0)
摘要:由于:linux 新内核tcp/ip协议栈中添加了 TCP_NEW_SYN_RECV; 所以 在判断sk是否为transparent 时 需要考虑其状态; static bool tproxy_sk_is_transparent(struct sock *sk) { switch (sk->sk_s 阅读全文
posted @ 2021-02-24 20:34 codestacklinuxer 阅读(363) 评论(0) 推荐(0)
摘要:问题: IPv6 cps一旦超过100cps,tproxy 代理失效!问题有点严重!! 先来看代码吧!!貌似也看不了多少, 还有10分钟就放假了 马上就是 春节14.5天的假期了 继续看看!!! 对于驱动接口分析如下: 驱动收包进入hook;hook处理分析进入协议栈, ipv6_rcv >tcpv 阅读全文
posted @ 2021-02-07 11:49 codestacklinuxer 阅读(353) 评论(0) 推荐(0)
摘要:问题如下: 目前能想到的工具有: netstat -antp lsof -i:port sar -n SOCK 查看tcp创建的连接数 tcpdump 由于是 本地回环接口上出现这个情况,认为排除网络抖动情况,ping lo 接口 网络延时稳定; ifconfig 接口没有丢包; 查看 somaxc 阅读全文
posted @ 2021-02-02 18:16 codestacklinuxer 阅读(499) 评论(0) 推荐(0)
摘要:收集整理质料如下: 1:网卡硬件-->2 内核缓存队列-->3协议层 >4用户recv使用的buff 转载:https://zhuanlan.zhihu.com/p/52397230 net.core.optmem_max = 20480 net.core.rmem_default = 229376 阅读全文
posted @ 2021-01-18 16:49 codestacklinuxer 阅读(190) 评论(0) 推荐(0)
摘要:alloc_skb:分配一个数据长度为size的network buffer {skb+data_buffer} 1 /** 2 * __alloc_skb - allocate a network buffer 3 * @size: size to allocate 4 * @gfp_mask: 阅读全文
posted @ 2021-01-18 12:04 codestacklinuxer 阅读(2277) 评论(0) 推荐(0)
摘要:今天打算在医院陪父母看病度过一天,还好目前病情算是稳定!!辛劳一生,到头来累出一身病,也许这是中国大多数农民的归宿!!!!! 珍惜和父母呆在一起的日子!听听父亲话说当年修路修桥的峥嵘岁月!顺便也写写blog 1、网卡发生中断,网卡中断服务函数执行收包动作,以igb驱动为例。 一般都会调用igb_cl 阅读全文
posted @ 2021-01-16 20:54 codestacklinuxer 阅读(475) 评论(0) 推荐(0)
摘要:刚离开时,总想着四海为家,仗剑行走天涯!一副数风流人物还看今朝! 惊涛拍浪时,偶而有个电话,却又烦唠叨而言它!殊不知以后也没多少时间听父母叨叨了!!! 不哆嗦了!!今天查bug 又涉及到了skb_clone 以及skb_copy ;那就来看看吧!顺便做做笔记,免得总是忘了,好记性不如乱博客 对skb 阅读全文
posted @ 2021-01-15 21:13 codestacklinuxer 阅读(278) 评论(0) 推荐(0)
摘要:问题:目前设备进行1g吞吐测试时,时不时出现tx流量最大700M 首先查看dev 收发包: sar -n DEV 同时 cat /proc/net/dev 可以看出实际上没有出现丢包(eth7 eth8) 接收数据包的流程 网卡收到数据包。 将数据包从网卡硬件缓存转移到服务器内存中。 通知内核处理。 阅读全文
posted @ 2021-01-08 12:19 codestacklinuxer 阅读(370) 评论(0) 推荐(0)
摘要:之前有一篇文章说到了RTT RTT__RTO TCP使用一个重传定时器来在缺少数据接收端反馈的情况下保证数据到达,这个定时器时间被称为RTO(retrnasmission timeout) 从这个报文中可以看到:服务端的报文没有被确认导致发生超时重传 那要怎么处理这个问题呢? RTO基本算法:htt 阅读全文
posted @ 2021-01-07 18:15 codestacklinuxer 阅读(330) 评论(0) 推荐(0)
摘要:client-- proxy server; 四次挥手走完, client 发出syn ,proxy 代理发出syn后,收到 server的ack后就发出了rst。 分析报文特征如下:proxy的syn的seq ()大于 server回复ack的seq? 为什么会出现这样的问题呢? 说到这个问题,就 阅读全文
posted @ 2020-11-27 20:46 codestacklinuxer 阅读(391) 评论(0) 推荐(0)
摘要:在如下网络层面下,代理(比如Envoy nginx )执行额外的L7策略(Health checks, service discovery, load balancing, mutual TLS),其开销比较大,主要体现在传统的TCP/IP协议栈路径比较冗余,导致其开销比较大;就像同一主机上unix 阅读全文
posted @ 2020-11-07 13:15 codestacklinuxer 阅读(858) 评论(0) 推荐(0)