一,工具简介

tcpsynbl工具以直方图的形式显示SYN到达时的TCP SYN积压大小。这可以让我们了解应用程序距离达到积压限制并丢弃SYN(导致SYN重传产生性能问题)还有多远。

TCP SYN 数据包则通常用于启动 TCP 三次握手过程的第一次握手。

二,代码示例

#!/usr/bin/env python

from __future__ import print_function
import argparse
from bcc import BPF
from time import sleep

# load BPF program
bpf_text = """
#include <net/sock.h>

typedef struct backlog_key {
    u32 backlog;
    u64 slot;
} backlog_key_t;

BPF_HISTOGRAM(dist, backlog_key_t);

int do_entry(struct pt_regs *ctx) {
    struct sock *sk = (struct sock *)PT_REGS_PARM1(ctx);

    backlog_key_t key = {};
    key.backlog = sk->sk_max_ack_backlog;
    key.slot = bpf_log2l(sk->sk_ack_backlog);
    dist.atomic_increment(key);

    return 0;
};
"""
examples = """examples:
    ./tcpsynbl          # trace syn backlog
    ./tcpsynbl -4       # trace IPv4 family only
    ./tcpsynbl -6       # trace IPv6 family
03-29 01:26