摘要:
一、网络设备一般一个系统中如果可以连接外网的话,会有一个物理设备,也就是我们通常意义上所说的网卡。但是除了物理上的网卡,系统中还存在这个其他类型的网络设备,这些设备在网络中有着不同的应用场景。例如最为常见的loopback网卡,还有一些不那么常见的网络设备,例如tun/tap网络设备,bridge网 阅读全文
摘要:
一、问题有时候,一个用户态的监控任务可能要定期的获得系统的某个状态,例如CPU利用率,进程切换次数、甚至maps的布局等信息,这些信息一般都是通过内核的proc文件系统来获得。由于是周期性的获得这些信息,为了避免临时抱佛脚,可以在模块初始化的时候打开这个文件,然后下次就不同通过open系统调用,进而 阅读全文
摘要:
一、一些边界及不和谐情况一直以为TCP的connect就是通过三次握手来实现的,但是今天看书看到说有同时打开,这个时候是四次握手。正是印证只有想不到,没有做不到的道理。当然这里不是说这是TCP的bug,而是TCP在自己的RFC中预见并讨论了这种情况,其中说明了这种同时打开出现的场景以及TCP应该表现 阅读全文
摘要:
一、有连接与无连接 上层编程的时候我们比较常见的就是UDP使用sendto发送,而TCP使用send发送,前者是无连接的,后者是面向连接的。或者通俗的说,TCP比UDP更靠谱一些。所谓面向连接就是说这个发送协议栈担任了雷锋侠的角色,就是默默地对链路进行了协调和维护,从而让这个链路看起来更加的稳定。例 阅读全文
摘要:
一、路由选择 路由选择是IP层最为重要也是最为基本的一个功能,可以说是因特网实现报文交通的基础,所以这个东西还是比较重要的,大部分的网络设备供应商都会提供自己的路由器产品。当然我这里就无缘领教这些东西了,只是从Linux内核的协议栈中看一下一个PC的简单路由功能及实现方法。 之前说过当一个TCP客户 阅读全文
摘要:
一、习惯性问题刚从C++转到C开发的时候,觉得C里面一些函数调用不用声明函数原型,也不用定义,当时觉得很神奇。后来在C语言下开发久了,发现调用的函数没有声明导致编译错误,又觉得很神奇。看来很多东西习惯了就见鬼不怪了。二、测试的代码[tsecer@Harry GccTest]$ cat MustDec 阅读全文
摘要:
一、侦听和连接现在暂时不考虑网络拥塞问题,假设我们生活在新闻联播里,网络和谐,网速超快。现在一个好客的server在listen之后通过accept准备接受四面八方的朋友,此时就有一个客户端系统通过connect系统调用来连接这个服务器上的侦听套接口,我们暂时分析一下这个服务器的大致流程。当然,服务 阅读全文
摘要:
一、网络问题 如果世界都是像童话中描述的那样,那我们就真的和谐了,但是事实上往往是残缺不全。当我们在分析网络协议的时候,如果网络都是想美帝那样流畅,那报文的发送就没有问题了。但是现在如果不幸的是如果网络质量很差,那么此时就会出现TCP的丢包问题,此时大家都觉得网络很卡,比方说,WAR3就没法玩了。 阅读全文
摘要:
一、基本结构 内核中网络模块有眼花缭乱的数据结构,而且从名字和功能上看还没啥差别,所以对代码的理解还是有不小影响的。这里就是一个网络的开始阶段,然后尝试以这个为入口,看看系统中的网络的相关模块和功能实现。 1、socket 根据 毛德操 《linux情景分析》下册863页有一个比较合理的解释:“so 阅读全文
摘要:
一、说明 在linux下,这个pthread_mutex是posix多线程编程的一个规范,从名字上看,它也是一个线程间的同步机制。狭义上理解就是一个任务内部的多个线程之间的一个同步机制,这一点对于Linux系统下的futex机制实现可以产生很大影响。因为如果是同一进程的线程,那么所有线程使用的都是相 阅读全文