进入包的处理(
net/ipv4/tcp_input.c)
:
接收的段都由tcp_v4_do_rcv处理,该函数根据不同的状态交由不同的函数处理。LISTEN状态且已建立半连接的处理函数为tcp_v4_hnd_req,其他状态为tcp_rcv_state_process
tcp_rcv_established
处理从一个建立的连接进入的tcp包,是处理tcp包的唯一入口点。Linux有两种方法处理tcp包:快速路径和慢速路径。
tcp_ack
处理ack或带ack的数据包
tcp_event_data_recv
处理tcp包。在接收到顺序数据段时处理。
tcp_data_queue() 处理数据段中的数据。套接字缓冲耗尽或者乱序,在这里面处理。此外还要处理重复数据段、窗口外数据段以及重传。
降窗函数tcp_cwnd_down
tcp_cong_void处理拥塞避免。实现了慢速启动和快速重传的拥塞控制算法。完全的拥塞控制机制在
tcp_fastretrans_alert
中实现。在tcp_ack中会调用tcp_fastretrans_alert函数
tcp_select_window计算通告窗口
tcp_push 发送数据
echo “bic veno”>/proc/sys/net/ipv4/tcp_congestion_control