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