乐于学习与分析
我的博客即将入驻“云栖社区”,诚邀技术同仁一同入驻。
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。 作者:gfree.
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。 作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net 在前面的博文中,我画出了TCP/IP数据包发送的流程图。
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。 作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net 今天,把之前看过的UDP发送的过程总结了一下,画出了数据包发送的流程图。
作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net 在前面的学习过程中,遇到了位于struct inet_sock中的cork,当时没有把这个变量搞得很明白,没有完全搞清这个变量的用途。
作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net 今天学习上次剩下的最后一个UDP 发送数据调用中的最后一个函数,ip_fragment。
作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net ip_local_out的代码很短 int ip_local_out(struct sk_buff *skb) { int err; /* 调用netfilter的hook检查该包是否可以发送。
作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net 今天开始学习新的函数ip_push_pending_frames,这个函数会被icmp_push_reply,ip_send_reply,raw_sendmsg,和udp_push_pending_frames调用。
作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net 本来按照昨天的想法,是想把ip_append_data以及之前遇到的问题和不解整理思考一下的,但今天还是想把send的流程走完,再总结比较好,那么就开始下一个API——udp_push_pending_frames吧。
作者:gfree.wind@gmail.com博客:linuxfocus.blog.chinaunix.net 继续ip_append_data, if (copy > length) copy = length; if (!(rt->dst.
作者:gfree.wind@gmail.com 博客:linuxfocus.blog.chinaunix.net 现在换一种风格,把一些对代码的解读直接写到代码段。那样看起来可能更好 继续ip_append_data, /* hh_len是hardware header...
线下的传统压力测试,难以模拟真实流量,尤其难以模拟正常流量混杂着各色异常流量。所以,线下压得好好的系统,上线后可能某天突然雪崩,说好能支撑 5 倍流量的系统重构,也许流量一翻倍就彻底挂了。
作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/space.php?uid=23629988&do=blog&id=96739 下面开始分析ip_append_data这个函数。
作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/space.php?uid=23629988&do=blog&id=91590 继续分析udp_sendmsg, ipc.
作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/space.php?uid=23629988&do=blog&id=85925 sock_sendmsg的代码很简单 int sock_sendmsg(struct sock...
内核中的UDP socket流程(6)——sendto作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/space.php?uid=23629988&do=blog&id=85912 现在开始新的API sendto,那么就重新回到了socket.c文件。
内核中的UDP socket流程(5)——inet_create 作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/space.
struct s_mbuf与struct sk_buff本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
编译Linux内核2.6.36 一直以来,都是从事Linux用户空间的程序开发,对于Linux的了解仅限于基本Linux内核的经典书籍的阅读。由于目前从事的工作主要是TCP/IP 4层以上的处理,所以对内核的接触也不多。
内核中的UDP socket流程(4)——sock_create作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/space.php?uid=23629988&do=blog&id=85910 又懒了2天,继续sock_create /* Compatibility.
内核中的UDP socket流程(3)——sock_create作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/space.php?uid=23629988&do=blog&id=85909 由于种种原因,工作的,私人的,学习停了几天。
内核中的UDP socket流程(2)——API “sys_socket” 作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.
struct sk_buff与socket作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/u3/116859/showart.php?id=2441552 在Linux2.6中,struct sk_buf承担了socket的输入输出的传输缓存的任务。
尽管把一组指令装入内存并让CPU执行看起来并不是什么大问题,但内核还必须灵活处理以下几个方面的问题: 不同的可执行文件格式: 共享库:很多可执行文件并不包含执行程序所需的所有代码,而是期望内核在运行时从共享库中加载函数。
这里列出Unix系统提供的进程间通信的基本机制: 管道和FIFO(命名管道):最适合在进程之间实现生产者/消费者的交互。有些进程向管道中写入数据,而另外一些进程则从管道中读出数据。
一、Ext2的一般特征 但在一些情况下,已经在Ext2的索引节点中为这些特性引入新的字段。最重要的一些特点如下: 块片(block fragmentation):系统管理员对磁盘的访问通常选择较大的块,因为计算机应用程序常常处理大文件。
本章所涵盖的主题即应用于磁盘文件系统的普通文件,也应用于块设备文件;将这两种文件系统都简单地统称为“文件”。 访问文件的模式有多种。我们在本章考虑如下几种情况: 规范模式: 规范模式下文件打开后,标志O_SYNC与O_DIRECT清0,而且它的内容是由系统调用read()和write()来存取。
一、I/O体系结构 为了确保计算机能够正常工作,必须提供数据通路,让信息在连接到个人计算机的CPU、RAM和I/O设备之间流动。这些数据通路总称为总线,担当计算机内部主通信通道的作用。
虚拟文件系统所隐含的思想是把表示很多不同种类文件系统的共同信息放入内核:其中有一个字段或函数来支持Linux所支持的所有实际文件系统所提供的任何操作。对所调用的每个读、写或其他函数,内核都能把它们替换成支持本地Linux文件系统、NTFS文件系统,或者文件所在的任何其他文件系统的实际函数。
信号在最早的Unix系统中即被引入,用于在用户态进程间通信。内核也用信号通知进程系统所发生的事件。 一、信号的作用 信号(signal)是很短的消息,可以被发送到一个进程或一组进程。
一、POSIX API和系统调用 应用编程接口(API)与系统调用之不同。前者只是一个函数定义,说明了如何获得一个给定的服务;而后者是通过软中断向内核态发出一个明确的请求。
整个系统的性能取决于如何有效地管理动态内存。因此,现在所有多任务操作系统都在尽力优化对动态内存的使用,也就是说,尽可能做到当需要时分配,不需要时释放。 一、页框管理 Linux采用4KB页框大小作为标准的内存分配单元。
本章讨论进程调度(schednling),主要关心什么时候进行进程切换及选择哪一个进程来运行。 一、调度策略 决定什么时候以怎样的方式选择一个新进程运行的这组规则就是所谓的调度策略(scheduling policy)。
定时测量是由基于固定频率振荡器和计数器的几个硬件电路完成的。 一、时钟和定时器电路 在80x86体系结构上,内核必须显示地与几种时钟和定时器电路打交道。
内核的各个部分并不是严格按照顺序依次执行的,而是采用交错执行的方式。因此这些请求可能引起竞态条件,而我们必须采用适当的同步机制对这种情况进行控制。 一、内核如何为不同的请求提供服务 把内核看作必须满足两种请求的侍者:一种请求来自顾客,另一种请求来自数量有限的几个不同的老板。