网络协议
redwingz
这个作者很懒,什么都没留下…
展开
-
LDAP配置与测试
安装环境:$ cat /etc/issueUbuntu 20.10 \n \l安装ldap,当前版本为2.4.53:apt-get updateapt-get install slapd ldap-utils -y$ slapd -VV@(#) $OpenLDAP: slapd 2.4.53+dfsg-1ubuntu1.4 (Feb 18 2021 14:19:03) $ Ubuntu Developers <ubuntu-devel-discuss@lists.ub原创 2021-04-01 23:03:09 · 2489 阅读 · 1 评论 -
为LIBPCAP库添加接口信息
TCPDUMP的libpcap库在抓包时使用any接口,不能得到接口的信息。查看随数据包一并得到的pcap_pkthdr结构体,包含的信息有限,以下我们在其中增加一个ifindex字段,表示此数据包的接口信息 (文件pcap/pcap.h)。struct pcap_pkthdr { struct timeval ts; /* time stamp */ bpf_u_int32 c...原创 2018-09-18 15:05:33 · 560 阅读 · 0 评论 -
PF_PACKET环形接收缓存
套接口PF_PACKET目前有两种工作模式,以(SOCK_PACKET)类别运行的模式;和以(SOCK_DGRAM/SOCK_RAW)类别运行的模式。前者为传统的方式,在内核和用户层拷贝数据包,并且兼容老内核的数据包抓取接口(参考以下介绍);后者为前者的替代类型,而且可以通过设置共享内存的方式,在内核与用户层交换数据,节省内存拷贝的消耗。以下内容主要介绍后一种模式的共享内存方式。PACKET...原创 2018-09-20 15:46:14 · 7445 阅读 · 0 评论 -
PF_PACKET环形发送缓存
此博客主要介绍PACKET套接口的环形发送缓存buffer,为上一篇环形接收缓存博客的补充:PF_PACKET环形接收缓存: https://blog.csdn.net/sinat_20184565/article/details/82788387发送地址对于发送环形buffer,其创建等操作与接收环形buffer完全相同。用户层在准备好发送的数据帧之后,即将要发送的数据帧写到了共...原创 2018-09-21 15:52:56 · 1390 阅读 · 0 评论 -
PACKET套接口扇出组
对于使用内存映射(MMAP)方式与应用层交互报文的AF_PACKET类型套接口,可以设置扇出组(FANOUT)。接收到的数据帧可以在组内选择任一的套接口使用,应用层可运行多个线程,处理组内不同的套接口。扇出组创建使用setsockopt函数创建扇出组,或者加入一个已经存在的组。如下所示,其参数option分为三个字段:fanout_flags、fanout_type和fanout_grp...原创 2018-09-29 18:59:26 · 1510 阅读 · 0 评论 -
TCPDUMP抓取任意ANY接口数据包
TCPDUMP在使用如下命令,抓取任意接口数据包(比如icmp)时,将重新数据包的目的MAC地址,致使抓取到的数据包非真实流量中的目的MAC地址。如果指定接口名称(使用 -i eth0),就不存在此问题。tcpdump -i any -envv icmp抓取到的数据包如下:# tcpdump -i any -envv icmptcpdump: listening on any, l...原创 2019-02-01 13:51:56 · 15771 阅读 · 0 评论 -
TCP三次握手超时处理
以TCP服务端为例,在接收到客户端的第一个SYN报文之后,负责处理的tcp_conn_request函数,判断如果不使用syn cookie处理机制,将正常相应SYN+ACK报文,并且在此之前,启用TCP的定时器,负责SYN+ACK的超时重传。int tcp_conn_request(struct request_sock_ops *rsk_ops, ...){ if (fasto...原创 2019-02-21 17:40:00 · 7615 阅读 · 0 评论 -
TCP连接的ACCEPT队列
PROC文件somaxconn默认为128,意味着单个套接口队列的长度,可最大监听128个连接。net_defaults_init_net函数初始化此值为宏SOMAXCONN(128)。此处的套接口意指完成TCP三次握手,连接已建立起来的套接口,用户层也还未accept此套接口(此处的套接为子套接口,即子套接口队列)。另外,连接未完成的套接口的数量由/proc/sys/net/ipv4/tcp_m...原创 2019-02-22 23:35:37 · 3299 阅读 · 0 评论 -
TCP的连接套接口哈希表初始化
在tcp_init中,初始化已建立连接的套接口哈希列表ehash,其中e代表Established。void __init tcp_init(void){ tcp_hashinfo.ehash = alloc_large_system_hash("TCP established", sizeof(struct inet_eha...原创 2019-02-19 12:58:50 · 1327 阅读 · 0 评论 -
TCP套接口的最大SYN队列长度
通过PROC文件查看队列长度,可见对于4G内存的系统,tcp_max_syn_backlog的值为128;对于8G内存的系统,其值为256。# cat /proc/sys/net/ipv4/tcp_max_syn_backlog128# / # cat /proc/sys/net/ipv4/tcp_max_syn_backlog 256PROC文件tcp_max_syn_back...原创 2019-02-19 14:58:00 · 1957 阅读 · 0 评论 -
内核网络设备的删除
内核中与网络设备的删除相关的函数有两个:unregister_netdev和free_netdev。前者用在从内核中删除一个已经注册的网络设备;而后者用于释放一个已经分配的网络设备(struct net_device),其在alloc_netdev函数执行成功之后,注册函数register_netdev出错时调用;或者在unregister_netdev中调用,或者在其后调用。不同与内核中的其...原创 2018-08-08 16:54:12 · 1966 阅读 · 0 评论 -
网络设备名称的自动选择
网卡驱动在向内核注册网络设备时,可传入带有格式参数的网卡名,如eth%d,交由内核自动选择网卡名称。struct net_device *alloc_etherdev_mqs(int sizeof_priv, unsigned int txqs, unsigned int rxqs){ return alloc_netdev_mqs(sizeof_priv, "eth%d", eth...原创 2018-08-02 16:23:56 · 1060 阅读 · 0 评论 -
设备模块中数据包接收的两个队列
驱动层程序通过netif_rx或者netif_rx_ni将接收的数据包传入到设备层,设备模块分成两个阶段处理数据包。第一阶段将数据包添加到接收队列(input_pkt_queue)末尾,接收处理完成;第二阶段将接收队列的数据包移动到处理队列(process_queue)中。两个阶段的操作都是链表操作,不涉及到skb数据包的拷贝。在第一阶段中,仅是添加到接收队列即返回,以便驱动程序可以接收下一个...原创 2018-08-09 17:58:54 · 1911 阅读 · 1 评论 -
GLIBC编译选项disable-multi-arch问题
情况是系统之前一直使用glibc-2.7版本,最近升级到glibc-2.17版本。出现一个奇怪的问题,系统内一个so共享链接库在解析文本文件时结果不完整。此so文件是在glib-2.7基础上编译生成的。无源代码,直接在glibc-2.17环境下使用。问题不好确定,只好尝试版本2.7和2.17之间的各个版本。发现问题出在2.11升级到2.12版之时。对比发现2.12版本增加了multi-arch的优...原创 2018-05-08 10:18:08 · 902 阅读 · 0 评论 -
内核网络系统功能变化(2.6-4.12)
最近在升级系统的内核,从2.6版本到4.12,梳理了一下网络部分的主要变化,做一下记录。2.6.6Network packet timestamping optimization;Binary Increase Control (BIC) TCP developed by NCSU. It is yet another TCP congestion control algorithm for ha...原创 2018-07-10 16:31:37 · 651 阅读 · 0 评论 -
重新编译centos内核代码
首先从centos官网下载kernel代码,我选择的是7.3.1611,其它版本也是一样的操作。http://vault.centos.org/7.3.1611/os/Source/SPackages/kernel-3.10.0-514.el7.src.rpm操作系统版本# cat /etc/redhat-releaseCentOS Linux release 7.3.1611 (Core)# 执...原创 2018-07-10 17:59:13 · 2432 阅读 · 0 评论 -
定制rsyslogd的log格式
官网的log格式配置文档如下:https://www.rsyslog.com/doc/v8-stable/configuration/templates.html定制一个仅包含log本身的syslog消息格式,首先修改/etc/rsyslog.conf文件,添加一个myFormat模板,template(name="myFormat" type="string" string="&...原创 2018-07-11 11:55:36 · 558 阅读 · 0 评论 -
自动为USB设备创建符号链接
利用udev自动为插入的usb设备创建符号链接,在/dev/udev/rules.d/目录下添加一个新文件10-insert_usb.rules,在usb设备插入时udev会自动执行此规则文件,内容如下:ACTION!="add", GOTO="usb_end"SUBSYSTEM!="block", GOTO="usb_end"ATTR{partition}=="", GOTO="usb_end&a原创 2018-07-11 13:38:53 · 748 阅读 · 0 评论 -
禁用systemd网卡命名规则
当前网卡的命名方式可以通过proc文件查看,比如网卡ens160,命名方式为4,即对应内核中的NET_NAME_RENAMED,表示网卡名是被用户空间程序修改的:# cat /sys/class/net/ens160/name_assign_type4#define NET_NAME_ENUM 1 /* enumerated by kernel */#define NET_NAME...原创 2018-07-11 14:22:54 · 1920 阅读 · 0 评论 -
网络设备的MAC地址
内核中为网络设备定义了5中MAC地址类型,如下所示,其中NETDEV_HW_ADDR_T_SLAVE类型目前没有使用。局域网LAN类型与存储SAN类型的MAC地址保存在net_device结构体的dev_addrs链表中;UNICAST与MULTICAST类型的MAC地址分别保存在uc和mc链表中。#define NETDEV_HW_ADDR_T_LAN 1 // Loca...原创 2018-07-24 18:15:19 · 4525 阅读 · 1 评论 -
利用busybox制作文件系统
主要是为UML Linux制作文件系统,以便调试使用。使用的是busybox-1.24.0版本。编译安装完成之后,默认安装在源码下的_install目录:root@localhost:rootfs$ ls busybox-1.24.0/_install/bin linuxrc sbin usrroot@localhost:rootfs$busybox命令集安装在bin、sbin、usr/bi...原创 2018-07-07 00:43:34 · 1022 阅读 · 1 评论 -
中断IRQ的处理器Affinity设置
首先说一下自动IRQ亲和性,在内核配置中可以打开自动IRQ亲和性开关(CONFIG_AUTO_IRQ_AFFINITY)使能此功能。用户层程序irqbalance(ubuntu等发行版集成此程序)可自动平衡中断irq在各个处理器上,提升系统的性能。irqbalance用到的一个重要的参数hintpolicy用来控制中断平衡的策略,内核会为每一个中断提供一个affinity_hint值,告诉用户...原创 2018-07-25 14:00:17 · 12318 阅读 · 0 评论 -
用户USER_HZ与内核HZ的值
定义内核文件include/asm-generic/param.h定义了两者的值:# undef HZ# define HZ CONFIG_HZ /* Internal kernel timer frequency */# define USER_HZ 100 /* some user interfaces are */# define CLOCKS_PER_SEC...原创 2018-04-09 13:50:18 · 3219 阅读 · 0 评论