随笔分类 -  内核网络协议栈

网络协议栈(18)tcp连接关闭时时序
摘要:一、四次挥手三次握手是TCP协议中的一个经典问题,几乎所有的网络公司面试都会问到这个问题,以至于人们甚至忽略了更加有意义的挥手过程。无论从挥手的实现代码量还是在实际工程种可能引发的问题,挥手的过程都是比三次握手要更加的复杂。在TCP的状态转换过程中,大部分都是和连接关闭相关的操作,反过来看一下三次握 阅读全文

posted @ 2019-03-07 09:21 tsecer 阅读(324) 评论(0) 推荐(0) 编辑

网络协议栈(17)对端套接口关闭后的SIGPIPE信号
摘要:一、tcp关闭tcp的关闭在实际应用中的重要性可能会高于通常教科书中描述的三次握手。在三次握手发生时,此时的语义和动作都是确定的,server在侦听,而client去主动连接,此时连着的角色在连接开始之前就已经明确。对于TCP的断开来说,此时整个协议没有办法确定到底是谁来先断开,任何一方都可以在任何 阅读全文

posted @ 2019-03-07 09:20 tsecer 阅读(175) 评论(0) 推荐(0) 编辑

网络协议栈(16)套接口异步关闭及重传
摘要:一、TCP的异步发送在之前的日志中,已经看到tcp报文的发送时异步的,也就是应用层的send函数向一个TCP套接口发送数据,当send函数返回之后,send中的发送数据可能还没有到达网卡,更不要说到达对方并获得对方的ACK。这样做的好处是数据的准备和发送可以异步进行,和文件的缓冲一样,当write函 阅读全文

posted @ 2019-03-07 09:19 tsecer 阅读(267) 评论(0) 推荐(0) 编辑

网络协议栈(14)iptables实现浅析
摘要:一、linux下的防火墙基础iptables这个功能在之前的说法叫做ipchains,后来才修改为这个名字。名字本身通常会体现出很多的信息,这些信息可能根本不需要专业知识,只是因为这些术语本身不是我们的母语,加上翻译中信息的缺失和转义等问题,导致很多术语本身的意义并没有体现出来。拿我们最为熟悉的程序 阅读全文

posted @ 2019-03-07 09:05 tsecer 阅读(417) 评论(0) 推荐(0) 编辑

网络协议栈(15)超越进程生命期的TCP套接字
摘要:一、套接口超越进程生命期一般来说,当一个进程退出的时候(不论是主动还是被动),它都会关闭自己的文件描述符,但是对于TCP的套接字来说,它的情况比较特殊,具体怎么特殊呢?我们可以想象一下,TCP是一个有连接的链路,当进程关闭的时候,关闭一端应该告诉对方,也就是发送一个FIN消息到对方,从而让对方有所准 阅读全文

posted @ 2019-03-06 21:41 tsecer 阅读(569) 评论(0) 推荐(0) 编辑

网络协议栈(14)TCP中time_wait套接口管理
摘要:一、TCP拆链发起方经历time_wait状态以前只是注意TCP连接建立时经历的经典的“三次握手”,而对于连接的关闭关注较少,最近看了一下关闭的流程,比建立更为复杂。这个其实也不值得大惊小怪,因为free往往要比malloc复杂,因为free可能要处理释放块的合并。其中比较特殊的有一个time_wa 阅读全文

posted @ 2019-03-06 21:38 tsecer 阅读(408) 评论(0) 推荐(0) 编辑

网络协议栈(13)syn flood攻击防范及部分重传定时器参数分析
摘要:一、syn cookie攻击防御方法在前一篇文章中说明了syn flood的原理,可以看到,该机制会造成服务器的DOS瘫痪而无法提供正常服务,所以在当前的Linux中提供了一种相对比较智能的方法方法,就是使用syn_cookie机制。它的实现原理就是把连接的状态信息体现在自己提议的初始化序列号上,这 阅读全文

posted @ 2019-03-06 21:38 tsecer 阅读(315) 评论(0) 推荐(0) 编辑

网络协议栈(12)listen的backlog参数及syn flood攻击
摘要:一、listen调用之backlog参数这个系统调用中的第一个参数就是侦听的"父套接口",就好像进程fork时候的"父进程"一样,这个参数是必须的,我想大家应该都没有什么意见。但是后面还有一个容易被人们忽略的参数就是backlog,这个单词不是很常见,所以我第一看到它的时候是不明白它的意义和作用的, 阅读全文

posted @ 2019-03-06 21:37 tsecer 阅读(449) 评论(0) 推荐(0) 编辑

网络协议栈(11)NAT转换
摘要:一、NAT 为了让一个外部IP供多个内部主机使用,经常需要将一个主机配置为NAT服务器,从而对外部来看只有一个IP。或者说对于一些网站,可能开辟了多个服务,这些服务使用不同的服务器端口,此时单个服务器无法有效的完成对用户请求的响应,例如http服务器的80端口,或者说为了进行负荷分担,可以将同一个I 阅读全文

posted @ 2019-03-06 21:04 tsecer 阅读(428) 评论(0) 推荐(0) 编辑

网络协议栈(10)netfilter
摘要:一、机制该工具相当于内核中的车匪路霸,它们在内核网络栈中各处安装关卡,对内核中报文的流动进行监控管理,它是Linux系统下实现防火墙的基础,利用用户态的iptables的实现就是netfilter机制的一个典型应用。该机制直接嵌入内核,在内核生成的时候这些监测点就已经被编译入内核,所以是顽固而可靠的 阅读全文

posted @ 2019-03-06 21:03 tsecer 阅读(567) 评论(0) 推荐(0) 编辑

网络协议栈(8)Bridge设备
摘要:一、应用在很多tap虚拟网卡的使用中,bridge也都是被使用的。至少是在qemu的网络模拟和vpn的bridge实现也依赖于bridge这种虚拟设备,所以在看了tap的使用之后,bridge的使用和原理也不可避免的要弱弱的围观一下。这里的bridge并不是一个物理的网桥,而是一个虚拟的网络设备。它 阅读全文

posted @ 2019-03-06 21:01 tsecer 阅读(424) 评论(0) 推荐(0) 编辑

网络协议栈(9)netlink机制
摘要:一、为什么需要这种通讯机制设想用户态和内核交互数据,主要是通过系统调用read,ioctl,或者是proc文件系统。但是read有一个明显的缺点,它是一个字符流机制,不能定制,也就是无论谁从里面读,读到的内容都是相同的。这种无格式的结构对于网络这种非常繁琐的交互方法来说是不够的。例如,要枚举系统中所 阅读全文

posted @ 2019-03-06 21:01 tsecer 阅读(1147) 评论(0) 推荐(0) 编辑

网络协议栈(7)tun/tap设备
摘要:一、网络设备一般一个系统中如果可以连接外网的话,会有一个物理设备,也就是我们通常意义上所说的网卡。但是除了物理上的网卡,系统中还存在这个其他类型的网络设备,这些设备在网络中有着不同的应用场景。例如最为常见的loopback网卡,还有一些不那么常见的网络设备,例如tun/tap网络设备,bridge网 阅读全文

posted @ 2019-03-06 21:00 tsecer 阅读(862) 评论(0) 推荐(0) 编辑

网络协议栈(6)RFC793TCP连接时部分异常流程及实现
摘要:一、一些边界及不和谐情况一直以为TCP的connect就是通过三次握手来实现的,但是今天看书看到说有同时打开,这个时候是四次握手。正是印证只有想不到,没有做不到的道理。当然这里不是说这是TCP的bug,而是TCP在自己的RFC中预见并讨论了这种情况,其中说明了这种同时打开出现的场景以及TCP应该表现 阅读全文

posted @ 2019-03-06 20:58 tsecer 阅读(404) 评论(0) 推荐(0) 编辑

网络协议栈(5)sendto/send返回成功意味着什么
摘要:一、有连接与无连接 上层编程的时候我们比较常见的就是UDP使用sendto发送,而TCP使用send发送,前者是无连接的,后者是面向连接的。或者通俗的说,TCP比UDP更靠谱一些。所谓面向连接就是说这个发送协议栈担任了雷锋侠的角色,就是默默地对链路进行了协调和维护,从而让这个链路看起来更加的稳定。例 阅读全文

posted @ 2019-03-06 20:57 tsecer 阅读(4416) 评论(0) 推荐(0) 编辑

网络协议栈(4)路由及网关选择
摘要:一、路由选择 路由选择是IP层最为重要也是最为基本的一个功能,可以说是因特网实现报文交通的基础,所以这个东西还是比较重要的,大部分的网络设备供应商都会提供自己的路由器产品。当然我这里就无缘领教这些东西了,只是从Linux内核的协议栈中看一下一个PC的简单路由功能及实现方法。 之前说过当一个TCP客户 阅读全文

posted @ 2019-03-06 20:56 tsecer 阅读(1166) 评论(0) 推荐(0) 编辑

网络协议栈(3)server与connect的交互
摘要:一、侦听和连接现在暂时不考虑网络拥塞问题,假设我们生活在新闻联播里,网络和谐,网速超快。现在一个好客的server在listen之后通过accept准备接受四面八方的朋友,此时就有一个客户端系统通过connect系统调用来连接这个服务器上的侦听套接口,我们暂时分析一下这个服务器的大致流程。当然,服务 阅读全文

posted @ 2019-03-06 20:54 tsecer 阅读(561) 评论(0) 推荐(0) 编辑

网络协议栈(2)connect超时
摘要:一、网络问题 如果世界都是像童话中描述的那样,那我们就真的和谐了,但是事实上往往是残缺不全。当我们在分析网络协议的时候,如果网络都是想美帝那样流畅,那报文的发送就没有问题了。但是现在如果不幸的是如果网络质量很差,那么此时就会出现TCP的丢包问题,此时大家都觉得网络很卡,比方说,WAR3就没法玩了。 阅读全文

posted @ 2019-03-06 20:51 tsecer 阅读(644) 评论(0) 推荐(0) 编辑

网络协议栈(1)从tcp的connect开始
摘要:一、基本结构 内核中网络模块有眼花缭乱的数据结构,而且从名字和功能上看还没啥差别,所以对代码的理解还是有不小影响的。这里就是一个网络的开始阶段,然后尝试以这个为入口,看看系统中的网络的相关模块和功能实现。 1、socket 根据 毛德操 《linux情景分析》下册863页有一个比较合理的解释:“so 阅读全文

posted @ 2019-03-06 20:50 tsecer 阅读(496) 评论(0) 推荐(0) 编辑

导航