摘要: TCP重传机制 TCP要保证所有的数据包都可以到达,所以,必需要有重传机制。 超时重传机制 一种是不回ack,死等3,当发送方发现收不到3的ack超时后,会重传3。一旦接收方收到3后,会ack 回 4——意味着3和4都收到了。 但是,这种方式会有比较严重的问题,那就是因为要死等3,所以会导致4和5即 阅读全文
posted @ 2019-11-23 23:35 codestacklinuxer 阅读(546) 评论(0) 推荐(0) 编辑
摘要: 接收到数据报后,会调用tcp_event_data_recv(),不管是在慢速路径的tcp_data_queue中调用还是 在快速路径中处理接收数据后直接调用,注意(如果len <= tcp_header_len 则是没有载荷),不会调用tcp_event_date_recv处理。 tcp_even 阅读全文
posted @ 2019-11-23 23:32 codestacklinuxer 阅读(438) 评论(0) 推荐(0) 编辑
摘要: http://brendangregg.com/index.html http://brendangregg.com/linuxperf.html 性能&&排查工具大师 阅读全文
posted @ 2019-11-23 22:58 codestacklinuxer 阅读(124) 评论(0) 推荐(0) 编辑
摘要: TCP在收到数据后必须发送ACK给对端,但如果每收到一个包就给一个ACK的话会使得网络中被注入过多报文。TCP的做法是在收到数据时不立即发送ACK,而是设置一个定时器,如果在定时器超时之前有数据发送给对端,则ACK会被携带在数据中捎带过去;超时则由定时器发送ACK。这样就减少了报文的发送,提高了协议 阅读全文
posted @ 2019-11-23 22:57 codestacklinuxer 阅读(500) 评论(0) 推荐(0) 编辑
摘要: 为什么这个东西??? TCP连接只是一个“虚拟”的连接;一个TCP连接,其报文可能从不同的IP路径传输到对端。不同的传输路径,自然会经过不同的网络设备,其MTU值自然不同。这样的话,即使对端按照MSS的值发送TCP报文,也可能会超过其中间路径的MTU值,导致数据包发送失败。 所以就有了:TCP如何感 阅读全文
posted @ 2019-11-23 22:16 codestacklinuxer 阅读(1409) 评论(0) 推荐(0) 编辑
摘要: 转载自: http://www.cnhalo.net/2016/08/13/linux-tcp-nagle-cork/ http://abcdxyzk.github.io/blog/2018/07/08/kernel-nodelay_cork/ 糊涂窗口综合症(Silly Windw Syndrom 阅读全文
posted @ 2019-11-23 22:13 codestacklinuxer 阅读(1507) 评论(0) 推荐(0) 编辑
摘要: 道当我们接收到ack的时候,我们会判断sack段,如果包含sack段的话,我们就要进行处理。这篇blog就主要来介绍内核如何处理sack段 sack dsack概念 TCP在一个RTO超时后会重传数据包,激进的发送者会在一个RTO之内重传数据包,但是因为不知道具体是哪一个包丢失了,只能从重传队列的开 阅读全文
posted @ 2019-11-23 22:07 codestacklinuxer 阅读(619) 评论(0) 推荐(0) 编辑
摘要: https://blog.csdn.net/zhangskd/article/details/7196707 tcp传输往返时间是指:发送方发送tcp断开时, 到发送方接收到改段立即响应的所耗费的时间。 (1)重传队列中数据包的TCP控制块在TCP重传队列中保存着发送而未被确认的数据包,数据包skb 阅读全文
posted @ 2019-11-23 21:07 codestacklinuxer 阅读(1887) 评论(0) 推荐(0) 编辑
摘要: tcp_data_queue_ofo 在新内核的实现中ofo队列实际上是一颗红黑树。在tcp_data_queue_ofo中根据序号,查找到合适位置,合并或者添加到rbtree中。同时设置dsack和sack,准备ack给发送方。 //http://abcdxyzk.github.io/blog/2 阅读全文
posted @ 2019-11-23 21:05 codestacklinuxer 阅读(947) 评论(0) 推荐(0) 编辑
摘要: 大致的处理过程 TCP的接收流程:在tcp_v4_do_rcv中的相关处理(网卡收到报文触发)中,会首先通过tcp_check_urg设置tcp_sock的urg_data为TCP_URG_NOTYET(urgent point指向的可能不是本报文,而是后续报文或者前面收到的乱序报文),并保存最新的 阅读全文
posted @ 2019-11-23 19:43 codestacklinuxer 阅读(509) 评论(0) 推荐(0) 编辑
摘要: RTT测量 https://www.cnblogs.com/codestack/p/11919697.html 在发送端有两种RTT的测量方法,但是因为TCP流控制是在接收端进行的, 所以接收端也需要有测量RTT的方法。 /* Receiver "autotuning" code. * * The 阅读全文
posted @ 2019-11-23 17:52 codestacklinuxer 阅读(1891) 评论(0) 推荐(0) 编辑
摘要: tcp_rcv_established函数的工作原理是把数据包的处理分为2类:fast path和slow path,其含义显而易见。这样分类的目的当然是加快数据包的处理,因为在正常情况下,数据包是按顺序到达的,网络状况也是稳定的,这时可以按照fast path直接把数据包存放到receive qu 阅读全文
posted @ 2019-11-23 16:37 codestacklinuxer 阅读(1418) 评论(0) 推荐(0) 编辑
摘要: 概述 tcp握手完成后,收到数据包后,调用路径为tcp_v4_rcv->tcp_v4_do_rcv->tcp_rcv_established在tcp_rcv_established中处理TCP_ESTABLISHED状态的包。 并分为快速路径和慢速路径。快速路径只进行非常少量的处理。 快速路径:用于 阅读全文
posted @ 2019-11-23 14:54 codestacklinuxer 阅读(1103) 评论(0) 推荐(0) 编辑