![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux高级网络编程
文章平均质量分 84
叨陪鲤
哈
展开
-
NAT的四种分类:全锥形NAT,地址受限锥形NAT,端口受限锥形NAT,对称NAT
文章目录1. STU1.1 Full cone NAT(全锥形NAT)1.2 Restricted Cone NAT(地址受限锥形NAT)1.3 Port Restricted Cone NAT(端口受限锥形NAT)1.4 Symetric NAT(对称NAT)2.小结参考文献:[1](https://www.h3c.com/cn/d_201206/922128_30005_0.htm)[2](http://www.h3c.com/cn/d_201208/751474_30008_0.htm)1.原创 2021-07-15 11:22:18 · 55529 阅读 · 8 评论 -
监控IPv4和IPv6下的相同端口
如今,随着网络的日益普及,IPv4地址数量相对于与日俱增的网络设备而言,简直太稀缺了,已经远远无法满足日常需求,因此出现了IPv6协议,并开始逐渐向IPv6进行过渡。在如今的过渡阶段中,网络环境中同时存在IPv4网络和IPv6网络,因此开发软件时通常要求支持双栈的功能。同时监控双栈(IPv4栈、IPv6栈)下的指定端口号实现上也比较简单,分别创建两个套接字:一个用来监听IPv4端口 一个用来监听IPv6端口只是这里面有一个需要注意的地方:创建两个UDP套接字,分别监听IPv4,IP...原创 2021-06-15 23:34:59 · 6305 阅读 · 4 评论 -
路由表(RIB表、FIB表)、ARP表、MAC表整理
在一些常见的网络设备中(如交换机、路由器),为了实现网络转发功能,各自通过维护一些表项来完成路由寻址及快速转发功能,其中比较重要的表项有:路由表 转发表 Mac表 ARP表本文对这网络中的最关键的四个表项做一个详细介绍。目录1. 路由表(Routing Table)、转发表(Forwarding Table)2.Mac表(Media Access Control Table)2.1 地址学习线程:2.2 报文转发线程:3. ARP表(Address Resolutio..原创 2021-05-23 22:00:34 · 29993 阅读 · 21 评论 -
❤工作这么久,分片重组功能你真的研究过吗?❤
声明:未经本人同意,严禁一切形式转载!!!文章目录1. NF_IP_LOCAL_IN这部分的作用2. ip_local_deliver接口2.1 分片重组模块~整体框架2.2 分片重组时数据组织结构2.3 分片报文重组完毕后的数据结构2.4 相关函数2.4.1 ip_local_deliver()函数2.4.2 ip_defrag()函数2.4.3 ip_find()函数2.4.4 ip_frag_queue()函数2.4.5 ip_frag_reasm()函数3. ip_local_d...原创 2021-04-09 00:39:00 · 4233 阅读 · 0 评论 -
即时通讯网-TCPIP族关系图
原创 2020-12-13 18:44:59 · 4426 阅读 · 0 评论 -
报文格式大全
网络开发中非常全面的不同协议报文格式大全:在线网址:http://www.023wg.com/message/message/cd_feature_cover.html协议地图:如果需要离线版本的chm功能,请发送邮件或者私信我。邮箱地址为vip_13031075266@163.com...原创 2020-06-23 23:18:47 · 12621 阅读 · 71 评论 -
epoll代码框架
epoll代码实现框架:#define MAX_EVENTS 10struct epoll_event ev, events[MAX_EVENTS];int listen_sock, conn_sock, nfds, epollfd;/* Code to set up listening socket, 'listen_sock', (socket(), bind(), listen()) omitted */epollfd = epoll_create1(0);if (epollf原创 2020-06-21 23:56:15 · 4241 阅读 · 0 评论 -
知乎大佬图文并茂的epoll讲解,看不懂的去砍他
select、poll、epoll的文章很多,自己也看过不少经典好文。不过第一次看到讲的如此通俗易懂、又图文并茂的。因此拿来分享下,供后续翻看学习。原文链接:https://zhuanlan.zhihu.com/p/63179839下面开始划重点:因为epoll的重要性,不少游戏公司(如ssjj小游戏)在招聘服务端同学时,可能会问及epoll相关的问题。比如epoll和select的区别是什么?epoll高效率的原因是什么?如果只靠背诵,显然算不上深刻的理解。网上虽然也有不少讲解epol转载 2020-06-17 00:42:17 · 9374 阅读 · 1 评论 -
异步处理方式之信号(4):信号集的使用
8 信号集8.1信号集的基本操作函数 前面我们已经知道,不同的信号的编号可能超过一个整型量所包含的位数,因此我们不能使用整型量中的一位来表示一种信号,也就是说我们不能使用整型变量来表示信号集。POSIX.1定义了一种新的数据类型:信号集(sigset_t), 并且还定义了5个处理信号的函数。#include <signal.h>int sigemptyset(sigset...原创 2020-04-28 11:53:14 · 4433 阅读 · 2 评论 -
异步处理方式之信号(三):kill、raise、alarm、pause函数简介
文章目录6. 函数kill和raise7. 函数alarm和pause7.1 alarm()7.2 pause()6. 函数kill和raise kill函数用来将信号发送给进程或者进程组。 raise函数则是进程用来向本进程发送信号的。#include <signal.h>int kill(pid_t pid, int signo);int raise(int sig...原创 2020-04-27 18:07:25 · 4680 阅读 · 0 评论 -
异步处理方式之信号(二):可靠的信号与不可靠的信号
不可靠的信号4.1 什么是不可靠的信号 在早期的Unix版本中,信号是不可靠的。这里的不可靠指的是:信号可能会丢失(一个信号已经发生了,但是该进程却不知道这一点)。除此之外,进程对信号的控制能力也特别差,它只能捕捉或者忽略信号。但是有时用户希望通知内核阻塞某个信号,不要忽略该信号;而在进程准备好处理该信号时在由内核重新通知该进程。某些书籍提到signal函数每触发一次,得重新调用sig...原创 2020-04-27 16:15:46 · 4499 阅读 · 1 评论 -
异步处理方式之信号(一):基础知识和signal函数说明
文章目录1. 引言2. 信号的概念2.1 信号操作之忽略信号2.2 信号操作之捕捉信号2.3 信号操作之执行系统默认操作2.4 常见的信号3. 函数signal3.1 signal函数介绍3.2 signal函数示例3.3 signal函数的限制1. 引言 信号是一种软中断。很多比较重要的应用程序都需要处理信号。信号提供了一种异步处理事件的方法,例如:终端用户输入中断键,会通过信号机制终止...原创 2020-04-27 12:27:21 · 5891 阅读 · 0 评论 -
如果还是看不懂container_of()函数,那算我输
在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀? 函数还可以这样定义??? 怎么还有0呢??? 哎,算了,还是放弃吧。。。)。 这就是内核大佬们厉害的地方,随便两行代码就让我们怀疑人生,凡是都需要一个过程,慢慢来吧。 其实,原理很简...原创 2020-04-21 09:33:14 · 4242 阅读 · 0 评论 -
IPsec 9个包分析(主模式+快速模式)
第一阶段:ISAKMP协商阶段1.1 第一包包1:发起端协商SA,使用的是UDP协议,端口号是500,上层协议是ISAKMP,该协议提供的是一个框架,里面的负载Next payload类似模块,可以自由使用。可以看到发起端提供了自己的cookie值,以及SA的加密套件,加密套件主要是加密算法,哈希算法,认证算法,生存时间等。Initiator cookie:817622ea0136...原创 2020-03-06 23:18:58 · 22364 阅读 · 5 评论 -
C语言实现任务调度与定时器
代码实现是在xl2tpd的源码中get到的,感觉很有意思的一段代码。基本功能就是实现定时器,时间到后从定时队列中取出,然后完成指定的任务。1. schedule.c代码(自己添加了main函数,用来调试)/* * Layer Two Tunnelling Protocol Daemon * Copyright (C) 1998 Adtran, Inc. * Copyright (C) 2...原创 2020-02-22 00:31:09 · 10103 阅读 · 0 评论 -
PPP协议、PPPoE协议、L2TP协议的关系
1. 简述首先对这3中协议做一个简单的描述:协议协议类型描述PPP点对点链路层协议应用最广泛的点对点协议,可应用在多种网络,改善了SLIP协议的不足PPPoE点对点链路层协议对PPP协议进行扩展,将PPP用于以太网上L2TP二层隧道协议对PPP协议进行了扩展,可应用在多种网络中,主要将其PPP协议用于互联网上所以,无论PPPoE还是L2TP...原创 2020-02-07 18:14:58 · 9659 阅读 · 0 评论 -
GRE隧道协议
1. GRE协议简介GRE(General Routing Encapsulation ,通用路由封装)是对某些网络层协议(如IP和IPX)的数据报文进行封装,使这些被封装的报文能够在另一网络层协议(如IP)中传输。此外 GRE协议也可以作为VPN的第三层隧道协议连接两个不同的网络,为数据的传输提供一个透明的通道。GRE主要有以下特点: 机制简单,无需维持状态,对隧道两端设备的CPU负担...原创 2020-02-06 21:20:24 · 38135 阅读 · 1 评论 -
L2TP协议简介
1. L2TP 概述L2TP(Layer 2 Tunneling Protocol,二层隧道协议)是 VPDN(Virtual Private Dial-up Network, 虚拟私有拨号网)隧道协议的一种。VPDN 是指利用公共网络(如 ISDN 或 PSTN)的拨号功能接入公共网络,实现虚拟专用网,从而为企业、小型 ISP、移动办公人员等提供接入服务。即,VPDN 为远端用户与私有企业网...原创 2020-02-05 00:32:50 · 9717 阅读 · 0 评论 -
FTP协议简介
1. FTP协议概述FTP协议的英文全称为File Transfer Protocol, 简称为FTP, 它是从一个主机向一个主机传输文件的协议。FTP协议中客户端和服务器进行文件交互的方式如下图1所示,FTP客户端包含两部分:用户接口和客户端接口。 用户接口用来和用户进行人机交互,而客户端接口则负责FTP协议相关的处理。2. FTP协议交互步骤例如一个用户想把远程FTP服务器上的某个文...原创 2020-01-05 14:50:07 · 7371 阅读 · 0 评论 -
netfilter框架之hook点
1. Netfilter中hook的所在位置 当网络上有数据包到来时,由驱动程序将数据包从网卡内存区通过DMA转移到设备主存区(内存区), 之后触发中断通知CPU进行异步响应,之后ip_rcv函数会被调用到; ip_rcv函数首先对报文进行检验,最后调用NF_HOOK函数将控制权交给在NF_IP_PRE_ROUTING注册的规则进行处理,之后数据到达ip_rcv_finish函数并进行路...原创 2020-01-05 00:09:13 · 4455 阅读 · 0 评论 -
C语言实现有限状态机
1. 什么是有限状态机有限状态机在百度百科上的解释为:有限状态自动机(FSM “finite state machine” 或者FSA “finite state automaton” )是为研究有限内存的计算过程和某些语言类而抽象出的一种计算模型。有限状态自动机拥有有限数量的状态,每个状态可以迁移到零个或多个状态,输入字串决定执行哪个状态的迁移。有限状态自动机可以表示为一个有向图。2. 有...原创 2019-10-19 00:24:14 · 11041 阅读 · 14 评论 -
Linux 动态库的编译和使用
1. 动态链接库简介 动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序。动态库是目标文件的集合,目标文件在动态库中的组织方式是按特殊的方式组织形成的。在动态库中函数和变量的地址是相对地址而不是绝对地址,其真实地址在调用动态库的程序加载时形成的。 动态库的名字有别名(soname), 真名(realname)和链接名(linke...原创 2019-09-28 23:25:53 · 4866 阅读 · 1 评论 -
ARP原理和常见分类
路由器一个重要功能是隔离广播域。就是不转发广播包,而ARP请求就是个广播包===> arp 代理1) ARP交互流程:(1)目的地址和主机在同一个网段(A-C): A -----------------|---------------- B |---------------- C |---------------- D ...原创 2019-09-28 18:28:31 · 5749 阅读 · 0 评论 -
select、poll、epoll之间的区别
select、poll、epoll之间的区别:(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n...转载 2019-07-27 18:13:12 · 5587 阅读 · 1 评论 -
DHCP 协议及其交互过程
1. DHCP用途简介:DHCP服务应用于大型局域网络中,使网络中的主机自动获取IP地址,网关,DNS服务器等信息,能够提升IP地址的利用率。一般情况下,我们的家用、公司、公共场合使用的路由器都具有DHCP服务功能,当我们的手机或者电脑需要联网时会和DHCP服务器进行自动交互,之后服务器会给我们的终端分配一个IP地址,同时我们的终端也会保留服务器的网络信息(IP, MAC, DNS等)用于上网...原创 2019-05-25 15:52:23 · 5950 阅读 · 0 评论 -
Linux proc文件系统小记
序言: 当linux系统存在多个网口时(也可以是一个网口配置两个IP),每个网口配置不同的IP地址,并且分别连接到不同的电脑上,电脑分别配置与相连的网口统一网段的IP且将电脑网关设置为linux的网口IP。 内核在默认情况下是不会转发这两个网卡间的数据的,这是为了系统的安全性采取的措施。 但是这个情况可以进行修改,从而使内核可以转发数据而实现两个不同网段的电脑...原创 2019-04-29 20:24:09 · 4138 阅读 · 0 评论 -
Linux原始套接字抓取底层报文
1.原始套接字使用场景 我们平常所用到的网络编程都是在应用层收发数据,每个程序只能收到发给自己的数据,即每个程序只能收到来自该程序绑定的端口的数据。收到的数据往往只包括应用层数据,原有的头部信息在传递过程中被隐藏了。某些情况下我们需要执行更底层的操作,比如监听所有本机收发的数据、修改报头等,而像SOCK_STREAM、SOCK_DGRAMZ则通常用于应用层,并不能满足该需求。...原创 2018-12-16 00:08:09 · 9075 阅读 · 13 评论