
linux网络协议栈
scdxmoe
这个作者很懒,什么都没留下…
展开
-
Socket send函数和recv函数详解
send函数int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。该函数的第一个参数指定发送端套接字描述符;转载 2013-10-30 20:02:10 · 1092 阅读 · 0 评论 -
Linux学习】epoll详解
http://blog.youkuaiyun.com/xiajun07061225/article/details/9250579 什么是epollepoll是什么?按照man手册的说法:是为处理大批量句柄而作了改进的poll。当然,这不是2.6内核才有的,它是在2.5.44内核中被引进的(epoll(4) is a new API introduced in Linux转载 2014-09-09 10:48:57 · 641 阅读 · 0 评论 -
linux:网络栈内存不足引发进程挂起问题
http://blog.yufeng.info/archives/2511 原创文章,转载请注明: 转载自系统技术非业余研究本文链接地址: 网络栈内存不足引发进程挂起问题我们知道TCP socket有发送缓冲区和接收缓冲区,这二个缓冲区都可以透过setsockopt设置SO_SNDBUF,SO_RCVBUF来修改,但是这些值设多大呢?这些值和协议栈的内存转载 2014-09-05 09:34:04 · 1663 阅读 · 0 评论 -
linux kernel中epoll的设计和实现
http://www.pagefault.info/?p=264 本文链接地址: 路由的基本概念介绍这里主要是针对linux下的路由一些基本概念.1 路由是位于L3(ip层)。2 路由表(routing table)也叫做Forwarding Information Base(FIB).3 路由器之间通过路由协议(routing转载 2014-09-05 09:30:48 · 820 阅读 · 0 评论 -
Linux IO协议栈框图
Linux IO协议栈框图今天4月份在高阳同学的IO协议栈相关的PPT里面发现了这张图,最终来源 http://www.thomas-krenn.com/en/oss/linux-io-stack-diagram/linux-io-stack-diagram_v0.1.pdf,忍不住还是贴了出来。这张图很清晰的把linux IO协议栈的层次给勾出来了,而且内容很转载 2014-09-05 09:49:57 · 2467 阅读 · 0 评论 -
linux kernel中epoll的设计和实现
http://www.pagefault.info/?p=264 原创文章,转载请注明: 转载自pagefault本文链接地址: linux kernel中epoll的设计和实现这里就不贴源码了,源码分析的话,网上一大堆,我这里只是简要的描述下epoll的实现和一些关键的代码片段。相关的文件在 fs/eventpoll.c中,我看的是2.6.38转载 2014-09-05 09:28:47 · 1583 阅读 · 0 评论 -
linux协议栈中网卡相关的名词解释
摘自:http://blog.youkuaiyun.com/w_s_xin/article/details/11632089 和 这个文档介绍了Linux网络协议栈中一系列互补的技术。这些技术用来增加多处理器系统的并行性和改善性能。这些技术包括:RSS: Receive Side Scaling (接收侧的缩放) RPS: Receive Packet Steeri转载 2014-07-18 13:54:24 · 1372 阅读 · 0 评论 -
Receive packet steering patch详解
Receive packet steering简称rps,是google贡献给linux kernel的一个patch,主要的功能是解决多核情况下,网络协议栈的软中断的负载均衡。这里的负载均衡也就是指能够将软中断均衡的放在不同的cpu核心上运行。 简介在这里: http://lwn.net/Articles/362339/ linux现在网卡的驱动支持两种模式,一种是NAPI,转载 2014-07-18 13:53:38 · 776 阅读 · 0 评论 -
TCP/IP学习(27)——协议初始化与简要的接收/发送流程
摘自:http://blog.chinaunix.net/uid-23629988-id-264304.html本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix转载 2014-07-17 10:08:53 · 863 阅读 · 0 评论 -
TCP/IP学习(28)——数据包完整接收流程
摘自:http://blog.chinaunix.net/uid-23629988-id-272460.html本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.china转载 2014-07-17 10:05:03 · 3691 阅读 · 0 评论 -
TCP/IP学习(32)——软中断的处理详细分析
摘自:http://blog.chinaunix.net/uid-23629988-id-327893.html本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix转载 2014-07-17 10:00:05 · 1176 阅读 · 0 评论 -
TCP/IP学习(37)——L2如何设置包的协议类型
摘自:http://blog.chinaunix.net/uid-23629988-id-1677689.html本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chin转载 2014-07-17 09:56:05 · 959 阅读 · 0 评论 -
TCP/IP学习(30)——L2数据链路层的数据包处理详细流程
摘自:http://blog.chinaunix.net/uid-23629988-id-305200.html本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.china转载 2014-07-17 09:48:38 · 1366 阅读 · 0 评论 -
TCP/IP学习(29)——kernel如何选择socket接收数据
摘自:http://blog.chinaunix.net/uid-23629988-id-285722.html本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix转载 2014-07-17 10:03:41 · 1128 阅读 · 0 评论 -
TCP/IP源码学习(47)——socket与VFS的关联
摘自:作者:gfree.wind@gmail.com博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。================转载 2014-07-17 09:55:40 · 1227 阅读 · 0 评论 -
TCP/IP学习(31)——TCP接收数据包如何选择socket
摘自:http://blog.chinaunix.net/uid-23629988-id-309295.html本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix转载 2014-07-17 09:47:39 · 891 阅读 · 0 评论 -
Linux内核网络协议栈4-socket地址绑定
http://blog.chinaunix.net/uid-22359610-id-461265.html一、socket绑定入口1、示例代码struct sockaddr_in server_address; server_address.sin_family = AF_INET; server_addr转载 2014-08-25 16:43:02 · 1278 阅读 · 0 评论 -
Linux内核网络协议栈5-socket端口管理 2
http://blog.chinaunix.net/uid-22359610-id-1626525.html 一、前情回顾上一节《socket地址绑定》中提到,应用程序传递过来的端口在内核中需要检查端口是否可用:if (sk->sk_prot->get_port(sk, snum)) { inet->saddr = inet->rcv_saddr =转载 2014-08-25 16:42:50 · 994 阅读 · 0 评论 -
三次握手相关的几个数据
http://blog.chinaunix.net/uid-18963137-id-3427213.html分类: LINUXMicrosoftInternetExplorer402DocumentNotSpecified7.8Normal0 查看网络的连接状态常用的文件是/proc/net/snmp及/proc/net/netstat文件,当转载 2016-07-04 18:16:51 · 1773 阅读 · 0 评论 -
Linux原始套接字实现分析
http://blog.chinaunix.net/uid-27074062-id-3388166.html 本文从IPV4协议栈原始套接字的分类入手,详细介绍了链路层和网络层原始套接字的特点及其内核实现细节。并结合原始套接字的实际应用,说明各类型原始套接字的适应范围,以及在实际使用时需要注意的问题。一、原始套接字概述协议栈的原始套接字从实现上可以分为“链路层原始套接字”和“网转载 2015-06-24 14:46:54 · 654 阅读 · 0 评论 -
TCP重传定时器
http://dev.cppfun.com/tcp-retransmission-timer.htmTCP重传定时器最近在看Linux 3.0下TCP/IP的源码实现 ,发现与linux 2.6上实现许多细节变化较多,但基本机制或者说思路没有变化,变化的一些具体的算法上,更能适应今天的的高速网络,比如新的算法可以更灵活的更好的适应今天较小的网络时延。TCP/IP转载 2014-11-26 14:26:24 · 2142 阅读 · 0 评论 -
套接字的创建与应用
http://blog.sina.com.cn/s/blog_912673ce01011xt8.html 套接字是应用程序访问系统网络服务的接口。端到端的通信通过一对套接字来实现,一个套接字对应一个通信端点。从实现来看,套接字是端端通信的抽象描述。在应用程序里,套接字对应一个整数值(套接字描述符);在内核里,套接字对应一个管理通信过程的对象(struct socke转载 2014-10-16 16:07:28 · 1132 阅读 · 0 评论 -
TCP恋爱史:三次握手和四次分手
http://linux.cn/article-3896-1.html TCP协议非常重要,这里把它的连接和释放整理一下。首先是三次握手:1、 客户端发起,像服务器发送的报文SYN=1,ACK=0,然后选择了一个初始序号:seq=x。SYN是干什么用的?在链接的时候创建一个同步序号,当SYN=1同时ACK=0的时候,表明这是一个连接请求的报转载 2014-09-25 14:25:13 · 829 阅读 · 0 评论 -
Linux 网络堆栈的排队机制
http://blog.jobbole.com/62917/ 在任何网络堆栈或设备中,数据包的队列都是非常重要。这些队列使得不在同一时刻加载的模块能够相互通信,并且能提高网络性能,同时也会间接影响到网络延时的长短。本文章通过阐述IP数据包在Linux网络中的排队机制,来解释两个问题:BQL一类新特性是如何减小网络延时的。如何控制已减小延时后的缓存。下面这张图(和它的转载 2014-09-25 16:23:20 · 1152 阅读 · 0 评论 -
linux:socket 系统调用在linux内核中的实现流程图
socket 系统调用在linux内核中的实现:原创 2014-09-03 12:26:12 · 2049 阅读 · 0 评论 -
linux 内核tcp接收数据的实现
http://simohayha.iteye.com/blog/478025 相比于发送数据,接收数据更复杂一些。接收数据这里和3层的接口是tcp_v4_rcv(我前面的blog有介绍3层和4层的接口的实现).而4层和用户空间,也就是系统调用是socket_recvmsg(其他的读取函数也都会调用这个函数).而这个系统调用会调用__sock_recvmsg.下面我们就先来看下这个函数。转载 2014-09-16 11:15:57 · 2703 阅读 · 0 评论 -
linux内核网络监听哈希表介绍:如何将sk加入表和将sk移除表的过程
以下基于linux内核2.4.0源码(转载请注明出处)松哥 jccz_zys@tom.com 网络通信过程中,服务器必然提供监听socket响应客户端连接请求,也必然提供连接socket与客户端进行交互。一台主机上有不止一个的socket服务器,如ftp、telnet服务器等,他们初始都处于监听状态,等待连接请求的到来。linux中为了管理这两类socket提供了两个哈希链表:转载 2014-09-26 17:22:58 · 1380 阅读 · 0 评论 -
linux kernel笔记——中断
http://blog.chinaunix.net/uid-27119491-id-3273595.html cpu与磁盘、网卡、键盘等外围设备(相对于cpu和内存而言)交互时,cpu下发I/O请求到这些设备后,相对cpu的处理能力而言,磁盘、网卡等设备需要较长时间完成请求处理。那么在请求发出到处理完成这段时间,应如何设定cpu的行为,既能让这期间运行的其他程序得到执行转载 2014-09-15 18:07:38 · 1023 阅读 · 0 评论 -
Linux网络协议栈之数据包处理过程(非技术人员勿看)
http://blog.chinaunix.net/uid-16867579-id-2857166.html Linux网络协议栈之数据包处理过程 1 前言翻译《 The journey of a packet through the linux 2.4 network stack 》 这篇文章这篇文档是基于 x86 体系结构和转发 IP 分组的。转载 2014-09-26 10:18:30 · 6252 阅读 · 0 评论 -
linux listen
http://blog.163.com/hbu_lijian/blog/static/126129153201372711102269/ listen系统可以使一台主机上的一个tcp socket在某个端口号被动侦听,等待来自其它主机的tcp socket的连接请求,下面是listen系统调用的函数原型: #include int listen(int转载 2014-08-28 13:57:49 · 729 阅读 · 0 评论 -
linux内核网络监听哈希表介绍
http://blog.youkuaiyun.com/jccz_zys/article/details/1509832 以下基于linux内核2.4.0源码(转载请注明出处)松哥 jccz_zys@tom.com 网络通信过程中,服务器必然提供监听socket响应客户端连接请求,也必然提供连接socket与客户端进行交互。一台主机上有不止一个的socket服务器,如ftp、te转载 2014-08-28 13:59:32 · 984 阅读 · 0 评论 -
Linux 2.6.35 新增特性 RPS RFS [复制链接]
http://bbs.chinaunix.net/thread-1925718-1-1.html 懒得拷贝了(主要是试了拷贝,竟然拷贝不了图片,突然感觉还是QQ空间发表日志时的粘贴功能强大,连文字带图一起拷贝过去了,之后还提示是否要把图片给抓取过来存到QQ相册),见链接:http://blog.chinaunix.net/u/26524/showart_2297201.html转载 2014-09-09 15:41:20 · 743 阅读 · 0 评论 -
Linux内核网络协议栈6-socket监听
http://blog.chinaunix.net/uid-22359610-id-1991600.html 几个问题了解以下几个问题的同学可以直接忽略下文:1、listen库函数主要做了什么?2、什么是最大并发连接请求数?3、什么是等待连接队列?Socket监听相对还是比较简单的,先看下应用程序代码:listen(server_sockfd,转载 2014-08-25 16:42:18 · 1021 阅读 · 0 评论 -
Linux网络协议栈之数据包处理过程
摘自:http://blog.chinaunix.net/uid-16867579-id-2857166.html1 前言翻译《 The journey of a packet through the linux 2.4 network stack 》 这篇文章这篇文档是基于 x86 体系结构和转发 IP 分组的。 数据包在 Linux 内核链路层转载 2014-07-17 16:52:22 · 974 阅读 · 0 评论 -
SYN cookies机制下连接的建立
在正常情况下,服务器端接收到客户端发送的SYN包,会分配一个连接请求块(即request_sock结构),用于保存连接请求信息,并且发送SYN+ACK包给客户端,然后将连接请求块添加到半连接队列中。客户端接收到SYN+ACK包后,会发送ACK包对服务器端的包进行确认。服务器端收到客户端的确认后,根据保存的连接信息,构建一个新的连接,放到监听套接字的连接队列中,等待用户层accept连接。这是正常的转载 2014-04-04 16:33:30 · 1038 阅读 · 0 评论 -
TCP的TIME_WAIT状态
主动关闭的Socket端会进入TIME_WAIT状态,并且持续2MSL时间长度,MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间将在网络中消失。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒,因而,TIME_WAIT状态一般维持在1-4分钟。 TIME_WA转载 2013-11-12 14:18:50 · 738 阅读 · 0 评论 -
TCP/IP源码(59)——TCP中的三个接收队列
在Linux内核的TCP实现中,TCP有三个接收队列——除去错误队列。这三个队列分别是struck sock中的sk_receive_queue和sk_backlog,以及struct tcp_sock中的prequeue。这三个队列作用,网上已经有很多文章论述了。这里只简单介绍一下,sk_receive_queue是真正的接收队列,收到的TCP数据包经过检查和处理后,就会保存到这个队列中。s转载 2013-11-10 18:59:55 · 1605 阅读 · 0 评论 -
内核tcp协议栈SACK的处理
上一篇处理ack的blog中我们知道当我们接收到ack的时候,我们会判断sack段,如果包含sack段的话,我们就要进行处理。这篇blog就主要来介绍内核如何处理sack段。SACK是包含在tcp的option中的,由于tcp的头的长度的限制,因此SACK也就是最多包含4个段,也就是32个字节。我们先来看tcp中的SACK段的表示: Java代码 st转载 2013-10-03 13:27:47 · 1646 阅读 · 1 评论 -
关于内核校验
校验和是网络协议用来识别传输错误的冗余域。有些校验和不但能检测错误,还能自动修正某些类型的错误。校验和的想法很简单。在传输一个数据包之前,发送方计算出一个很小的、固定长度的域 (校验和)包含数据的某种散列。如果在传输过程中某几位数据被改变,很可能损坏的数据会产生一个不同的校验和。取决于你用来产生校验和使用的函数,校验和提供不同级别的可靠性。IP协议采用的校验和是简单的一个包括求和取反码,这个方转载 2013-10-03 19:05:07 · 2179 阅读 · 0 评论 -
tcp头部在linux中的实现tcphdr
tcp头部数据结构struct tcphdr { __be16 source; //16位源端口号 __be16 dest; //16位目的端口号 //每个tcp段都包源和目的端口号,用于寻找发送端和接受端的应用进程。这两个端口号加上ip报头中的源ip和目的ip,来确定一个唯一的TCP连接。 __be32 seq原创 2013-10-03 16:41:26 · 1438 阅读 · 0 评论