
Linux
文章平均质量分 88
hui6075
这个作者很懒,什么都没留下…
展开
-
Linux 协议栈之虚假重传超时恢复F-RTO:Forward RTO-Recovery
虚假重传超时恢复算法能使得TCP发送方从虚假RTO中有效的恢复重传。基本思想:RTO有两种原因,一是网络上确实发生了丢包,二是由于IP层转发路径延迟不同造成的RTO。对于后者,称之为F-RTO,RTO发生之前的ACK应该发生在RTO发生之后到达发送端。如果一直收不到ACK,证明确实是发生了丢包,此时发送端应该执行go-back-N重传算法。根据以上原则,F-RTO发送端应该:如果第一个RTO重传的原创 2016-04-29 14:27:23 · 1912 阅读 · 1 评论 -
Linux NAPI/非NAPI 网卡驱动部分
NAPI:中断来了,在上半部中把net_device加入poll_list,sk_buff仍然在设备自身队列中,然后下半部软中断过程中轮询所有的设备,用设备的poll函数把自己的sk_buff交给上层。非NAPI:中断来了,在上半部中把sk_buff放到本CPU的多设备共享队列中,然后下半部软中断过程中用默认poll函数(process_backlog)处理共享队列中的包。除了NAPI和非原创 2016-04-24 21:53:40 · 1533 阅读 · 0 评论 -
Linux read()实现
sys_read: 通过fd得到对应的file结构,然后调用vfs_read; vfs_read: 各种权限及文件锁的检查,然后调用file->f_op->read(若不存在则调用do_sync_read)。file->f_op是从对应的inode->i_fop而来,而inode->i_fop是由对应的文件系统类型在生成这个inode时赋予的。file->f_op->read很可能就等同于d原创 2016-05-12 17:57:02 · 3979 阅读 · 0 评论 -
Linux之epoll族实现分析
epoll_create:epoll_ctl:epoll_wait:原创 2016-05-18 01:10:28 · 590 阅读 · 0 评论 -
Linux e1000网卡驱动流程
对于各种DMA、NAPI、RFS/RPS、SO_REUSEPORT,如果不了解底层,那么对于做应用层优化也只是空中楼阁。本文以e1000驱动为例,试图理清网络驱动层的数据流、逻辑流。关于网卡接收到以太流的DMA过程:网卡DMA引擎在主存中为DMA开辟一段连续空间存放Buffer Descriptor(ptr/length/status),一致性映射(dma_alloc_cohr原创 2016-04-20 04:01:34 · 3819 阅读 · 0 评论 -
Linux 网络层实现
netif_receive_skb(skb){ 如果开启了netpoll,直接netpoll_rx()然后返回;?????????????? 如果使用了bond功能,就把skb->dev设置成设备组中的主设备,skb->realdev还是原来的设备; 入帧计数; 初始化每层协议的raw指针,后续访问都用raw指针; 如果开启了流量控制,且流量控制裁决为TC_NCL原创 2016-04-24 22:01:46 · 629 阅读 · 0 评论 -
Linux 传输层实现
====================================进入传输层(TCP)==============================tcp_v4_rcv(skb){ 不是发给本机的报文则丢弃; 取TCP头,检查头部长度,取出完整TCP头,校验;因为每层头部包含选项,所以长度不固定,需要这么多步骤来取完整头。 根据TCP头来设置skb->cb[]控制块中原创 2016-04-24 22:03:06 · 606 阅读 · 0 评论 -
Linux网络协议栈之TCP socket/bind/listen/connect/accept/close/shutdown
本文把Linux-2.6.11.12源码中文注释版中的注释收集出来,整理在下面。如有侵权,请告知。listen()传输层调用tcp_listen_start():tcp_listen_start(){ /* 初始连接队列长度上限 */ /* 初始化传输控制块中与延时发送ACK有关的数据结构 */ /* 为管理连接请求块的散列表分配存储空间,如果失败则退出 */原创 2016-04-17 23:04:14 · 759 阅读 · 0 评论