发布时间:2013-01-18 19:31:44
这篇文章写于三年前,当时手中拿着Stevens的三本巨著 TCP v1/v2/v3 的摸不着头脑-因为它们太厚了。我知道我不需要那么多,那么详细。于是有了自己分析源代码的想法...... 我不对文中的内容提供任何保证,但欢迎与我联系以便不断的修改它,最终给需要知道关于Linux TCP/IP实现的人提供短小精悍的文章内容。 第一部分:Linux的TCP/IP实现概述 Linux通过同时对多种通信协议的支持来提供通用的底层基础服务。它的第一个网络模型的版本是4.3 BSD,也称为Net/1......【阅读全文】
发布时间:2013-01-18 19:31:41
先上代码:int flag = 1;int result = setsockopt(sock, /* socket affected */IPPROTO_TCP, /* set option at TCP level */TCP_NODELAY, /* name of option */(char *) &flag, /* the cast is historicalcruft */sizeof(int)); /* length of option value */if (result < 0)... handle the error ... 注意:TCP_NODELAY需要头......【阅读全文】
发布时间:2013-01-18 19:31:38
套接字缓冲区用结构体struct sk_buff表示,它用于在网络子系统中的各层之间传递数据,处于一个核心地位,非常之重要。它包含了一组成员数据用于承载网络数据,同时,也定义了在这些数据上操作的一组函数。下面是其完整的定义: struct sk_buff { struct sk_buff *next; struct sk_buff&n......【阅读全文】
发布时间:2013-01-18 19:31:32
前面一篇文章分析了套接字缓冲区sk_buff的创建过程,但一般来讲,一个套接字缓冲区总是属于一个套接字,所以,除了调用sk_buff本身的 alloc_skb函数创建一个套接字缓冲区,套接字本身还要对sk_buff进行一些操作,以及设置自身的一些成员值。下面我们来分析这个过程。 如果检查到待发送数据报没有传输层协议头(不是传输层的tcp或udp数据报),套接字创建缓冲区的函数是sock_alloc_send_skb,它的函数原型是: struct sk_buff *sock_alloc_se......【阅读全文】