![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
协议栈
文章平均质量分 93
仙人掌开叉
技术宅
展开
-
丢包监控工具 - droptrace
本文用于介绍Linux系统下网络丢包监控工具droptrace的原理和使用方法、转载 2022-06-10 14:32:07 · 3484 阅读 · 0 评论 -
netfilter内核实现概述
netfilter内核实现概述一、前言netfilter是Linux内核中网络防火墙的基础,无论是基于xtables的iptables,还是conntrack、nftables,其底层都是基于netfilter的。总体来说,netfilter提供了一个相对来说比较通用的防火墙框架,这个框架提供了个入口,内核中的其他网络模块可以通过这个入口来实现自己的网络逻辑。本文简单地对netfilter的整个框架以及其内核实现进行了梳理。二、netfilter框架2.1 基本原理相比于那些基于netfilter原创 2022-01-23 14:13:22 · 2083 阅读 · 0 评论 -
深入解析MMAP模式下的原始套接字
深入解析MMAP模式下的原始套接字一、前言对于原始套接字大家都不陌生,即PF_PACKET类型的套接字,我们平时使用的抓包程序就是基于这种套接字实现的。下图中就是我们平时使用到的套接字的分类,可以看到原始套接字是一种底层的链路层的套接字,它直接接收网卡驱动收上来的包。这里要做一下概念上的区分,PF_INET中的SOCK_RAW一般情况下也被称为原始套接字,只不过这种套接字是工作在IP层的,即网络模型中的三层,并非我们今天关注的对象。原始套接字可能会接收到或者发送出去大量的报文,因此效率对其是非常重要原创 2021-06-17 15:30:55 · 1713 阅读 · 0 评论 -
TCP实现之:TCP报文接收
TCP实现之:TCP报文接收本章节讲述了内核TCP协议层快速收报的流程,包括从IP层将报文传递给TCP层,一直到用户调用系统调用收到报文数据的过程。之所以说是快速收报过程,是因为本文暂不分析异常网络情况下的报文,例如紧急报文、失序报文等的处理过程。一、SOCK锁机制sock中的sk_lock字段是用来对sock加锁的,该字段的类型为socket_lock_t。在对sock中的报文接收队列进行处理(包括报文的读取和添加)时,需要先获取该套接字上的锁,其中socket_lock_t的定义如下:typed原创 2021-06-17 14:40:08 · 1387 阅读 · 0 评论 -
高性能异步IO机制:IO_URING
高性能异步IO机制:IO_URING一、前言1.1 异步IO机制Linux内核提供的IO机制大都是同步实现的,如常规的read/write/send/recv等系统调用。同步IO机制存在着一定的弊端,例如:(1)IO的实现都是在当前进程上下文的系统调用中完成的,会阻塞当前进程,降低系统的实时性;(2)性能较低。异步IO指的是用户程序将IO请求提交后,无需等待IO操作的完成,而是可以继续处理别的事情。当IO操作完成后,会以某种方式通知用户程序。Linux系统下现有的异步IO机制的实现主要为两种:P原创 2021-06-16 13:58:29 · 3628 阅读 · 3 评论 -
TCP原理之:虚拟网络
TCP原理之:虚拟网络1. VLAN链路层(L2)对网络进行划分及隔离的方法,类似于网络层IP的网段。VLAN(Virtual LAN),顾名思义指的是虚拟局域网。什么是虚拟局域网呢?首先我们来回顾一下局域网。简单的几台或者几百台计算机通过二级交换机连接在一起所组成的网络可以称为局域网。当局域网中的某台计算机发出广播帧时,会传播到网络中所有的计算机上。当计算机数量比较多时,会严重浪费带宽和资源。为了减少广播帧,需要将局域网分割为多个广播域,VLAN就是为此诞生的。通俗的讲,可以理解为VLAN将一原创 2021-06-16 16:53:19 · 512 阅读 · 0 评论 -
TCP实现之:一个ping包的旅行
TCP实现之:一个ping包的旅行前言所谓的ping指的是linux、windows等操作系统下的一个用来探测网络是否连通的命令,其基本格式为:ping <目的ip地址>,其本质为发送一个ICMP协议包。1. ICMP协议简介ICMP(Internet Control Message Protocol)网络控制报文协议属于TCP/IP协议簇的一个子协议,用于在主机、路由器等设备之间传递控制消息,属于L3协议。控制消息指的是网络是否通畅、主机是否可达、路由是否可用等网络本身的消息。虽然它并原创 2021-06-16 16:48:54 · 748 阅读 · 0 评论 -
TCP实现之:Hellow World
TCP实现之:Hellow World绪论之所以用Hellow World来命名这一章节,是因为这一章节中所讲述的是Linux源码中网络数据传输最基础的部分:从网卡驱动到L3协议之间的报文的接收和发送。1. 网卡的注册和初始化网卡驱动的注册网卡是一种PCI设备,所以其采用通用的PCI注册方法来进行注册。struct pci_driver是PCI驱动程序在注册PCI设备时所用到的主要的数据结构,其定义如下:struct pci_driver { struct list_head node; c原创 2021-06-16 16:47:25 · 370 阅读 · 0 评论 -
TCP实现之:iptables原理
TCP实现之:iptables原理一、前言提到防火墙,大家都不陌生。防火墙技术是通过有机结合各类用于安全管理与筛选的软件和硬件设备,帮助计算机网络于其内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息安全性的一种技术。通俗的讲,防火墙就是计算机操作系统中的一种对网络报文进行监控、筛选和过滤以达到保护操作系统免受攻击的机制。防火墙常用的功能包括以下几点:包过滤功能。包过滤指的是防火墙对进入(入站)或者发出(出站)的网络数据包按照预先定义好的规则进行过滤,对于不符合规则的包进行丢弃等操作,这原创 2021-06-16 16:44:47 · 496 阅读 · 0 评论 -
TCP实现之:L3的IP协议
TCP实现之:L3的IP协议1. 报文的接收从上一篇文章TCP实现之:Hellow World我们已经知道了,网卡驱动(也可以理解为L2层)是通过IP协议层注册的ip_packet_type来讲数据传递给IP层处理的,其处理函数为ip_rcv,下面我们来重点分析一下该函数。ip_rcvint ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_d原创 2021-06-16 16:42:22 · 862 阅读 · 0 评论 -
TCP实现之:套接字
TCP实现之:套接字套接字的数据结构按照域的不同可以分为三种:用户态套接字、socket和sock,其中socket结构体是内核中的与用户态相似的套接字数据结构,可以理解为它是为用户态提供的一种接口,而sock结构体比较复杂,它是内核用来进行数据传输的数据结构,可以理解为它是套接字的实现。这三种套接字可谓息息相关。struct socket这里的socket又被称为BSD socket(伯克利套接字),它对应着网络模型中的表示层,其定义比较简单,只有7个字段,如下:struct socket {原创 2021-06-16 16:36:06 · 1940 阅读 · 0 评论 -
TCP实现之:IP分片内核实现
TCP实现之:IP分片内核实现一、前言先来回顾一下基本概念吧。啥是分片?啥是分段?报文在网络设备间传输的时候,一次能够传输单个报文的尺寸是有限制的,这个限制被称为MTU:最大传输单元(Maximum Transmission Unit)。不同类型的网络的MTU大小可能有差异,如以太网的MTU为1500。这个MTU指的是报文所能携带的有效数据,因此并不是以太网数据帧的真实大小,其真实大小为:1500+14+4=15181500 + 14 + 4 = 15181500+14+4=1518其中14为原创 2021-06-16 16:29:09 · 855 阅读 · 0 评论 -
TCP实现之:sk_buff结构浅析
TCP实现之:sk_buff结构浅析一、前言sk_buff是内核中用于存储报文缓存信息的结构体,可以算得上是内核协议栈中最重要的一个数据结构了。一方面,为了保持高效的网络报文处理效率,这要求sk_buff的结构也必须是高效的;另一方面,sk_buff被内核协议栈中的各个协议所共同使用,并在各个协议之间传递,这要求其能够兼容所有的网络协议。种种因素导致了这个结构体异常的复杂,广定义就花了三页的代码,这里我们简单对其关键属性进行分析。二、报文存储首先我们要理解网络报文存储的几个概念:线性缓存区、IP分片原创 2021-06-16 16:27:26 · 2187 阅读 · 0 评论 -
TCP实现之:TCP四次挥手
TCP实现之:TCP四次挥手一、前言TCP作为一种可靠的双向传输协议,使得其连接的释放也需要像连接的建立一样,拥有一套可靠的机制来实施,这个过程就是通过著名的四次挥手来实现的。为什么连接的建立需要三次握手,而连接的释放却要四次挥手呢?这是因为TCP作为一种可靠的双向连接,在释放连接的时候需要确保两边的数据都发送完成后才能释放,如下图所示。图中,为正常的TCP的状态变更图。其中,发送FIN报文意味着告诉对方:“我很好,我的数据发送完成了,不会再发送新数据了”。只有当两边都完成了数据的发送,即都发送了F原创 2021-06-16 16:25:22 · 629 阅读 · 0 评论 -
TCP实现之:TCP三次握手
TCP实现之:TCP三次握手前言关于TCP三次握手的原理和过程咱就不讲了哈,感兴趣的可以参考一下我的另一篇文档:TCP原理之:TCP数据传输,这里就简单分析一下内核对于TCP三次握手以及fastopen和syn_cookie等机制的实现。一、常规TCP建链1.1 基本原理TCP连接的建立过程如下图所示:首先,客户端调用connect系统调用进行建链的发起,此时内核会创建一个套接口,发送SYN报文,并将其置为SYN_SEND状态;服务端收到SYN报文后,会创建一个struct request_原创 2021-06-16 16:23:31 · 1730 阅读 · 0 评论 -
TCP原理之:linux网桥
TCP原理之:linux网桥0. 前言Linux内核提供了对网桥的支持,通过建立网桥设备能够将系统中的多个网络接口相连通,实现网络接口之前的通信。为了便于理解,我们可以将网桥想象成现实中的交换机,事实上网桥基本上实现了交换机的所有功能。1. 原理解析现实中的交换机我们可能比较清楚,而网桥这种抽象的、处于Linux系统内部的设备,它的机制和工作原理究竟是怎样的呢?简单来说,我们可以通过下面的一张示意图来进行解析:与你平时对网桥的理解是不是有些不一样呢?对于内核以及协议栈而言,网桥也是一种网络接口,原创 2021-06-16 16:19:22 · 1478 阅读 · 1 评论 -
TCP原理之:TCP数据传输
TCP原理之:TCP数据传输TCP(Transmission Control Protocol)全称为传输控制协议, 它工作在网络七层模型中的第四层-传输层, 是一种面向连接的可靠的数据传递协议。 对于IP和UDP协议, 它们会在接收到数据后根据数据的校验值来对数据的有效性进行判断, 对于无效的数据会直接丢弃, 而不会去纠正。 相比于UDP协议, TCP协议显得更“安全”, 它在数据失效时会进行“重传”以确保数据的正确性。本文主要讨论TCP数据传输过程中所涉及到的一些基本知识,包括报文的格式,TCP连接建原创 2021-06-16 16:16:41 · 9826 阅读 · 0 评论