linux

tcp 的三个接收队列

prequeue 在linux内核中,每一个网络数据包,都被切分为一个个的skb,这些skb先被内核接收,然后投递到对应的进程处理,进程把skb拷贝到本tcp连接的sk_receive_queue中,然后应答ack。 以往的内核处理这些skb的时候,是直接通过内核调度的,有数据来了,就进行进程调度,这样虽然实时性高,但是会导致进程阻塞,或者调度消耗大的问题。因此内核搞出来一个新的东西叫做,prequeue,skb先统一由内核接收, 然后通过内核原有的进程调度机制进行调度,当调度到某一个进程的时候,该进程发现prequeue中有skb属于自己,于是把prequeue中的skb拷贝到本进程的sk_receive_queue中,并做ack应答。 这样一来,收发网络数据包,就不会引起进程调度了,虽然ack的时间可能会不那么及时,但是cpu的利用率实际上是提高了。 sk_

  • network
1 min read
linux

Connection reset by peer

连接原因 如果一端的Socket被关闭(或主动关闭,或因为异常退出而 引起的关闭),另一端仍发送数据,发送的第一个数据包引发该异常(Connect reset by peer)。 Socket默认连接60秒,60秒之内没有进行心跳交互,即读写数据,就会自动关闭连接。 一端退出,但退出时并未关闭该连接,另一端如果在从连接中读数据则抛出该异常(Connection reset)。 简单的说就是在连接断开后的读和写操作引起的。 Connection reset by peer的常见具体原因 1)服务器的并发连接数超过了其承载量,服务器会将其中一些连接关闭; 如果知道实际连接服务器的并发客户数没有超过服务器的承载量,则有可能是中了病毒或者木马,引起网络流量异常。可以使用netstat -an查看网络连接情况。

  • 凯文
2 min read
linux

kill 命令解析

kill命令概述 通过man kill查看文档说明 kill命令将指定的信号发送到指定的进程或进程组。 如果未指定信号,则默认的发送信号为TERM,当该进程未处理TERM信号时,该信号将杀死该进程。 如果发送的信号为0,则不发送信号,但仍会执行错误检查。 linux信号列表 [root@test-master temp]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE

  • 凯文
3 min read
linux

理解inode

inode是什么? 在文件系统中,文件储存在硬盘上,硬盘的最小存储单位叫做"扇区"(Sector)。每个扇区储存512字节(相当于0.5KB)。 操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个"块"(block)。这种由多个扇区组成的"块",是文件存取的最小单位。"块"的大小,最常见的是4KB,即连续八个 sector组成一个 block。

  • 凯文
9 min read
linux

TUN/TAP概述及操作

TUN/TAP概述 在云计算时代,虚拟机和容器已经成为标配。它们背后的网络管理都离不开一样东西,就是虚拟网络设备,或者叫虚拟网卡,tap/tun 就是在云计算时代非常重要的虚拟网络网卡。 TUN/TAP 是什么 tap/tun 是 Linux 内核 2.4.x 版本之后实现的虚拟网络设备,不同于物理网卡靠硬件网卡实现,tap/tun 虚拟网卡完全由软件来实现,功能和硬件实现完全没有差别,它们都属于网络设备,都可以配置 IP,都归 Linux 网络设备管理模块统一管理。

  • 凯文
9 min read
linux

Linux中的终端、控制台、tty、pty

tty(终端设备的统称): tty一词源于teletypes,或者teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘阅读和发送信息的东西,后来这东西被键盘与显示器取代,所以现在叫终端比较合适。 终端是一种字符型设备,它有多种类型,通常使用tty来简称各种类型的终端设备。 pty(伪终端,虚拟终端): 但是如果我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty) pts/ptmx(pts/ptmx结合使用,进而实现pty): pts(pseudo-terminal slave)是pty的实现方法,与ptmx(pseudo-terminal master)配合使用实现pty。 终端特殊设备 在Linux系统的设备特殊文件目录/

  • network
4 min read
linux

linux权限

为了执行权限检查,Linux 区分两类进程:特权进程(其有效用户标识为 0,也就是超级用户 root)和非特权进程(其有效用户标识为非零)。 特权进程绕过所有内核权限检查,而非特权进程则根据进程凭证(通常为有效 UID,有效 GID 和补充组列表)进行完全权限检查。 以常用的 passwd 命令为例,修改用户密码需要具有 root 权限,而普通用户是没有这个权限的。但是实际上普通用户又可以修改自己的密码,这是怎么回事?在 Linux 的权限控制机制中,有一类比较特殊的权限设置,比如 SUID(

  • network
7 min read
linux

linux操作系统虚拟内存

概述 虚拟内存 毋庸置疑,虚拟内存绝对是操作系统中最重要的概念之一。我想主要是由于内存的重要”战略地位”。CPU太快,但容量小且功能单一,其他 I/O 硬件支持各种花式功能,可是相对于 CPU,它们又太慢。于是它们之间就需要一种润滑剂来作为缓冲,这就是内存大显身手的地方。 而在现代操作系统中,多任务已是标配。多任务并行,大大提升了 CPU 利用率,但却引出了多个进程对内存操作的冲突问题,虚拟内存概念的提出就是为了解决这个问题。 上图是虚拟内存最简单也是最直观的解释。 操作系统有一块物理内存(中间的部分),有两个进程(实际会更多)P1 和 P2,

  • network
9 min read
linux

linux之标准输入输出

IO 要弄清什么是标准输入输出。首先需要弄懂什么是IO。 IO的I是Input的意思,O是output的意思。 意味着输入和输出。 更确切的含义是 I:从外部设备输入到内存 O:从内存输出到外部设备 标准输入、输出 linux中一切设备皆是文件! 因此标准输入和输出更具体的含义是文件。 它们是/dev/stdin这个文件和/dev/stdout这个文件。 也就是说所谓的标准输入和标准输出其实就是两个linux下的文件。 linux的文件类型有: 1、普通文件2、字符设备文件3、块设备文4、目录文件 5、链接文件6、管道文件7、套接字文件 标准输入逻辑上来看: 就是打开/

  • network
7 min read
linux

linux32位系统与64位系统

cpu的区别 32位系统CPU一次可处理32位数据,即一次处理4个字节。 64位系统CPU一次可处理64位数据,即一次处理8个字节。 通俗一点说:32位,就相当于你拥有32个工人,每次能完成32个工人的工作量;64位,就相当于你拥有64个工人,每次能完成64个工人的工作量 总结:由32位系统过渡到64位系统,CPU处理数据能力提升了一倍。 寻址能力 内存中一个地址占用8bit,即一个字节,32位cpu含有32根地址线,寻址能力为2的32次方个字节,相当于4G内存(所以,如果我们装32位系统,安装8G内存实际上是没有用的)。而64位cpu理论上寻址能力为2的64次方个字节,但目前硬件还达不到这个水准,当然我们用不了这么大的内存。 总结 64位CPU有更大的寻址能力。 64位系统下运行64位软件比32位系统运行32位软件要快,但是,64位系统运行32位软件跟32位系统运行32位软件速度应该是一样的。 附1,

  • network
1 min read
linux

ioctl函数详解

概念 ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实现。 在文件 I/O 中,ioctl 扮演着重要角色,本文将以驱动开发为侧重点,从用户空间到内核空间纵向分析 ioctl 函数。 用户空间 ioctl #include <sys/ioctl.h> int ioctl(int

  • network
7 min read
linux

iptables介绍

iptables之snat与dnat dnat-目的网络地址转换 dnat是用来做目的网络地址转换的,就是重写包的目的IP地址。如果一个包被匹配了,那么和它属于同一个流的所有的包都会被自动转换,然后就可以被路由到正确的主机或网络。比如,你的Web服务器在LAN内部,而且没有可在Internet上使用的真实IP地址,那就可以使用这个dnat让防火墙把所有到它自己HTTP端口的包转发给LAN内部真正的Web服务器。目的地址也可以是一个范围,这样的话,DNAT会为每次请求随机分配一个机器,这样我们可以用这个dnat做负载平衡。 [root@linux ~]# iptables -t nat -A PREROUTING -i eth0 -p tcp\ --dst 122.225.97.111 --dport 80

  • network
8 min read
linux

VIM之基础命令

vim命令详解 VIM介绍 打开文件 关闭文件 移动光标(编辑模式) 翻屏 删除 复制命令 粘贴命令 修改 替换 撤消编辑操作 重复前一次编辑操作 可视化模式 查找 查找并替换 使用vim编辑多个文件 分屏显示一个文件 分窗口编辑多个文件 将当前文件中部分内容另存为另外一个文件 将另外一个文件的内容填充在当前文件中 跟shell交互 配置文件 设置 显示或取消显示行号 显示忽略或区分字符大小写 设定自动缩进 查找到的文本高亮显示或取消 语法高亮 vim 命令详解 介绍

  • linux
7 min read
linux

linux之基本命令

菜单 文件操作 cp-复制 rm-删除 df-查看硬盘空间 du-查看文件大小 free-查看内存及交换分区使用情况 tail-选择性查看文本 scp-远程机器间复制 lsblk(list block devices)-列出系统上所有的磁盘 blkid-列出设备的uuid 文件权限 chmod-修改用户对文件的权限 chown-修改文件所属用户及组 接口调用 curl-调用接口请求 用户 useradd-添加用户 passwd-设置密码 系统 bash&sh-进入命令模式 env-查看所有的环境变量及赋值 uname-查看系统信 telnet-判断接口是否通 curl-调用接口请求 linux命令行调用接口请求: curl

  • linux
6 min read