tcp connection setup的实现(三)
2009-09-10 00:00:00 来源:WEB开发网tcp_v4_connect的源码就不分析了,我这里只大概的介绍下他的流程:
1 判断地址的一些合法性.
2 调用ip_route_connect来查找出去的路由(包括查找临时端口等等).
3 设置sock的状态为TCP_SYN_SENT,并调用inet_hash_connect来查找一个临时端口(也就是我们出去的端口),并加入到对应的hash链表(具体操作和get_port很相似).
4 调用tcp_connect来完成最终的操作.这个函数主要用来初始化将要发送的syn包(包括窗口大小isn等等),然后将这个sk_buffer加入到socket的写队列.最终调用tcp_transmit_skb传输到3层.再往下的操作就可以看我前面的blog了.
最后来看下3次握手的客户端的状态变化,还是看tcp_rcv_state_process函数,这里我们进来的socket假设就是TCP_SYN_SENT状态,也就是在等待syn和ack分节:
Java代码
int tcp_rcv_state_process(struct sock *sk, struct sk_buff *skb,
struct tcphdr *th, unsigned len)
{
..........................................
switch (sk->sk_state) {
case TCP_CLOSE:
goto discard;
case TCP_LISTEN:
..................................
case TCP_SYN_SENT:
///进入对应的状态机处理函数.
queued = tcp_rcv_synsent_state_process(sk, skb, th, len);
if (queued >= 0)
return queued;
/* Do step6 onward by hand. */
tcp_urg(sk, skb, th);
__kfree_skb(skb);
tcp_data_snd_check(sk);
return 0;
}
Tags:tcp connection setup
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接