![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络子系统
网络子系统
程序猿Ricky的日常干货
擅长扫地、打杂、开车。。
展开
-
使用nc收发数据
发送端:echo “Hello world” | nc -u 127.0.0.1 7777使用udp协议发送到端口7777接收端:nc -ulp 127.0.0.1 7777从7777端口接收udp协议包原创 2021-01-08 17:51:50 · 1916 阅读 · 0 评论 -
Linux跟踪系统调用耗时的方法(初级篇)
stracestrace -cp 1命令输出:strace: Process 1 attachedstrace: Process 1 detached% time seconds usecs/call calls errors syscall------ ----------- ----------- --------- --------- ---------------- 28.09 0.000084 16 5原创 2021-01-05 11:31:17 · 1005 阅读 · 0 评论 -
CVM抖动问题分析思路
抖动是一个极其复杂的问题,它涉及到的原因非常多,本文试图理一下排查的思路,可能并不能涵盖所有内容。1.对于虚拟机来说,引起抖动的问题可能发生在虚拟机内部或者发生在宿主机上,那么第一步就是要先找出这个问题机器。比如网络抖动,那么直接就分别在宿主机和虚拟机中进行抓包来找出问题机器,定位到问题机之后再进一步查看。2.针对抖动问题,首先就是要抓到现场的数据,抖动一般都是比较短暂时间出发的行为,因此需要比较细粒度的trace方法常用的有atop、perf record等等3.引起抖动问题的因素有多种,需要一原创 2021-01-05 11:30:25 · 427 阅读 · 0 评论 -
如何判定一个TCP应答包为dupack?
首先需要明白TCP包中的sequence和ack sequence的含义:1.sequence·是表示发送方的当前包的起始数据序列号2.ack sequence则是表示对接收方的应答序列号,它是指对方下一个包要使用的起始sequence。(上一接收包的sequence加上len之后的值)那么再来看什么是dupack,它是为了快速重传机制而发送的重复确认包,那么是不是说只要发送包中的ack sequence一直相同就表示它是一个dupack呢,并且会触发重传机制?实际上并不是如此,试想一下,当发送方A原创 2020-12-28 20:47:07 · 1510 阅读 · 0 评论 -
定位网络丢包内核路径的几种方法
第一个是 dropwatch# dropwatch -lkasInitializing kallsyms dbdropwatch> startEnabling monitoring...Kernel monitoring activated.Issue Ctrl-C to stop monitoring1 drops at icmp_rcv+11c (0xffffffff8193bb1c) [software]1 drops at icmp_rcv+11c (0xffffffff819原创 2020-12-10 17:44:47 · 1230 阅读 · 0 评论 -
如何理解ifconfig中的errors/dropped/fifo/frame统计指标
对于ifconfig来说,它所获取一些错误统计信息如下所示:RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0首先这些指标获取是从/proc/net/dev:cat /proc/net/devInter-| Receive原创 2020-12-10 17:17:33 · 13430 阅读 · 1 评论 -
centos和ubuntu分别如何配置dhcp网络
centos默认启动网卡未使能/etc/sysconfig/network-scripts/ifcfg-enp0s3BOOTPROTO=dhcpONBOOT=yesubuntu server默认网卡未使能,如何配置网络/etc/network/interfaces:auto enp0s3iface enp0s3 inet dhcp/etc/init.d/networking restartubuntu18.04 server,启用了新的网络工具netplan:/etc/netplan原创 2020-11-05 11:39:22 · 228 阅读 · 0 评论 -
新安装Linux系统配置网络(centos/ubuntu)
centos安装完了centos新系统之后,发现网络不通,实际上是并没有使能和配置网卡,通过修改在如下位置的配置文件:网卡配置:/etc/sysconfig/network-scripts/ifcfg-enp0s3自启动网卡:使能自启动网卡选项:ONBOOT=yes自动获取IP:需要使能dhcp服务自动获取IP,自启动网卡选项:BOOTPROTO=dhcpONBOOT=yes静态配置IP:配置ip、netmask、gateway:IPADDR='192.168.1.10'NET原创 2020-10-17 15:17:46 · 898 阅读 · 0 评论 -
浅谈虚拟交换机(vswitch)技术演进
虚拟化环境中,对于网络的连接有多种方式,以KVM为例,我们平时在使用libvirt或者qemu创建虚拟机时,可以选择NAT网络连接和bridge桥接网络连接。首先来调查一下这二者的实现区别是什么。基础虚拟网络桥接网卡首先来看下网卡桥接的连接方式,它相当于虚拟机和宿主机共用同一块物理网卡,虚拟机具有独立的IP地址,并且与宿主机所在网络处于同一个局域网,就相当于局域网中多了一台普通机器,可以直接访问局域网中的其他物理机,同一个局域网中的其他物理机当然也可以访问到该虚拟机。网络拓扑结构相当于下图所示:桥原创 2020-10-13 11:24:39 · 6446 阅读 · 2 评论 -
DPDK (2) - 编译过程
本文使用dpdk-20.08版本作为示例。关键字RTE:runtime environmentEAL:environment abstraction layer方法一:Make编译make config T=x86_64-native-linuxapp-gccmake编译报错:/root/work/dpdk-20.08/lib/librte_eal/linux/eal_memory.c:32:18: fatal error: numa.h: No such file or direct原创 2020-09-23 17:40:15 · 3722 阅读 · 0 评论 -
python获取本机默认网关
方法1def get_gateway(): cmd = "ip route | grep default | awk '{print $3}'" try: p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) p.wait() results = p.stdout.readlines() if len(resu原创 2020-09-28 15:29:03 · 1866 阅读 · 0 评论 -
内核网络协议栈offload功能盘点
TSOTCP Segmentation Offload的缩写,只针对TCP包发送,超过 MTU 大小的报文不需要在协议栈分段,直接offload到网卡,由网卡硬件实现分段,降低 CPU 负载。GSOGeneric Segment Offload的缩写,它是 TSO 的软件实现,延迟大报文分段时机到 IP 层结束或者设备层发包前,不同版本内核实现不同。LROLarge Receive Offload的缩写,在接收网络包时,由网卡硬件实现网络包的聚合,聚合成一个大的数据包在上报到内核协议栈中去处理,从原创 2020-09-23 20:56:17 · 1108 阅读 · 0 评论 -
DPDK (1) - PMD驱动方案
为了支持Userspace IO,DPDK可以选择如下三种类型的驱动:uio_pci_genericuio + igb_uiovfio-pciuio_pci_generic是内核原生的一种uio驱动,该驱动提供了uio功能,直接使用如下命令加载:sudo modprobe uio_pci_generic这个原生驱动是不支持VF设备创建的,因此DPDK也提供了另外一种uio驱动igb_uio,它是可以用于宿主机上来创建VF设备的。适用性比内核原生的uio_pci_generic更强一些,其中原创 2020-09-23 17:07:13 · 5033 阅读 · 0 评论 -
meson+ninja环境搭建
使用centos 7.8搭建meson+ninja编译环境,主要依赖三个rpm包:python3.6ninja-buildmesonpython3安装这里直接使用yum进行安装:yum -y install python3ninja rpm包安装下载ninja-build rpm包:https://cbs.centos.org/koji/buildinfo?buildID=24453,使用如下命令安装:rpm -ivh ninja-build-1.7.2-3.el7.x86_64.r原创 2020-09-21 12:28:51 · 14725 阅读 · 1 评论 -
记一次更新网卡驱动的过程
驱动编译本机已经编译了内核,想要在该内核版本的网卡驱动中加一些调试信息,由于使用的是的intel的ixgbe驱动,于是自己修改了相关的代码,然后使用如下命令进行编译:make SUBDIRS=./drivers/net/ethernet/intel/ modules安装驱动编译生成的 ixgbe.ko 新驱动在./drivers/net/ethernet/intel/目录中,直接把该驱动模块替换到系统的模块安装目录。可以通过modinfo命令来查看相关驱动信息:[root@localhost ~原创 2020-09-17 10:48:11 · 1147 阅读 · 0 评论 -
如何对服务器资源进行限流控制?
本文只是记录我的一个大纲,暂时还没有时间深入细节。。。CPU/MEM资源可以依赖cgroup机制来做到资源限制网络带宽资源可以依赖tc机制(tracffic control)来进行资源控制原创 2020-09-16 14:57:49 · 382 阅读 · 0 评论 -
为什么tcpdump抓包数据校验和异常、长度超过MTU?
内核实现tcpdump在抓取网络包时,实际它会创建一个socket,并且设置网卡为混杂模式,用于接收网络链路上所有地址的包。发送方向:dev_queue_xmit->dev_queue_xmit_nit:static void dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev)原创 2020-09-16 14:38:25 · 2540 阅读 · 0 评论 -
聊聊网卡bond功能
如何查看机器中的网卡bonding情况查看是否存在bond网卡:ifconfig如何发现有带有 bondX 名字的网卡,那么说明本机是存在网卡bonding情况的。然后查看网卡bonding的情况:cat /proc/net/bonding/bond1cat这个节点会输出网络bonding的模式,已经由哪些物理网卡作为bonding slave。查看bond网卡配置:/etc/sysconfig/network-scripts/ifcfg-eth0/etc/sysconfig/netw原创 2020-09-16 11:48:20 · 2191 阅读 · 0 评论 -
wireshark最常用过滤规则
过滤一个流在一个协议为TCP的包上右击,选择"追踪流-TCP",将进入TCP流追踪,此时会在主面板上只会显示对应流的包。stream对应的id可以在TCP中的stream index中查看,也可以直接使用如下命令来过滤对应流的包:tcp.stream == 5查看sack包tcp.options.sack查看乱序包(out of order)tcp.analysis.out_of_order包长度ip.len == 100 除了以太网头固定长度14,从IP Header到IP pay原创 2020-09-16 11:08:20 · 2873 阅读 · 0 评论 -
SKB中的各种长度、数据指针和操作函数
skb结构体中的长度和数据指针len: 线性区和分片区域的总长度data_len:分片区域frag page中的数据长度len-data_len: 当前协议层中的线性区长度head:线性区的起始地址data:数据的起始地址tail:数据的结束地址end:线性区的结束地址headroom:从head到data之间的空间tailroom:从tail到end之间的空间除了上面的几个成员,特别指出一个truesize,它表示一个skb所消耗的内存,包括了skb结构体本身,skb shared i原创 2020-09-15 22:19:41 · 5012 阅读 · 0 评论 -
socket中的reuse addr和reuse port
SO_REUSEADDR(1)首先对于一个server服务进程来说,它的创建流程是socket->bind ->listen->accept创建监听套接字,bind一个指定端口,listen监听端口,为每个连接提供服务(一般会创建子进程)。当服务进程重启时,那么会重新执行一遍上面的流程,如果在创建socket后没有使用SO_REUSEADDR选项进行设置,再次进行bind就会失败。那么原因是什么?首先需要了解一下TCP协议的4次挥手动作,如文章开头的图片所示,当一个连接在关闭时.原创 2020-09-15 22:01:00 · 5347 阅读 · 0 评论 -
调用send发送网络数据包一定会立马发送出去吗?
Linux应用层调用了send发送网络数据,那么按照简单的思维,这个动作会触发网卡发送数据,而现实并不是如此!socket层首先对于send来说,分为阻塞发送和非阻塞发送:(1)阻塞操作内核会检测发送缓冲区是否存在足够的空间存放用户数据,如果空间足够那么直接拷贝数据到socket send buffer,后续发送动作交给协议栈来支持;如果空间不够那么send操作会阻塞,直到内核发送缓冲区空间足够,再数据拷贝到发送缓冲区,并最后返回用户空间。(2)非阻塞操作对于非阻塞操作来说,当发送缓冲区空间不够原创 2020-09-09 17:05:24 · 3441 阅读 · 1 评论 -
网卡的HWADDR和MACADDR的区别?
在centos中可以在如下文件中查看一个NIC的配置 : /etc/sysconfig/network-scripts/ifcfg-ethN会发现有两个和网卡物理地址有关的配置一个是HWADDR还有一个是MACADDR,这两个的区别是什么?我本来觉得网卡物理地址不是固定的吗?网卡出厂时就已经确定了,不会再更改了呀,我还是太年轻。。。实际上网卡MAC地址是可以动态修改的,那么HWADDR又是指什么呢?它实际上才是刚才说的出厂时固定的硬件物理地址,它是被厂家写入到芯片中的,需要特殊的rom工具才能修改,它原创 2020-09-04 16:37:54 · 9046 阅读 · 2 评论