随笔分类 -  linux tcp/ip

摘要:tcp_sock 结构体 见此篇文章 struct tcp_sock {//在 inet_connection_sock 基础上增加了 滑动窗口 拥塞控制算法等tcp 专有 属性 /* inet_connection_sock has to be the first member of tcp_so 阅读全文
posted @ 2022-04-25 19:03 codestacklinuxer 阅读(104) 评论(0) 推荐(0) 编辑
摘要:输出pkt时分片出现位置 在发送数据时,如果数据块大于MTU 那么就会分片;ip_finish_output 中就会调用ip_fragment 进行分片 static int ip_finish_output(struct net *net, struct sock *sk, struct sk_b 阅读全文
posted @ 2022-04-23 20:16 codestacklinuxer 阅读(164) 评论(0) 推荐(0) 编辑
摘要:skb_add_data skb_add_data()将指定用户空间的数据添加到SKB的数据缓存区的尾部,操作过程如图3-22所示。如果成功则返回0,否则返回相应的错误码。参数skb为待添加数据的SKB;from为待添加的数据源,指向在用户空间的存储缓存区;copy为待添加数据的长度。 skb_tr 阅读全文
posted @ 2022-04-23 17:44 codestacklinuxer 阅读(201) 评论(0) 推荐(0) 编辑
摘要:skb_linearize:分配新的skb->data,将旧的skb->data、skb_shinfo(skb)->frags、skb_shinfo(skb)->frag_list中的内容拷贝到新skb->data的连续内存空间中,释放frags或frag_list //其中frags用于支持分散聚 阅读全文
posted @ 2022-04-23 15:51 codestacklinuxer 阅读(381) 评论(0) 推荐(0) 编辑
摘要:以前有过一篇TSO-GSO文章;目前再来回顾一下: TSO与GSO的重要区别1, TSO只有第一个分片有TCP头和IP头,接着的分段只有IP头。硬件tso由ixgbe_tso(ixgbe网卡)等函数来处理tso ,然后在请求DMA,写寄存器,通知网卡发送数据。2, GSO在分段时会调用TCP或UDP 阅读全文
posted @ 2022-04-22 17:11 codestacklinuxer 阅读(337) 评论(0) 推荐(0) 编辑
摘要:1.1 tcp_sendmsg 使用 TCP 发送数据的大部分工作都是在tcp_sendmsg函数中实现的。 int tcp_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) { struct tcp_sock *tp = tcp_s 阅读全文
posted @ 2022-04-21 23:46 codestacklinuxer 阅读(171) 评论(0) 推荐(0) 编辑
摘要:rps的全称是Receive Package Steering,rfs的全称是Receive Flow Steering,rps和rfs是google的工程师提供的两个补丁,用以在软件层面实现报文在多个cpu之间的负载均衡以及提高报文处理的缓存命中率。rps和rfs出现的原因主要有以下两个: 1、 阅读全文
posted @ 2022-04-20 18:32 codestacklinuxer 阅读(232) 评论(0) 推荐(0) 编辑
摘要:关键数据 per-cpu及无锁化 内核性能问题的一大原因就是资源共享和锁。所以,被频繁访问的关键数据需要尽可能的实现无锁化,其中一个方法是将数据做到 per-cpu 化,每个 CPU 只处理自己本地的数据,不需要访问其他 CPU 的数据,这样就可以避免加锁。就 DPVS 而言,连接表,邻居表,路由表 阅读全文
posted @ 2021-12-27 23:24 codestacklinuxer 阅读(65) 评论(0) 推荐(0) 编辑
摘要:由于UDP的无连接性,在实际client发送数据前,server是不知道四元组信息的,并且也不知道UDP通信的模式;对于类似QUIC这种 长连接 的流式数据传输而言,UDP只是承载数据的一个协议而已,以前udp主要是用于多播,目前使用UDP实现单播传输怎么处理? 当然也就可以专门创建一个socket 阅读全文
posted @ 2021-11-24 23:39 codestacklinuxer 阅读(97) 评论(0) 推荐(0) 编辑
摘要:这篇文章 netfilter: implement netfilter SYN proxy介绍了syn proxy SYNPROXY是一个TCP握手代理,该代理截获TCP连接建立的请求,原生支持是从Linux内核3.13开始的。当一个TCP请求从客户端发出时,首先与该握手代理进行三次握手,其采用SY 阅读全文
posted @ 2021-11-23 23:27 codestacklinuxer 阅读(171) 评论(0) 推荐(0) 编辑
摘要:haproxy透传用户ip-方法和原理 参考URL: https://blog.csdn.net/frockee/article/details/78641188 为了透传用户ip到后端server, proxy机器需要解决两个问题: 1.在创建到后端server的套接字时, 将用户ip作为套接字的 阅读全文
posted @ 2021-11-22 19:48 codestacklinuxer 阅读(536) 评论(0) 推荐(0) 编辑
摘要:rfcx下载地址 :https://www.ietf.org/rfc/ RFC793 : Transmission Control Protocol 该 RFC 正是定义了 TCP 协议的那份 RFC。在该 RFC 中,可以查到 TCP 的很多 细节 RFC1323 : TCP Extensions 阅读全文
posted @ 2021-11-20 17:32 codestacklinuxer 阅读(218) 评论(0) 推荐(0) 编辑
摘要:FACK 重传 FACK全称Forward Acknowledgment 算法,论文地址在这里(PDF)Forward Acknowledgement: Refining TCP Congestion Control SACK是使用了TCP扩展字段Ack了有哪些数据收到,哪些数据没有收到,他比Fas 阅读全文
posted @ 2021-11-20 17:28 codestacklinuxer 阅读(311) 评论(0) 推荐(0) 编辑
摘要:struct tcp_sock {//在 inet_connection_sock 基础上增加了 滑动窗口 拥塞控制算法等tcp 专有 属性 /* inet_connection_sock has to be the first member of tcp_sock */ struct inet_c 阅读全文
posted @ 2021-11-20 00:15 codestacklinuxer 阅读(235) 评论(0) 推荐(0) 编辑
摘要:转载来自:https://www.cnblogs.com/lshs/p/6113061.html 阅读全文
posted @ 2021-11-19 19:17 codestacklinuxer 阅读(43) 评论(0) 推荐(0) 编辑
摘要:一、RACK概述 RACK(Recent ACKnowledgment)是一种新的基于时间的丢包探测算法,RACK的目的是取代传统的基于dupthresh门限的各种快速重传及其变种。前面介绍的各种基于dup ACK的快速重传算法及其变种通过修改dupthresh门限等手段,有些可以迅速的探测到丢包, 阅读全文
posted @ 2021-11-19 19:06 codestacklinuxer 阅读(309) 评论(0) 推荐(0) 编辑
摘要:查看之前的blog:浅析sack dsack检测 根据RFC 2883,DSACK的处理流程如下: 1)look at the first SACK block : —If the first SACK block is covered by the Cumulative Acknowledgeme 阅读全文
posted @ 2021-11-19 19:01 codestacklinuxer 阅读(166) 评论(0) 推荐(0) 编辑
摘要:概念 由于网络乱序到达等原因,导致RTO超时重传,但是实际上包没有被丢弃,也就是说RTO超时是一次误判,称为虚假的重传超时(Spurious retransmission timeouts),比如RTT突然增加,比如链路的变更,或是带宽的竞争,或是链路本身rtt波动较大如无线,这些都有可能触发虚假R 阅读全文
posted @ 2021-11-19 18:49 codestacklinuxer 阅读(241) 评论(0) 推荐(0) 编辑
摘要:拥塞控制状态处理 /* open状态: open状态是常态, 这种状态下tcp 发送放通过优化后的快速路径来接收处理ack,当一个ack到达时, 发送方根据拥塞窗口是小于还是大于 满启动阈值, 按照慢启动或者拥塞避免来增大拥塞窗口 disorder 状态: 当发送方收到 DACK 或者SACK的时候 阅读全文
posted @ 2021-11-19 18:48 codestacklinuxer 阅读(266) 评论(0) 推荐(0) 编辑
摘要:拥塞窗口的调整撤销 很多网络不支持ECN,所以追踪丢失包时需要推测。重新排序(reordering)对于发送方来说通常是一个问题,因为它不能分清缺失的ACK是由于丢失还是被延迟了,所以TCP可能会做出错误的判断,不必要的调整了拥塞窗口。这时就需要一种对错误的拥塞调整做出修正的机制——拥塞窗口调整撤销 阅读全文
posted @ 2021-11-18 21:37 codestacklinuxer 阅读(263) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示