11 2019 档案
摘要:ACK发送状态的转换图 ACK的发送状态清除 当成功发送ACK时,会删除延迟确认定时器,同时清零ACK的发送状态标志icsk->icsk_ack.pending ACK发送事件主要做了:更新快速确认模式中的ACK额度,删除ACK延迟定时器,清零icsk->icsk_ack.pending。 在快速确
阅读全文
摘要:TCP重传机制 TCP要保证所有的数据包都可以到达,所以,必需要有重传机制。 超时重传机制 一种是不回ack,死等3,当发送方发现收不到3的ack超时后,会重传3。一旦接收方收到3后,会ack 回 4——意味着3和4都收到了。 但是,这种方式会有比较严重的问题,那就是因为要死等3,所以会导致4和5即
阅读全文
摘要:接收到数据报后,会调用tcp_event_data_recv(),不管是在慢速路径的tcp_data_queue中调用还是 在快速路径中处理接收数据后直接调用,注意(如果len <= tcp_header_len 则是没有载荷),不会调用tcp_event_date_recv处理。 tcp_even
阅读全文
摘要:http://brendangregg.com/index.html http://brendangregg.com/linuxperf.html 性能&&排查工具大师
阅读全文
摘要:TCP在收到数据后必须发送ACK给对端,但如果每收到一个包就给一个ACK的话会使得网络中被注入过多报文。TCP的做法是在收到数据时不立即发送ACK,而是设置一个定时器,如果在定时器超时之前有数据发送给对端,则ACK会被携带在数据中捎带过去;超时则由定时器发送ACK。这样就减少了报文的发送,提高了协议
阅读全文
摘要:为什么这个东西??? TCP连接只是一个“虚拟”的连接;一个TCP连接,其报文可能从不同的IP路径传输到对端。不同的传输路径,自然会经过不同的网络设备,其MTU值自然不同。这样的话,即使对端按照MSS的值发送TCP报文,也可能会超过其中间路径的MTU值,导致数据包发送失败。 所以就有了:TCP如何感
阅读全文
摘要:转载自: 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
阅读全文
摘要:道当我们接收到ack的时候,我们会判断sack段,如果包含sack段的话,我们就要进行处理。这篇blog就主要来介绍内核如何处理sack段 sack dsack概念 TCP在一个RTO超时后会重传数据包,激进的发送者会在一个RTO之内重传数据包,但是因为不知道具体是哪一个包丢失了,只能从重传队列的开
阅读全文
摘要:https://blog.csdn.net/zhangskd/article/details/7196707 tcp传输往返时间是指:发送方发送tcp断开时, 到发送方接收到改段立即响应的所耗费的时间。 (1)重传队列中数据包的TCP控制块在TCP重传队列中保存着发送而未被确认的数据包,数据包skb
阅读全文
摘要:tcp_data_queue_ofo 在新内核的实现中ofo队列实际上是一颗红黑树。在tcp_data_queue_ofo中根据序号,查找到合适位置,合并或者添加到rbtree中。同时设置dsack和sack,准备ack给发送方。 //http://abcdxyzk.github.io/blog/2
阅读全文
摘要:大致的处理过程 TCP的接收流程:在tcp_v4_do_rcv中的相关处理(网卡收到报文触发)中,会首先通过tcp_check_urg设置tcp_sock的urg_data为TCP_URG_NOTYET(urgent point指向的可能不是本报文,而是后续报文或者前面收到的乱序报文),并保存最新的
阅读全文
摘要:RTT测量 https://www.cnblogs.com/codestack/p/11919697.html 在发送端有两种RTT的测量方法,但是因为TCP流控制是在接收端进行的, 所以接收端也需要有测量RTT的方法。 /* Receiver "autotuning" code. * * The
阅读全文
摘要:tcp_rcv_established函数的工作原理是把数据包的处理分为2类:fast path和slow path,其含义显而易见。这样分类的目的当然是加快数据包的处理,因为在正常情况下,数据包是按顺序到达的,网络状况也是稳定的,这时可以按照fast path直接把数据包存放到receive qu
阅读全文
摘要:概述 tcp握手完成后,收到数据包后,调用路径为tcp_v4_rcv->tcp_v4_do_rcv->tcp_rcv_established在tcp_rcv_established中处理TCP_ESTABLISHED状态的包。 并分为快速路径和慢速路径。快速路径只进行非常少量的处理。 快速路径:用于
阅读全文
摘要:TIME WAIT 带来的问题 先引用一个名言: The TIME_WAIT state is our friend and is there to help us (i.e., to let old duplicate segments expire in the network). Instea
阅读全文
摘要:正常来说 TCP 收消息过程会涉及三个队列: Backlog Queue sk->sk_backlog Prequeue tp->ucopy.prequeue Receive Queue sk->sk_receive_queue 在2017年的一个patch(https://lwn.net/Arti
阅读全文
摘要:要成功添加一条邻居表项,需要满足两个条件: 1. 本机使用该表项; 2. 对方主机进行了确认。 同时,表项的添加引入了NUD(Neighbour Unreachability Detection)机制,从创建NUD_NONE到可用NUD_REACHABLE需要经历一系列状态转移, 而根据达到两个条件
阅读全文
摘要:tcp_v4_connect /* This will initiate an outgoing connection. tcp_v4_connect函数初始化一个对外的连接请求,创建一个SYN包并发送出去, 把套接字的状态从CLOSE切换到SYN_SENT,初始化TCP部分选项数据包序列号、 窗口
阅读全文
摘要:正常情况下主动关闭连接的一端在连接正常终止后,会进入TIME_WAIT状态,存在这个状态有以下两个原因(参考《Unix网络编程》): 1、保证TCP连接关闭的可靠性。如果最终发送的ACK丢失,被动关闭的一端会重传最终的FIN包,如果执行主动关闭的一端没有维护这个连接的状态信息,会发送RST包响应,导
阅读全文
摘要:/* * This is a TIME_WAIT sock. It works around the memory consumption * problems of sockets in such a state on heavily loaded servers, but * without v
阅读全文
摘要:惊群:概念就不解释了。 直接说正题:惊群问题一般出现在那些web服务器上,Linux系统有个经典的accept惊群问题,这个问题现在已经在内核曾经得以解决,具体来讲就是当有新的连接进入到accept队列的时候,内核唤醒且仅唤醒一个进程来处理。 /* * The core wakeup functio
阅读全文
该文被密码保护。
摘要:epoll_create:函数实现分析 /* * Open an eventpoll file descriptor. */ SYSCALL_DEFINE1(epoll_create1, int, flags) { int error, fd; struct eventpoll *ep = NULL
阅读全文
摘要:IO多路复用之epoll总结 1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空
阅读全文
摘要:套接字缓存之sk_buff结构 https://www.cnblogs.com/wanpengcoder/p/7529486.html 来此此处 sk_buff结构用来描述已接收或者待发送的数据报文信息;skb在不同网络协议层之间传递,可被用于不同网络协议,如二层的以太网协议,三层的ip协议,四层的
阅读全文
摘要:1.5.1 当邻居项不处于NUD_CONNECTD状态时,不允许快速路径发送报文,函数neigh_resolve_output 用于慢而安全的输出,通常用初始化neigh_ops结构 来实例output函数,当邻居从NUD_CONNECT转到非NUD_CONNECT的时候,使用neigh_suspe
阅读全文
摘要:用户态与内核态交互通信的方法不止一种,sockopt是比较方便的一个,写法也简单.缺点就是使用 copy_from_user()/copy_to_user()完成内核和用户的通信, 效率其实不高, 多用在传递控制 选项 信息,不适合做大量的数据传输用户态函数:发送:int setsockopt (
阅读全文
摘要:1.4.1:状态定时器回调neigh_timer_handler 设置定时器来处理那些需要定时器处理的状态,定时器回调函数为neigh_timer_handler;函数会根据状态机变换规则对状态进行切换,切换状态后,如果需要更新输出函数则更新,并更新定时器下一次超时时间;其中NUD_INCOMPLE
阅读全文
摘要:2.1 邻居子系统结构体解析 struct neigh_table 代表的是一种邻居协议的接口(比如 ARP)。 struct neigh_params 代表的是邻居协议在每个设备上的不同参数。 struct neigh_ops 邻居对应的一些操作函数。 struct hh_cache 缓存 L2
阅读全文
摘要:1.3.1邻居系统状态图(老外给的解释) NUD_VALID : An entry is considered to be in the NUD_VALID state if its state is any one of the following, whichrepresent neighbor
阅读全文
摘要:1.什么是邻居子系统 邻居:是指同一个IP局域网内的主机,或者邻居之间在三层上仅相隔一跳距离。 邻居子系统:提供了三层协议地址与二层协议地址之间的映射关系。同时还提供了二层首部缓存,用以加速发送数据报文, 以ipv4 发送数据为例,在发送数据时,先进行路由查找,如果查找到目的地址路径,再查看邻居表中
阅读全文

浙公网安备 33010602011771号