.release_cb=tcp_release_cb, ... }; void__init tcp_init(void) { ... tcp_v4_init(); tcp_metrics_init(); BUG_ON(tcp_register_congestion_control(&tcp_reno) !=0); tcp_tasklet_init(); } 三、TCP“三次握手”的源代码分析 在TCP“三次握手”建立连接的过程中Client端会依次调用socket(),...
.backlog_rcv = tcp_v4_do_rcv, .release_cb = tcp_release_cb, .hash = inet_hash, .unhash = inet_unhash, .get_port = inet_csk_get_port, .enter_memory_pressure = tcp_enter_memory_pressure, .leave_memory_pressure = tcp_leave_memory_pressure, .stream_memory_free = tcp_stream_memory...
TCP协议是一个大家好像都熟悉,又好像都不熟悉的协议。说熟悉,是因为我们基本每天都要用到它,所有人似乎对三次握手、四次挥手、滑动窗口、慢启动、拥塞避免、拥塞控制等概念好像都有些了解。说不熟悉,是因为TCP协议相当的复杂,而且在运行过程中网络环境会变化,TCP的相关机制也会因为不 同的变化而产生相关的适应行为...
19 .backlog_rcv = tcp_v4_do_rcv, 20 .release_cb = tcp_release_cb, 21 .hash = inet_hash, 22 .unhash = inet_unhash, 23 .get_port = inet_csk_get_port, 24 .enter_memory_pressure = tcp_enter_memory_pressure, 25 .leave_memory_pressure = tcp_leave_memory_pressure, 26 .stream_me...
enter_loss() -> tp->snd_cwnd = tcp_packets_in_flight(tp) + 1;tcp_release_cb()注册在...
tcp_v4_init_sock, .destroy = tcp_v4_destroy_sock, .shutdown = tcp_shutdown, .setsockopt = tcp_setsockopt, .getsockopt = tcp_getsockopt, .recvmsg = tcp_recvmsg, .sendmsg = tcp_sendmsg, .sendpage = tcp_sendpage, .backlog_rcv = tcp_v4_do_rcv, .release_cb = tcp_release_cb, ......
(sk->ip_tos)|RTO_CONN|sk->localroute,sk->bound_dev_if);...dst_release(xchg(&sk->dst_cache,rt));// 2. 设置sk的路由信息// 3. 申请一个skb数据包对象buff=sock_wmalloc(sk,(MAX_HEADER+sk->prot->max_header),0,GFP_KERNEL);...sk->dport=usin->sin_port;// 4. 设置目的端口sk-...
inet_release()函数最终会调用对应传输层(TCP或者UDP)的close()方法,对于TCP协议来说,close()方法对应的是tcp_close()函数,tcp_close()就是关闭 TCP 连接的最后站点。 由于tcp_close()函数比较复杂,我们这里只分析当发生缓冲区还有数据的情况下,内核会怎么处理缓冲区的数据。
.release_cb = tcp_release_cb, .hash = inet_hash, .unhash = inet_unhash, .get_port = inet_csk_get_port, .enter_memory_pressure = tcp_enter_memory_pressure, .leave_memory_pressure = tcp_leave_memory_pressure, .stream_memory_free = tcp_stream_memory_free, .sockets_allocated = &tcp_...
比如在inet_stream_ops里有个inet_release的操作,这个操作除了释放socket的类型空间操作外,还通过调用socket连接的sock的close操作,对于stream类型来说,即tcp_close来关闭sock 释放sock。 创建socket同时还创建sock数据空间,初始化sock,初始化过程主要做的事情是初始化三个队列,receive_queue(接收到的数据包sk_buff链表...