linux的TCP/IP协议栈

以下是tcp_v4_init时间分析,这是在网 / / tcp_ipv4 C IPv4:






tcp_inode,当然,是一个inode节点,并tcp_socket等于tcp_inode.u.socket_i,

它们通过指针指向相同的内存。

tcp_socket用于通信,可以称为TCP controlsocket或通信

套接字,当TCP通信没有相应的套接字时,套接字充当套接字角色。例如,当您在一个闭合端口上接收SYN时发送RST,或当握手为三时发送SYN(不接受新的套接字产生)。

值得注意的是,OPS ->创建函数调用,在我们的af_inet回调函数前看到这inet_create网 / / af_inet IPv4。C的函数,这个函数是用来创建一个套接字的使用,因为函数是比较长的,在这里我们跳过分析,第一分析只是一个大概的流程熟悉。

由于套接字的创建和通信,代码是与协议相关的,所以代码是从原始TCP C中提取出来的。

以下是tcp_init功能。在网络中,一般来说,它创建几个哈希表和桶。代码,并创建以下全局对象。

tcp_openreq_cachep

tcp_bucket_cachep

tcp_timewait_cachep

tcp_ehash

tcp_bhash

ehash代表establishedhash和bhash代表bindhash。当然,他们都是袜子。tcp_establishedstate < tcp_close满足现状,但我不知道是什么斗意味着这里。认识几个cachep作用不是很明显,特别是第二,摸不到头脑。因为整个功能主要是内存分配和错误处理,它不是贴在这里。

其次是icmp_init功能。在IPv4网 / / ICMP。C,事实上,如果在tcp_v4_init的ipproto_tcp取而代之的是ipproto_icmp,它基本上是相同的,其余的proc_net_register功能已经在它面前说,并不是要在这里说。

到目前为止,我们基本上应该了解Linux下IP堆栈的开始,并且有几个关键功能:

dev_add_pack:注册一个处理函数的链路层以上,这是一般的使用了新的网络层




协议,但如果重复登记时也可用,系统会设置一个复制点在这个时候。如果是eth_p_all,所有的数据包将被接收。这些元素都放在了ptype_all链表中的ptype_basehash链表。

inet_add_protocol:注册协议在IP层的建立,如TCP、UDP、等。

proc_net_register(以及类似的proc_register):

NET目录下,创建一个子目录条目,使Manager可以通过文件系统获取统计信息。

现在仍有许多谜题。一是结构的sk_buff每个成员的意义,一个是袜子的结构的意义,但这两个问题应该知道后。其次,我想分析每个协议之一,包括状态转换/数据传输/接收。