用户态协议栈

本文探讨了用户态协议栈的概念,旨在提高系统性能和降低瓶颈。介绍了netmap和dpdk的区别,以及从C10K到C10M的并发解决方案。详细讨论了用户态协议栈的实现,包括TCP/IP滑动窗口、Epoll的实现,并解释了TCP的可靠传输机制和为何某些场景下会选择UDP。最后提到了Epoll的水平触发和边缘触发的工作模式。
摘要由CSDN通过智能技术生成

章节

为什么要实现用户态协议栈?

  • 深入理解网络协议栈
  • 走进Linux内核开发的第一步
  • 加入开源组织,提升技术实力
  1. 用户态协议栈
  2. dpdk/netmap
  3. c10M的问题,千万并发

客户端发送数据到服务器,服务器接收数据的步骤:
1. 从网卡copy到内核协议栈
2. 从内核协议栈copy到应用程序

提升系统的性能,降低瓶颈,我们可以设计用户态协议栈,实现零拷贝(直接从网卡copy到应用程序,减少了一次拷贝操作)

为了使网卡的数据,直接到达我们应用程序的方案:

  1. mmap
  2. pf_ring, libcap, raw_socket.

既然原生的socket可以实现抓取到链路层的数据,是因为网卡抓取到链路层的数据不代表是抓取到网卡中的数据,使用原生的soket也会经过两次拷贝,从网卡copy到内核协议栈,从内核协议栈copy到应用程序(只是此时不会经过tcp协议栈)

mmap把外设中的数据直接映射到内存中,有了mmap的映射,就有了实现直接抓取网卡数据,netmap就是这样实现的。

netmap与dpdk对比

netmap只是纯软件方式的开源框架,dpdk的使用场景,稳定性比netmap广

C10K->C10M

c10K的解决方案:
(1) 在没有epoll出现时:

  • select/poll
  • 多线程/多进程
    select/poll存在的问题:
    • 数量(1. 所有io集合的数量; 2. 设置有少量的io会被触发,成为就绪状态):一个select监控1024个fd
    • 拷贝():
      多线程/多进程存在的问题:
    • 内存:
      (2) epoll的出现解决了的问题:
      • 数量:所有io集合的数量,把所有需要的网络io放在一起,少量io会被触发程序就绪状态
      • 拷贝: 一次一次添加到整个集合

数据结构:
把所有需要的网络io放在一起
少量io会就绪

C10M的解决方案:
需要从以下几个方面来考虑

  1. 内存
  2. CPU
  3. 磁盘
  4. 网卡
  5. 应用程序
  6. 操作系统

网卡, NIC(network interface card),netmap

nic是对网卡的一层软件级封装;
etho是nic针对物理网卡的实例化对象;

netmap由两部分组成:

  1. 内核模块—>对nic子系统进行了扩展
  2. 应用程序接口

用户态协议栈之TCPIP设计

首先抛出疑问:

  1. 滑动窗口如何实现?
  • 滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值