Linux网络子系统

网络分层
OSI模型

类似于OSI模型,Linux网络协议栈分层:

网络分层结构和网络操作概述

网络数据传输期间发生的基本操作

1) 当一个应用程序发送数据到对等主机的时候,应用程序创建数据。

2) 应用程序打开socket,并通过socket接口写入数据。

3) socket缓冲区被用来处理传输的数据。当socket缓冲区向下穿过各层时,内核仅改变socket缓冲区中的引用,以避免不必要的开销。

4) 每一层执行适当的操作,比如解析报头,添加和修改报头,校验和,路由操作,分片等等。

5) 网络接口卡向线缆发送数据,当传输时增加一个中断。

6) 以太网帧到达对等主机的网络接口卡。

7) 如果MAC地址匹配接口卡的MAC地址,将帧移动到网络接口卡的缓冲区。

8) 网络接口卡最终将数据包移动到一个socket缓冲区,并发出一个硬件中断给CPU。

9) CPU处理完数据包,并使其向上穿过各层,到达一个应用程序的TCP端口。

1.socket buffer收发数据的区域:内核使用缓冲区发送和接收数据。网络缓冲区的配置可以通过/proc/sys/net中的文件进行调整。

socket缓冲区的内存分配

2.Network API(NAPI)解决网络硬中断造成的开销:网络子系统经历了一些改变,引入了新网络API(NAPI)。在Linux网络堆栈的标准实现中,可靠性和低延迟要比低开销和高吞吐量更重要

使用传统的方法处理网络数据包,网络接口卡将数据包移动到操作系统内核的一个网络缓冲区,并向CPU发出一个硬中断。这个方法的缺点之一是每次匹配MAC地址的以太网帧到达接口,都会产生一个硬件中断。CPU每处理一个硬中断,就要停止当前处理中的工作,从而导致上下文切换,并刷新相关的处理器缓存。如果仅有少量数据包到达接口,你可能认为这不是一个问题,但是千兆以太网和现代的应用程序每秒能创建数千个数据包,这将导致发生大量的中断和上下文切换。

怎么解决这个问题呢?引入了NAPI,计算处理网络流量的相关开销。对于第一个数据包,NAPI以传统实现的方式为第一个数据包发出一个中断,但是在第一个数据包之后,接口进入一种轮询(polling)模式。只要有数据包就放入网络接口的DMA环形缓冲区,这不会引起新的中断,从而有效地减少了上下文切换的次数和相关的开销。最后一个数据包处理完后,环形缓冲区被清空,接口卡将再次退回到中断模式。

3. Netfilter:先进的防火墙功能,内核的一部分。使用iptables操作和Netfilter配置。

一般来说,Netfilter 提供以下功能:

3.1) 数据包过滤(fiIter)。如果一个数据包与一条规则匹配,则Netfilter接受或拒绝该数据包,或基于定义的规则采取适当行动。

3.2) 地址转换(nat)。如果一个数据包与一条规则匹配,Netfilter将更改数据包,以满足地址转换(ip和目的端口)的需求。

3.3) 改变数据包(mangIe)。如果一个数据包与一条规则匹配,Netfilter将按照规则对数据包进行改变(ttl、tos、mark)。

防火墙的工作图

数据包是如何穿过Netfilter链,以及在序列中每个点应用的规则列表。

如果数据包与规则匹配,Netfilter将采取相应的行动,这个行动称为目标(target)行动。可能的目标行动有:

a) ACCEPT接收数据包,并让它通过。

b) DROP默默地丢弃该数据包。

c) REJECT通过发送回一个错误数据包来响应匹配的数据包,比如,icmp-net-unreachable、icmp-host-unreachable、icmp-port-unreachable及tcp-reset等。

d) LOG开启内核日志记录匹配到的数据包。

e) MASQUERADE、SNAT、DNAT、REDIRECT地址转换。

4.连接跟踪:为了实现较复杂的防火墙功能,Netfilter使用连接跟踪机制对所有网络流量的状态进行跟踪。使用TCP连接状态和其他网络属性(比如IP地址、端口号、协议、序列号、确认号、ICMP类型等),Netfilter根据下面4种状态对每个数据包进行分类:

a) NEW该数据包开启一个新的连接。

b) ESTABLISHED该数据包关联一个已经建立的连接。

c) RELATED该数据包要开启一个新的连接,但是与一个已经存在的连接相关。比如FTP数据传输和ICMP错误。

d) INVALID该数据包与已知连接不相关。不能确定是由于一些什么原因,它不对应任何已知的连接,包括格式不正确或无效、数据包是未知状态、耗尽内存及ICMP错误等。

TCP/IP

1.建立连接和断开连接:在客户端和服务器之间,经过TCP3次握手后建立连接。连接建立后,应用程序的数据就可以传输了。当所有数据被传输完成,经过TCP4次挥手开始断开连接。

netstat命令可以看到每个TCP/IP会话的连接状态,TCP连接状态图如下。

TCP连接状态图

2.流量控制:TCP/IP实现是一种即使在恶劣的网络传输质量和网络拥塞也能确保有效的数据传输和保证数据投递的机制。

3.TCP/IP传输窗口:TCP传输窗口是连接的另一边在请求一个确认前一个给定主机能发送和接收的最大数据量。窗口的大小是接收主机提供的,且使用在TCP头部中的窗口大小字段告知发送方。使用传输窗口,主机可以更有效地发送数据包,因为发送主机不需要针对每个发送的数据包等待确认。这使网络利用率更高,延迟确认也提高了效率。

4. 重传:在连接建立、终止、数据传输中,由于各种原因(网络接口故障、低速路由、网络拥塞、奇怪的网络实现等等)可能引起超时和数据重传。TCP/IP通过排序数据包并试图多次重新发送数据包来处理这种情况。在一个高丢包率的网络上,我们可能希望增加TCP尝试 SYN连接建立数据包的数量

Offload

如果系统上的网络适配器支持硬件Offload功能,则内核可以分出一部分任务给网络适配器,这样可以降低CPU使用率。

Checksum offIoad(校验和offIoad)。通过比较IP/TCP /UDP协议头部中的checksum字段的值和计算数据包中数据的值,确保数据包被正确传输。

TCP segmentation offIoad(TSO TCP 分段 offIoad)。当大于支持的最大传输单元(MTU)数据发送到网络适配器时,数据应该被分成MTU大小的数据包。

参考

读书笔记来自赵永刚老师的《Linux性能优化大师》,如有侵权,请通知删除。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容