Linux协议栈学习与积累

2 篇文章 0 订阅
  1. linux内核对于套接字的管理会用到锁,linux使用如下两个接口进行加解锁lock_sock,release_sock。但是这两个函数不仅仅是完成了加解锁的操作。
  • lock_sock: 首先尝试拿到获取锁的资格,这个资格由一个变量记录sk->sk_lock.owned,这个变量用spin_lock保护。这个这个变量值不为0,则说明有其它上下文占用了这个锁,则进一步的会将当前进程挂到一个等待队列中,然后主动调度CPU,等待唤醒。被唤醒之后,将sk->sk_lock.owned赋值,然后去执行目标锁的加锁操作,
  • release_sock: 首先收取backlog queue上的数据(若有的话),然后将sk->sk_lock.owned改为0,释放锁。唤醒锁上的等待者。

概念
TSO(TCP Segmentation Offload): 是一种利用网卡来对大数据包进行自动分段,降低CPU负载的技术。 其主要是延迟分段。

GSO(Generic Segmentation Offload): GSO是协议栈是否推迟分段,在发送到网卡之前判断网卡是否支持TSO,如果网卡支持TSO则让网卡分段,否则协议栈分完段再交给驱动。 如果TSO开启,GSO会自动开启。

以下是TSO和GSO的组合关系:

l GSO开启, TSO开启: 协议栈推迟分段,并直接传递大数据包到网卡,让网卡自动分段

l GSO开启, TSO关闭: 协议栈推迟分段,在最后发送到网卡前才执行分段

l GSO关闭, TSO开启: 同GSO开启, TSO开启

l GSO关闭, TSO关闭: 不推迟分段,在tcp_sendmsg中直接发送MSS大小的数据包
链接

  1. GRO是一种优化机制,让包尽可能在底层合并,给上层呈现一个大的数据包
    驱动调用napi_gro_receive触发GRO流程
    4.显式拥塞通告(ECN)及其在Linux上的实现添加链接描述

  2. syn cookie

  3. NAPIlinux新的网卡数据处理API,用于提高网络处理效率

  4. linux 内核协议栈的相关控制参数。/proc/sys/net/ipv4

  5. __careful_cmp(x, y, op) 对于其中使用到的__is_constexpr的说明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值