📄 2_4网络代码阅读笔记(5) - china linux forum.htm
字号:
<BR>>>>>得到接收窗口的大小(tp->rcv_wnd)、收缩因子(tp->window_wscale)和
<BR>>>>>tp->window_clamp <BR>>>>> /* Set
the clamp no higher than max representable value */
<BR>>>>> (*window_clamp) =
min(65535<<(*rcv_wscale),*window_clamp);
<BR>tcp_select_initial_window(tcp_full_space(sk), <BR>tp->advmss
- (tp->ts_recent_stamp ? tp->tcp_header_len -
<BR>sizeof(struct tcphdr) : 0), <BR>&tp->rcv_wnd,
<BR>&tp->window_clamp, <BR>sysctl_tcp_window_scaling,
<BR>&tp->rcv_wscale); <BR>>>>>接收窗口门限(?)
<BR>tp->rcv_ssthresh = tp->rcv_wnd; <BR>/* Socket identity
change complete, no longer <BR>* in TCP_CLOSE, so enter ourselves
into the <BR>* hash tables. <BR>*/
<BR>>>>>置状态为TCP_SYN_SENT
<BR>tcp_set_state(sk,TCP_SYN_SENT);
<BR>>>>>调用tcp_v4_hash_connecting
<BR>>>>>在创建socket时 ( sk->tp_pinfo.af_tcp.af_specific
= &ipv4_specific) <BR>>>>>将sk加入到tcp_ehash链表中 <BR>if
(tp->af_specific->hash_connecting(sk)) <BR>goto err_out;
<BR>sk->err = 0; <BR>sk->done = 0; <BR>tp->snd_wnd = 0;
<BR>>>>>tp->snd_wl1 = 0,窗口更新报文的序号 <BR>tcp_init_wl(tp,
tp->write_seq, 0); <BR>tp->snd_una = tp->write_seq;
<BR>tp->snd_sml = tp->write_seq; <BR>tp->rcv_nxt = 0;
<BR>tp->rcv_wup = 0; <BR>tp->copied_seq = 0; <BR>tp->rto =
TCP_TIMEOUT_INIT; <BR>tp->retransmits = 0;
<BR>tcp_clear_retrans(tp); <BR>TCP_SKB_CB(buff)->flags =
TCPCB_FLAG_SYN; <BR>TCP_ECN_send_syn(tp, buff);
<BR>TCP_SKB_CB(buff)->sacked = 0; <BR>buff->csum = 0;
<BR>TCP_SKB_CB(buff)->seq = tp->write_seq++;
<BR>TCP_SKB_CB(buff)->end_seq = tp->write_seq;
<BR>tp->snd_nxt = tp->write_seq; <BR>tp->pushed_seq =
tp->write_seq; <BR>/* Send it off. */
<BR>TCP_SKB_CB(buff)->when = tcp_time_stamp;
<BR>tp->retrans_stamp = TCP_SKB_CB(buff)->when;
<BR>>>>>将sk_buff放到发送队列里
<BR>__skb_queue_tail(&sk->write_queue, buff);
<BR>tcp_charge_skb(sk, buff); <BR>tp->packets_out++;
<BR>>>>>通过tcp发送syn报文(阅读报文发送时在具体分析)
<BR>tcp_transmit_skb(sk, skb_clone(buff, GFP_KERNEL));
<BR>TCP_INC_STATS(TcpActiveOpens); <BR>/* Timer for repeating the
SYN until an answer. */
<BR><BR>>>>>为该syn报文设置超时重传定时器,重传定时原因是TCP_TIME_RETRANS,即超时重传
<BR>tcp_reset_xmit_timer(sk, TCP_TIME_RETRANS, tp->rto);
<BR>return 0; <BR>err_out: <BR><BR>tcp_set_state(sk,TCP_CLOSE);
<BR>kfree_skb(buff); <BR>return -EADDRNOTAVAIL; <BR>}
<BR><BR>connect的代码首次深入到linux的tcp/ip协议栈的细节部分,例如状态机、TCP控制块
<BR>TCB,以及和流量控制有关的数据结构(发送窗口、接收窗口、拥塞控制等)、还有重
<BR>传定时器等细节,估计后面会比较复杂,这里也只不过提供一个参考,可能会有很多 <BR>理解有误的地方。
<BR><BR><BR>欢迎访问"Unix编程" <BR>telnet apue.dhs.org 2323 <BR>or
http://apue.dhs.org
<P class=small>文章选项: <A
href="http://www.linuxforum.net/forum/printthread.php?Cat=&Board=linuxK&main=147053&type=post"
target=_blank><IMG align=absMiddle alt=打印 border=0
src="2_4网络代码阅读笔记(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=147053&type=thread"
target=_blank><IMG align=top border=0
src="2_4网络代码阅读笔记(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="2_4网络代码阅读笔记(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=147053&page=120&view=collapsed&sb=5&o=all&vc=1"><IMG
align=absMiddle alt=树状模式,一封一封读 border=0
src="2_4网络代码阅读笔记(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 + -