📄 [转载] linux的tcp-ip协议栈阅读笔记(5) - china linux forum.htm
字号:
err;<BR><BR>tcp_inode.i_mode = S_IFSOCK;<BR>tcp_inode.i_sock =
1;<BR>tcp_inode.i_uid = 0;<BR>tcp_inode.i_gid =
0;<BR><BR>tcp_socket->inode =
&tcp_inode;<BR>tcp_socket->state =
SS_UNCONNECTED;<BR>tcp_socket->type=SOCK_RAW;<BR><BR>if
((err=ops->create(tcp_socket,
IPPROTO_TCP))<0)<BR>panic("Failed to create the TCP control
socket.\n");<BR>tcp_socket->sk->allocation=GFP_ATOMIC;<BR>tcp_socket->sk->num
= 256; <BR>tcp_socket->sk->ip_ttl =
MAXTTL;<BR>}<BR>tcp_inode当然就是一个inode节点了,而tcp_socket等于tcp_inode.u.socket_i,<BR>通过一个指针他们指向同一个内存.<BR>tcp_socket是用来通信使用的,可以叫TCP的control
socket或者是communication<BR>socket,当TCP通信没有相应的socket的时候这个socket就充当了socket的角色.比<BR>如在一个关闭端口上收到SYN时发送RST,或者是在三次握手的时候发送SYN(还没有<BR>accept产生新的socket)<BR><BR>值得注意的是ops->create函数的调用,我们前面见过对于AF_INET来说这个回调函<BR>数是net/ipv4/af_inet.c的inet_create函数,这个函数是用来创建一个socket的<BR>时候用的,由于函数比较长,这里先略过分析,这第一次的分析只是一个大致流程的<BR>熟悉而已.<BR><BR>由于有socket创建和通信,所以这段代码是协议相关的,所以把这段代码从原来的<BR>tcp.c里面提取了出来<BR><BR>下面是tcp_init函数,它在net/ipv4/tcp.c里面,大体上来说就是创建了几个hash表<BR>和bucket.这段代码创建了下面几个全局对象:<BR>tcp_openreq_cachep<BR>tcp_bucket_cachep<BR>tcp_timewait_cachep<BR>tcp_ehash<BR>tcp_bhash<BR>其中ehash代表established
hash, bhash代表bind hash,它们当然分别是所有的满<BR>足TCP_ESTABLISHED <=
sk->state < TCP_CLOSE状态的SOCK.但是我不清楚bucket<BR>在这里是什么意思.anyone
knows?那几个cachep的作用也不是很清楚,特别是第二<BR>个,根本摸不着头脑.由于整个函数主要是内存分配和错误处理,这里不贴了.<BR><BR>再下来就是icmp_init函数了,在net/ipv4/icmp.c里面,事实上,如果把tcp_v4_init<BR>里面的IPPROTO_TCP替换成IPPROTO_ICMP,基本都是一样的.<BR><BR>剩下的proc_net_register函数前面已经讲过了,这里就不说了.<BR><BR>到这里为止,Linux下面IP栈的开始的工作我们基本应该有了个了解,其中有几个关键<BR>的函数:<BR><BR>dev_add_pack:<BR>注册一个链路层以上的处理函数,一般是用来使用新的网络层协议的,不过如果注册<BR>时重复也是可以的,这时候系统会设置一个copy位.如果是ETH_P_ALL则会接收所有<BR>的数据包.加入的元素保存在ptype_all链表和ptype_base
hash链表中间.<BR><BR>inet_add_protocol:<BR>注册一个建立在IP层以上的协议,例如TCP和UDP等<BR><BR>proc_net_register(还有类似的proc_register):<BR>在/proc/net目录下面创建一个子目录项来使管理者能通过文件系统得到统计信息<BR><BR>现在迷惑的地方还有很多,一个是结构体sk_buff的每个成员的意义,一个是结构体<BR>sock的意义,不过这两个问题应该在以后看多了就知道了.<BR>下面我就打算一个个分析每个协议的处理了,包括状态转化/数据发送/接收.<BR><BR>--<BR>Wish
your sky be sunny,<BR>Wish your heart be happy,<BR>Wish your body be
healthy,<BR>Wish U never be lazy.<BR>:) :> ;) ;> :-) :->
;-) ;-> <BR><BR>※ 来源:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM:
202.112.35.1]<BR>--<BR>※ 转载:.武汉白云黄鹤站 bbs.whnet.edu.cn.[FROM:
202.106.43.158]<BR><BR><BR>--------------------------------------------------------------------------------<BR><BR>分类讨论区
全部讨论区 上一篇 本讨论区 回文章 下一篇 <BR><BR><BR>Linux can touch everything!---How
can we do?
<P class=small>文章选项: <A
href="http://www.linuxforum.net/forum/printthread.php?Cat=&Board=linuxK&main=67727&type=post"
target=_blank><IMG align=absMiddle alt=打印 border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(5) - China Linux Forum.files/print.gif"></A>
</P></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE align=center border=0 cellPadding=4 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD align=left class=small> </TD>
<TD align=right class=small><A
href="http://www.linuxforum.net/forum/printthread.php?Cat=&Board=linuxK&main=67727&type=thread"
target=_blank><IMG align=top border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(5) - China Linux Forum.files/printthread.gif">
打印</A> </TD></TR></TBODY></TABLE><BR>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD class=tableborders>
<TABLE border=0 cellPadding=3 cellSpacing=1 width="100%">
<TBODY>
<TR class=darktable>
<TD align=right>
<TABLE border=0>
<TBODY>
<TR>
<TD class=navigation noWrap><IMG align=absMiddle alt=*
src="[转载] Linux的TCP-IP协议栈阅读笔记(5) - China Linux Forum.files/greyflat.gif">平坦模式
</TD>
<TD class=navigation noWrap><A
href="http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=linuxK&Number=67727&page=192&view=collapsed&sb=5&o=all&vc=1"><IMG
align=absMiddle alt=树状模式,一封一封读 border=0
src="[转载] Linux的TCP-IP协议栈阅读笔记(5) - China Linux Forum.files/threaded.gif">树状模式</A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD align=right>
<FORM action=http://www.linuxforum.net/forum/jumper.php method=post><INPUT
name=Cat type=hidden> <SPAN class=onbody>前往讨论区 </SPAN><SELECT
class=formboxes name=board> <OPTION value=-CATJUMP-1>*Linux 社区和文化*
-----<OPTION value=new> 社区公告栏<OPTION
value=uglyduck> 社区服务台<OPTION
value=linuxnews> 业界新闻与评论<OPTION
value=linuxtalk> 自由软件杂谈<OPTION
value=software> Linux软件快递<OPTION
value=Tworkshop> 中文MAN-PAGE计划(CMPP)<OPTION
value=tcl> Linux图书与评论<OPTION
value=job> 招聘和求职<OPTION value=-CATJUMP-2>*Linux
桌面与办公自动化* -----<OPTION value=chinese> Linux
中文环境和中文化<OPTION value=office> Linux桌面与办公软件<OPTION
value=game> Linux 多媒体与娱乐版<OPTION
value=mozilla> 自由之窗Mozilla<OPTION
value=laptop> 笔记本电脑上的Linux<OPTION
value=-CATJUMP-3>*Linux 入门及网络应用* -----<OPTION
value=debian> Debian 一族<OPTION
value=nm> 网络管理技术<OPTION
value=newbie> Linux 安装与入门<OPTION
value=web> WEB服务器和FTP服务器<OPTION
value=dns> 域名服务器和邮件服务器<OPTION
value=proxy> Linux防火墙和代理服务器应用<OPTION
value=samba> 文件及打印服务器<OPTION
value=training> 技术培训与认证<OPTION value=-CATJUMP-4>*Linux
高级应用* -----<OPTION selected
value=linuxK> Linux内核技术<OPTION
value=embedded> 嵌入开发推进计划 (OpenARM)<OPTION
value=driver> Linux设备驱动程序<OPTION
value=cluster> Linux 集群技术<OPTION
value=db> LINUX平台数据库<OPTION
value=cpu> CPU 与 编译器<OPTION
value=security> 系统和网络安全<OPTION value=-CATJUMP-5>*Linux
环境下的程序设计* -----<OPTION
value=kylix> LINUX下的快速开发工具(RAD)<OPTION
value=program> C/C++编程版<OPTION
value=php3> PHP 技 术<OPTION
value=java> Java&jsp技术<OPTION
value=vrml> Shell编程技术<OPTION
value=perl> Perl 编 程<OPTION
value=python> Python 编 程<OPTION
value=xml> XML/Web Service 技术<OPTION
value=-CATJUMP-6>*永远的 UNIX* -----<OPTION
value=unix> 永远的Unix<OPTION
value=bsd> FreeBSD世界<OPTION value=-CATJUMP-7>*IT 人生*
-----<OPTION value=life> IT 人生</OPTION></SELECT> <INPUT class=buttons name=Jump type=submit value=出发>
</FORM></TD></TR></TBODY></TABLE>
<P>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width="95%">
<TBODY>
<TR>
<TD class=tableborders>
<TABLE border=0 cellPadding=3 cellSpacing=1 width="100%">
<TBODY>
<TR class=darktable>
<TD>
<TABLE border=0 cellPadding=0 cellSpacing=0 width="100%">
<TBODY>
<TR>
<TD align=left><A href="mailto:davidd@linuxforum.net">Contact
Us</A> </TD>
<TD align=right><A
href="http://www.linuxforum.net/">LINUXFORUM.NET</A>
</TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></TD></TR></TBODY></TABLE></P></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -