
【Linux网络编程】
轻飘风扬
有较强的团队合作精神,学习能力较强,善于学习新技术,为人乐观积极做事有耐心,能够在较强的压力下工作,有较强的适应能力,真诚温和,做事踏实,有较强的动手能力
展开
-
Linux虚拟网络设备:bridge(桥)、vrouter、tun/tap等总结
相关知识链接Linux虚拟网络设备之tun/tapLinux虚拟网络设备之vethLinux虚拟网络设备之bridge(桥)Linux 虚拟网络设备详解之 “vRouter”Linux网络 - 数据包的发送过程Linux网络 - 数据包的接收过程...原创 2020-02-14 13:16:30 · 2667 阅读 · 0 评论 -
linux TCP 参数设置
此文为网络转载,对理解linux内核tcp参数设置有一定帮助,设置tcp参数一定要小心谨慎,轻易不要更改线上环境,我贴一下我们线上环境中,sysctl.conf的内容,见文章底部net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1net.ipv4.tcp_fin_timeout = 30net.ipv4.tcp_keepa转载 2013-08-26 10:39:45 · 5679 阅读 · 0 评论 -
向socket一次写多少数据合适?
以太网(IEEE 802.3)帧格式:1、前导码:7字节0x55,一串1、0间隔,用于信号同步2、帧起始定界符:1字节0xD5(10101011),表示一帧开始3、DA(目的MAC):6字节4、SA(源MAC):6字节5、类型/长度:2字节,0~1500保留为长度域值,1536~65535保留为类型域值(0x0600~0xFFFF)6、数据:46转载 2013-08-26 10:45:30 · 6621 阅读 · 0 评论 -
TCP的超时与重传
1. TCP提供可靠连接的途径是通过接受方确认发送方的数据实现的,数据和确认都可能丢失,这就需要及时发现数据或者确认丢失而进行重传。重传最重要的是要确定超时间隔和重传频率。2. 对于每个连接,TCP管理4个定时器来完成数据的传输:重传定时器坚持定时器(persist):使窗口大小保持不断流动;保活定时器(keepalive):检测空闲连接的另一端何时崩溃;2MSL定时器:测量一原创 2013-08-24 11:04:34 · 16058 阅读 · 0 评论 -
linux send与recv函数详解
1 #include 2 ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);3 ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags); recv 和send的前3个参数等同于read和write。flags参数值为0或:原创 2013-07-28 04:54:46 · 5594 阅读 · 0 评论 -
Nagle算法(TCP 通信设置)
说明:本文是最近项目上使用tcp时遇到的问题找到的原因,参考了网络上的几篇文章整理出来,如有版权问题,请留言。 Nagle算法用于对缓冲区内的一定数量的消息进行自动连接。该处理过程(称为Nagling),通过减少必须发送的封包的数量,提高了网络应用程序系统的效率。1. Nagle算法的规则 (可参考tcp_output.c文件里tcp_nagle_check函数注释):1转载 2013-08-07 17:11:46 · 3807 阅读 · 0 评论 -
路由器: IP与网关 不在同一段 解决方法
路由器中配置静态IP 通常是这样的上面情况时 IP 和 网关 前3组数字都一样,路由器可以识别出IP与网关在同一段,能够正确保存。但有时候分配的IP与网关却是这样的似乎 IP 和 网关 前 2 组数字一样,后面2组却不一样了,这个时候路由器就会提示“IP 和 网关 不在同一段” 无法保存。这种错误,是子网掩码不正确配置造成的只要修改子网掩码就转载 2013-12-09 17:58:30 · 24902 阅读 · 0 评论 -
非阻塞模式下connect 成功失败判断
将一个socket 设置成阻塞模式和非阻塞模式,使用fcntl方法,即:设置成非阻塞模式:先用fcntl的F_GETFL获取flags,用F_SETFL设置flags|O_NONBLOCK; 即: flags = fcntl(sockfd, F_GETFL, 0); //获取文件的flags值。 fcntl(sock原创 2014-06-13 16:56:47 · 5942 阅读 · 0 评论 -
getaddrinfo()函数详解
1. 概述IPv4中使用gethostbyname()函数完成主机名到地址解析,这个函数仅仅支持IPv4,且不允许调用者指定所需地址类型的任何信息,返回的结构只包含了用于存储IPv4地址的空间。IPv6中引入了getaddrinfo()的新API,它是协议无关的,既可用于IPv4也可用于IPv6。getaddrinfo函数能够处理名字到地址以及服务到端口这两种转换,返回的是一个addrinfo的结原创 2014-09-06 09:27:10 · 3814 阅读 · 0 评论 -
VXlan 技术实现原理
Vxlan 概况VXLAN(Virtual eXtential LAN)意为虚拟可拓展局域网。随着大数据、云计算技术的兴起以及虚拟化技术的普及,VLAN技术的弊端逐渐显现出来,具体表现为如下3个方面: (1) 虚拟化技术的发展促使大数据、云计算技术公司采用单个物理设备虚拟多台虚拟机的方式来进行组网,随着应用模块的增加,对于支持VLAN数目的要求也在提升,802.1Q标准中的最多支持4...原创 2018-05-13 21:35:03 · 21784 阅读 · 1 评论 -
LInux C 函数实现ping功能及抓包功能
实现抓包功能需要依赖libpcap库来实现Centos系统下安装libpcap需要对设置yum配置,但默认的是无法安装libpcap与libpcap-devel的;需要进入/etc/yum.repos.d目录下,vim Centos-Vault.repo中修改 [C6.0-base] name=CentOS-6.0 - Base baseurl=http://vault....原创 2018-09-11 21:56:49 · 1938 阅读 · 0 评论 -
网络知识梳理--OSI七层网络与TCP/IP五层网络架构及二层/三层网络
作为一个合格的运维人员,一定要熟悉掌握OSI七层网络和TCP/IP五层网络结构知识。废话不多说!下面就逐一展开对这两个网络架构知识的说明:一、OSI七层网络协议OSI是Open System Interconnect的缩写,意为开放式系统互联。OSI参考模型各个层次的划分遵循下列原则: 1)根据不同层次的抽象分层 2)每层应当有一个定义明确的功能 3)每层功能的选择应...转载 2018-09-08 20:40:16 · 3121 阅读 · 0 评论 -
select、poll、epoll之间的区别总结
select、poll、epoll都是IO多路复用的机制,先是监听多个文件描述符FD,一旦某个FD就绪,就可以进行相应的读写操作。但是select、poll、epoll本质都是同步I/O,他们都需要在读写事件就绪之后自己负责读写,即这个读写过程是阻塞的1 select/pollselect缺点:【1】每次调用select都需要把fd从用户态拷贝到内核态,开销比较大【2】每次都需要在内核遍历...转载 2018-10-13 11:46:17 · 799 阅读 · 0 评论 -
TCP快速重传与快速恢复原理分析
超时重传是TCP协议保证数据可靠性的一个重要机制,其原理是在发送一个数据以后就开启一个计时器,在一定时间内如果没有得到发送数据报的ACK报文,那么就重新发送数据,知道发送成功为止。这是数据丢包的情况下给出的一种修补机制。一般来说,重传发生在超时之后,但是如果发送端接收到3个以上的重复ACK,就应该意识到,数据丢了,需要重新传递。这个机制不需要等到重传定时器溢出,所以叫做快速重传,而快速重传以后,因转载 2013-08-24 10:15:28 · 4239 阅读 · 0 评论 -
TCP协议经典rfc主题总结
Richard Stevens的书虽好,但是他所要表达的是让你知其然。对于想精通tcp的同学来说,光知其然是远远不够的,你还需要更多的时间去了解其所以然,而翻阅rfc文档就是一种最好的方式,这样你就明白tcp为何这么设计了。这里总结了一下tcp核心主题对应的rfc文档,方便自己和大家查阅。:)rfc序列号主题内容描述793转载 2013-08-10 18:14:56 · 1886 阅读 · 0 评论 -
Linux的epoll模型
Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。1、为什么select落后首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在我用的2.6.15-25-386内核中,该值是1024,搜索内核源代转载 2012-11-30 14:47:49 · 1492 阅读 · 0 评论 -
poll 函数简单介绍
poll()函数:这个函数是某些Unix系统提供的用于执行与select()函数同等功能的函数,下面是这个函数的声明:#include int poll(struct pollfd fds[], nfds_t nfds, int timeout);参数说明:fds:是一个struct pollfd结构类型的数组,用于存放需要检测其状态的Socket描述符;每当调用这个函数之后,系统原创 2013-02-17 11:14:34 · 2782 阅读 · 0 评论 -
Linux Epoll介绍和程序实例
Linux Epoll介绍和程序实例1. Epoll 是何方神圣? Epoll 可是当前在 Linux 下开发大规模并发网络程序的热门人选,Epoll在Linux2.6 内核中正式引入,和 select 相似,其实都I/O多路复用技术而已,并没有什么神秘的。其实在 Linux下设计并发网络程序,向来不缺少方法,比如典型的Apache模型(Process Per Co转载 2012-11-30 14:49:46 · 1398 阅读 · 0 评论 -
CLOSE_WAIT研究和端口复用存在弊端 ,TCP 三次握手及三次挥手
在网络通信中,经常会遇到这样的问题;当关闭正在通信的套接字时,然后在创建端口相同的套接字时,会出现ADDR被占用的错误提示,这时使用netstat -anp命令 会发现端口仍被占用。但是如果使用端口重用属性的话,可能会造成挤掉正在使用的端口的危险存在!在网络上找了下这篇文章,对CLOSE——WAIT的研究1 CLOSE_WAIT状态的生成原因CLO转载 2012-12-12 14:52:32 · 4855 阅读 · 0 评论 -
LINUX 下非阻塞模式下TCP 研究
本文是其他论坛中对此TCP描述的研究。我只是将这些帖子进行了汇总,觉得很不错!希望对大家受用!tcp协议本身是可靠的,并不等于应用程序用tcp发送数据就一定是可靠的.不管是否阻塞,send发送的大小,并不代表对端recv到多少的数据.在阻塞模式下,send函数的过程是将应用程序请求发送的数据拷贝到发送缓存中发送并得到确认后再返回.但由于发送缓存的存在,表现为:如果发送缓存大小比请求发送原创 2013-04-24 16:57:16 · 2717 阅读 · 0 评论 -
如何判断socket已经断开
非阻塞模式,如果暂时没有数据,返回的值也会是当使用 select()函数测试一个socket是否可读时,如果select()函数返回值为1,且使用recv()函数读取的数据长度为0 时,就说明该socket已经断开。经过代码试验,如果进程受到一些信号时,例如:EINTR,recv()返回值小于等于0时,这是就需要判断 errno是否等于 EINTR , 如果errno ==原创 2013-05-07 21:57:59 · 18737 阅读 · 1 评论 -
Linux下抓包工具tcpdump以及分析包的工具wireshark
近日在学习网卡驱动时,需要抓取网卡发送、接收数据的情况,于是找到了tcpdump和wireshark这两个工具,tcpdump是用来抓取数据的,wireshark则是用于分析抓取到的数据的,现将用法记录下来:Tcpdump使用方法(1)第一种是关于类型的关键字主要包括host,net,port例如: host 210.27.48.2,指明 210.27.48.2是一台主机,ne转载 2013-05-09 12:01:54 · 18467 阅读 · 0 评论 -
TCP时延问题
Q:TCP时延问题是由什么原因产生?A:TCP延时确认(Delayed Ack)机制导致的。Q:TCP延时确认机制作用?A:TCP在处理交互数据流(即Interactive Data Flow,区别于Bulk Data Flow,即成块数据流,典型的交互数据流如telnet、rlogin等)时,采用了Delayed Ack机制以及Nagle算法来减少小分组数目。转载 2013-08-07 17:16:44 · 4768 阅读 · 1 评论 -
再探Linux下的TCP延迟确认机制--TCP_QUICKACK
前面有一文简单写了一下Linux下的延迟确认机制,但当时不求甚解,后来陆陆续续做又了一些分析,于是就有了这篇文章。案例一:某同事随手写个压力测试程序,其实现逻辑为:每秒钟先连续发N个132字节的包,然后连续收N个由后台服务回显回来的132字节包。其代码大致如下: 1: char sndBuf[132]; 2: char rcvBuf[132]; 3: whil转载 2013-08-07 17:27:38 · 5769 阅读 · 0 评论 -
关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
1、阻塞模式与非阻塞模式下recv的返回值各代表什么意思?有没有区别?(就我目前了解阻塞与非阻塞recv返回值没有区分,都是 0接收到数据大小,特别:返回值 2、阻塞模式与非阻塞模式下write的返回值各代表什么意思?有没有区别?阻塞与非阻塞write返回值没有区分,都是 0发送数据大小,特别:返回值 3、阻塞模式下read返回值 非阻塞模式下read返回值 0表转载 2013-08-07 17:29:40 · 2469 阅读 · 0 评论 -
TCP/IP协议头部结构体
TCP/IP协议头部结构体(转)网络协议结构体定义 view plaincopy to clipboardprint?// i386 is little_endian. #ifndef LITTLE_ENDIAN #define LITTLE_ENDIAN (1) //BYTE ORDER #else #error Redefine L转载 2013-08-21 12:03:48 · 2479 阅读 · 0 评论 -
netstat Recv-Q和Send-Q
通过netstat -anp可以查看机器的当前连接状态:Active Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp转载 2013-08-09 12:54:00 · 61098 阅读 · 3 评论 -
socketpair理解
今天跟人谈到socketpair的问题,晚上回来写了个程序验证下自己的猜测! 先说说我的理解:socketpair创建了一对无名的套接字描述符(只能在AF_UNIX域中使用),描述符存储于一个二元数组,eg. s[2] .这对套接字可以进行双工通信,每一个描述符既可以读也可以写。这个在同一个进程中也可以进行通信,向s[0]中写入,就可以从s[1]中读取(只能从s[1]中读取),也可以在转载 2012-09-27 09:27:06 · 2115 阅读 · 0 评论