1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of tcpdrop, the Linux BPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard Workertcpdrop prints details of TCP packets or segments that were dropped by the 5*387f9dfdSAndroid Build Coastguard Workerkernel, including the kernel stack trace that led to the drop: 6*387f9dfdSAndroid Build Coastguard Worker 7*387f9dfdSAndroid Build Coastguard Worker# ./tcpdrop.py 8*387f9dfdSAndroid Build Coastguard WorkerTIME PID IP SADDR:SPORT > DADDR:DPORT STATE (FLAGS) 9*387f9dfdSAndroid Build Coastguard Worker20:49:06 0 4 10.32.119.56:443 > 10.66.65.252:22912 CLOSE (ACK) 10*387f9dfdSAndroid Build Coastguard Worker tcp_drop+0x1 11*387f9dfdSAndroid Build Coastguard Worker tcp_v4_do_rcv+0x135 12*387f9dfdSAndroid Build Coastguard Worker tcp_v4_rcv+0x9c7 13*387f9dfdSAndroid Build Coastguard Worker ip_local_deliver_finish+0x62 14*387f9dfdSAndroid Build Coastguard Worker ip_local_deliver+0x6f 15*387f9dfdSAndroid Build Coastguard Worker ip_rcv_finish+0x129 16*387f9dfdSAndroid Build Coastguard Worker ip_rcv+0x28f 17*387f9dfdSAndroid Build Coastguard Worker __netif_receive_skb_core+0x432 18*387f9dfdSAndroid Build Coastguard Worker __netif_receive_skb+0x18 19*387f9dfdSAndroid Build Coastguard Worker netif_receive_skb_internal+0x37 20*387f9dfdSAndroid Build Coastguard Worker napi_gro_receive+0xc5 21*387f9dfdSAndroid Build Coastguard Worker ena_clean_rx_irq+0x3c3 22*387f9dfdSAndroid Build Coastguard Worker ena_io_poll+0x33f 23*387f9dfdSAndroid Build Coastguard Worker net_rx_action+0x140 24*387f9dfdSAndroid Build Coastguard Worker __softirqentry_text_start+0xdf 25*387f9dfdSAndroid Build Coastguard Worker irq_exit+0xb6 26*387f9dfdSAndroid Build Coastguard Worker do_IRQ+0x82 27*387f9dfdSAndroid Build Coastguard Worker ret_from_intr+0x0 28*387f9dfdSAndroid Build Coastguard Worker native_safe_halt+0x6 29*387f9dfdSAndroid Build Coastguard Worker default_idle+0x20 30*387f9dfdSAndroid Build Coastguard Worker arch_cpu_idle+0x15 31*387f9dfdSAndroid Build Coastguard Worker default_idle_call+0x23 32*387f9dfdSAndroid Build Coastguard Worker do_idle+0x17f 33*387f9dfdSAndroid Build Coastguard Worker cpu_startup_entry+0x73 34*387f9dfdSAndroid Build Coastguard Worker rest_init+0xae 35*387f9dfdSAndroid Build Coastguard Worker start_kernel+0x4dc 36*387f9dfdSAndroid Build Coastguard Worker x86_64_start_reservations+0x24 37*387f9dfdSAndroid Build Coastguard Worker x86_64_start_kernel+0x74 38*387f9dfdSAndroid Build Coastguard Worker secondary_startup_64+0xa5 39*387f9dfdSAndroid Build Coastguard Worker 40*387f9dfdSAndroid Build Coastguard Worker20:49:50 12431 4 127.0.0.1:8198 > 127.0.0.1:48280 CLOSE (RST|ACK) 41*387f9dfdSAndroid Build Coastguard Worker tcp_drop+0x1 42*387f9dfdSAndroid Build Coastguard Worker tcp_v4_do_rcv+0x135 43*387f9dfdSAndroid Build Coastguard Worker __release_sock+0x88 44*387f9dfdSAndroid Build Coastguard Worker release_sock+0x30 45*387f9dfdSAndroid Build Coastguard Worker inet_stream_connect+0x47 46*387f9dfdSAndroid Build Coastguard Worker SYSC_connect+0x9e 47*387f9dfdSAndroid Build Coastguard Worker sys_connect+0xe 48*387f9dfdSAndroid Build Coastguard Worker do_syscall_64+0x73 49*387f9dfdSAndroid Build Coastguard Worker entry_SYSCALL_64_after_hwframe+0x3d 50*387f9dfdSAndroid Build Coastguard Worker 51*387f9dfdSAndroid Build Coastguard Worker[...] 52*387f9dfdSAndroid Build Coastguard Worker 53*387f9dfdSAndroid Build Coastguard WorkerThe last two columns show the state of the TCP session, and the TCP flags. 54*387f9dfdSAndroid Build Coastguard WorkerThese two examples show packets arriving for a session in the closed state, 55*387f9dfdSAndroid Build Coastguard Workerthat were dropped by the kernel. 56*387f9dfdSAndroid Build Coastguard Worker 57*387f9dfdSAndroid Build Coastguard WorkerThis tool is useful for debugging high rates of drops, which can cause the 58*387f9dfdSAndroid Build Coastguard Workerremote end to do timer-based retransmits, hurting performance. 59*387f9dfdSAndroid Build Coastguard Worker 60*387f9dfdSAndroid Build Coastguard Worker 61*387f9dfdSAndroid Build Coastguard WorkerUSAGE: 62*387f9dfdSAndroid Build Coastguard Worker 63*387f9dfdSAndroid Build Coastguard Worker# ./tcpdrop.py -h 64*387f9dfdSAndroid Build Coastguard Workerusage: tcpdrop.py [-4 | -6] [-h] 65*387f9dfdSAndroid Build Coastguard Worker 66*387f9dfdSAndroid Build Coastguard WorkerTrace TCP drops by the kernel 67*387f9dfdSAndroid Build Coastguard Worker 68*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 69*387f9dfdSAndroid Build Coastguard Worker -4, --ipv4 trace IPv4 family only 70*387f9dfdSAndroid Build Coastguard Worker -6, --ipv6 trace IPv6 family only 71*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 72*387f9dfdSAndroid Build Coastguard Worker 73*387f9dfdSAndroid Build Coastguard Workerexamples: 74*387f9dfdSAndroid Build Coastguard Worker ./tcpdrop # trace kernel TCP drops 75*387f9dfdSAndroid Build Coastguard Worker ./tcpdrop -4 # trace IPv4 family only 76*387f9dfdSAndroid Build Coastguard Worker ./tcpdrop -6 # trace IPv6 family only 77