传输控制块是一个分层的填充结构,每一个层次都增加一些字段,来表示一个通用的控制,它们都是结构中的第一个结构,可以直接从头部直接转换成对应的控制块;如:tcp控制块的tcp_sock的使用slab分配,其大小为整个tcp_sock结构的大小,在下层用不到上层tcp相关属性的时候,只取其中的某个部分即可,如 (struct inet_sock *)sk 即可取得inet_sock ipv4传输控制块;
1 struct tcp_sock { //tcp传输控制块 2 struct inet_connection_sock { //面向连接的传输控制块 3 struct inet_sock { //ipv4传输控制块 4 struct sock { //协议无关的传输控制块 5 struct sock_common { //传输控制块公共部分 6 //struct sock, struct request_sock, struct inet_timewait_sock的公共部分 7 } 8 9 //增加了其他非sock_common的公共信息 10 } 11 12 //增加了ipv4协议专有的一些属性,如TTL,组播列表,ip地址,端口等; 13 } 14 15 //所有面向连接传输控制块,增加了连接,确认,重传等; 16 } 17 18 //tcp协议的控制块,增加了滑动窗口,拥塞控制算法等tcp专有属性; 19 }