Linux网络编程实践及经典文章收集
文章平均质量分 95
Linux网络编程实践及经典文章转载收藏
我的Linux网络编程实践及经典文章收集
利白
这个作者很懒,什么都没留下…
展开
-
jemalloc编译出错?没事,这里有成功的linux环境的编译及使用方案(★firecat推荐★)
jemalloc是facebook推出的https://github.com/jemalloc/jemallochttp://jemalloc.net/源码里面有INSTALL.md,里面有安装说明,但是不可完全参照,需要调整步骤如下:先准备好gcc编译环境,然后把docbook-style-xsl依赖库安装好。[root@localhost ]# yum -y install...原创 2018-02-28 16:19:07 · 2987 阅读 · 0 评论 -
TCP、UDP数据包大小的限制
http://blog.sina.com.cn/s/blog_413d250e0102wmq0.htmlTCP报文的最大负载和报文的最小长度MTU:最大传输单元,以太网的MTU为1500BytesMSS:最大分解大小,为每次TCP数据包每次传输的最大数据的分段大小,由发送端通知接收端,发送大于MTU就会被分片。MSS默认最小为536B,最小的MTU576B,MSS = MTU - ...转载 2019-01-10 10:29:51 · 3270 阅读 · 0 评论 -
高性能高并发的生成唯一的Id
可以吗?int TimeWheel::GenerateTimerID(){ int x = rand() % 0xffffffff; int cur_time = time(nullptr); return x | cur_time | _timer_count;}int TimeWheel::AddTimer(int interval){ time...原创 2019-01-10 09:18:27 · 1305 阅读 · 0 评论 -
什么是reactor模式?
什么是Reactor模式要回答这个问题,首先当然是求助Google或Wikipedia,其中Wikipedia上说:“The reactor design pattern is an event handling pattern for handling service requests delivered concurrently by one or more inputs. The ser...转载 2019-01-09 17:12:30 · 1640 阅读 · 0 评论 -
ps与top命令简单介绍
https://www.cnblogs.com/zhoug2020/p/6336503.html我的问题是:为什么top命令看到的进程都是睡眠答案是:如果是单核CPU,在同一个时间点上,只可能有一个running进程。如果是N核CPU,在同一个时间点上,最多有N个running进程。sleeping进程多是因为很多服务进程都阻塞在系统调用上而让进程进入了SLEEP状态。----...转载 2019-01-07 17:57:16 · 692 阅读 · 0 评论 -
如何防止僵尸进程?
1.僵尸进程:僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。如果父进程先退出 ,子进程被init接管,子进程退出后init会回收其占用的相关资源。2.产生原因:a. 子进程结束后向父进程发出SIGCHLD信号,父进程默认忽略了它;b. 父进程没有调用wait()或waitpid()函数来等待子进程的结束;c. 网络原...原创 2019-01-06 17:32:41 · 1654 阅读 · 4 评论 -
用实践让你明白“软链接”和“硬链接”的区别
一、原理在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号inode 。 软连接,其实就是新建立一个文件,这个文件就是专门用来指向别的文件的(那就和windows 下的快捷方式的那个文件有很接近的意味)。软链接产生的是一个新的文件,但这个文件的作用就是专门指向某个文件的,删了这个软连接文件,那就等于不需要这个连接,和原来的存在的实体原文件没有...转载 2019-01-06 11:44:01 · 771 阅读 · 6 评论 -
HTTP返回码中301与302的区别
一.官方说法301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于: 301 redirect: 301 代表永久性转移(Permanently Moved)。302 redirect: 302 代表暂时性转移(Temporarily Moved )。 二、详细说明字面上的区别就是301是永久重定向,而302是临时重定向。 当然,他们之间也是有共同点的,...原创 2019-01-06 11:10:49 · 10811 阅读 · 0 评论 -
A机器与B机器网络connect成功后,断电时的网络状态?
如果A机器与B机器网络connect成功后从未互发过数据,此时其中一机器突然断电,则另外一台机器与断电的机器之间的网络连接处于哪种状态?笔者实测如下:虚拟机A:CentOS 7,192.168.133.131,TCP Server虚拟机B:CentOS 7,192.168.133.128,TCP Client1、建立连接时:A机器[root@localhost ~]...原创 2019-01-06 10:35:06 · 1822 阅读 · 0 评论 -
socket 什么情况下可读
参考 《UNIX 网络编程卷1》中的《第6章 I/O复用》 一、 满足下列四个条件中的任何一个时,一个套接字准备好读。 该套接字接收缓冲区中的数据字节数大于等于套接字接收缓存区低水位。对于TCP和UDP套接字而言,缓冲区低水位的值默认为1。那就意味着,默认情况下,只要缓冲区中有数据,那就是可读的。我们可以通过使用SO_RCVLOWAT套接字选项(参见setsockopt函数)来设置该...原创 2019-01-04 11:28:20 · 1326 阅读 · 1 评论 -
TCP面试常见题:time_wait状态产生的原因,危害,如何避免
http://blog.csdn.net/u013616945/article/details/77510925MSL(Maximum Segment Lifetime)最大报文生存时间 每个TCP实现必须选择一个MSL。它是任何报文段被丢弃前在网络内的最长时间。这个时间是有限的,因为TCP报文段以IP数据报在网络内传输,而IP数据报则有限制其生存时间的TTL时间。RFC 79...转载 2017-12-14 15:22:55 · 17021 阅读 · 2 评论 -
UDP 调用connect的作用
https://www.cnblogs.com/bleopard/p/4004916.html标准的udp客户端开了套接口后,一般使用sendto和recvfrom函数来发数据,最近看到ntpclient的代码里面是使用send函数直接法的,就分析了一下,原来udp发送数据有两种方法供大家选用的,顺便把udp的connect用法也就解释清楚了。方法一: socket----->sen...转载 2019-01-04 10:53:56 · 1035 阅读 · 0 评论 -
Nginx网络epoll多进程系列:Nginx深入详解之多进程网络模型,用共享锁解决惊群问题
https://www.cnblogs.com/yum777/p/6244909.htmlhttps://github.com/nginx/nginx一、进程模型 Nginx之所以为广大码农喜爱,除了其高性能外,还有其优雅的系统架构。与Memcached的经典多线程模型相比,Nginx是经典的多进程模型。Nginx启动后以daemon的方式在后台运行,后台进程包含一个master进程...转载 2018-02-13 16:47:26 · 3942 阅读 · 0 评论 -
Nginx网络epoll多进程系列:什么是惊群?怎么解决
http://blog.csdn.net/tycoon1988/article/details/43083257问题: 有一个单进程的linux epoll服务器程序,近来希望将它改写成多进程版本, 主要原因有: 1、在服务高峰期间 并发的 网络请求非常大,目前的单进程版本的支撑不了:单进程时只有一个循环先后处理epoll_wait(...转载 2018-02-13 16:49:59 · 471 阅读 · 0 评论 -
举源码实例来说明epoll之LT和ET模式的区别
一、先来看看官方的说辞 epoll 对文件的描述符的操作有两种模式 : LT(Level Trigger, 电平触发)模式 和 ET(Edge Trigger ,边沿触发)模式。LT模式是默认的工作模式,这个模式下epoll相当于一个效率较高的poll。当往epoll中内核事件表中注册EPOLLET事件时,epoll将以ET模式来操作该文件描述符。ET是epoll的高效模式。...原创 2019-01-01 10:54:54 · 1234 阅读 · 0 评论 -
TCP三次握手及四次挥手详解及常见面试题
https://blog.csdn.net/ZWE7616175/article/details/80432486TCP的报头: 1. 源端口号:表示发送端端口号,字段长为16位。 2. 目标端口号:表示接收端口号,字段长为16位。 3. 序列号:表示发送数据的位置,字段长为32位。每发送一次数据,就累加一次该数据字节数的大小。 注意:序列号不会从0或1开始,而是在建立连接时由计算机...转载 2018-12-30 11:05:17 · 605 阅读 · 0 评论 -
TCP三次握手原理,以及为什么不能改成两次握手
https://blog.csdn.net/b954960630/article/details/81861579网上 关于 TCP三次握手 的文章有很多,但很多一些部分讲的含糊其辞,所以才重新造了这个轮子,一方面对那些含糊其辞的部分做了解释,另一方面也方便了以后的学习。1、上图的名词解释SYN:同步序号。它表示建立连接。TCP规定SYN=1时不能携带数据,但要消耗一个序号, 因此随...转载 2018-12-30 11:04:12 · 2213 阅读 · 0 评论 -
解析TCP之滑动窗口(动画演示)
https://blog.csdn.net/yao5hed/article/details/81046945概述滑动窗口实现了TCP流控制。首先明确滑动窗口的范畴:TCP是双工的协议,会话的双方都可以同时接收和发送数据。TCP会话的双方都各自维护一个发送窗口和一个接收窗口。各自的接收窗口大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的发送窗口则要求取决...转载 2018-12-30 10:52:20 · 1108 阅读 · 0 评论 -
微信后台phxrpc协程库理解(提取协程相关源码)
源码来自https://github.com/Tencent/phxrpc我把协程相关的源码提取出来,写了个测试程序(仿造https://github.com/cloudwu/coroutine/blob/master/main.c),便于理解:看runtime_.Resume(id)这一行,就是执行当前的协程,这个协程在创建的时候被定位到执行关联的函数处,这个具体实现在uthread_c...原创 2018-12-17 10:21:07 · 774 阅读 · 0 评论 -
Tars C++版本的编译及相关教程
前言,什么是tars?https://github.com/TarsCloud/Tars/blob/master/Introduction.mdhttps://github.com/TarsCloud/Tars/blob/master/Install.zh.md 1、环境准备CentOS7,CMake编译器(1)先安装mysql servercentos7安装mysql...原创 2018-10-19 10:00:34 · 2349 阅读 · 1 评论 -
开源项目推荐:主流RPC开源框架及知识科普
什么是rpc框架先回答第一个问题:什么是RPC框架? 如果用一句话概括RPC就是:远程调用框架(Remote Procedure Call)那什么是远程调用?通常我们调用一个php中的方法,比如这样一个函数方法: localAdd(10, 20),localAdd方法的具体实现要么是用户自己定义的,要么是php库函数中自带的,也就说在localAdd方法的代码实现在本地,它是一个本地调用...原创 2018-04-28 10:58:00 · 10103 阅读 · 3 评论 -
迈向高阶:优秀Android程序员必知必会的网络基础
http://www.52im.net/thread-1963-1-1.html1、前言网络通信一直是Android项目里比较重要的一个模块,Android开源项目上出现过很多优秀的网络框架,从一开始只是一些对HttpClient和HttpUrlConnection简易封装使用的工具类,到后来Google开源的比较完善丰富的Volley,再到如今比较流行的Okhttp、Retrofit。要...转载 2018-09-17 17:35:02 · 569 阅读 · 0 评论 -
Linux netstat命令详解及state的含义
Linux:netstat -nalp|grep 1883 #查看1883端口的连接情况,观察TCP状态图netstat -nalp|grep 1883|wc -l #查看1883端口的客户端连接数ulimit -n 5120000 #修改当前进程的最大文件数tail -f *.log #实时查看日志内容 TCP三次握手的过程如下: 主动连接端发送一个SYN包...原创 2018-09-06 17:39:49 · 15827 阅读 · 1 评论 -
Hbase时间不同步问题解决方案
http://baijiahao.baidu.com/s?id=1582997438282198970&wfr=spider&for=pcHbase 集群服务器时间不同步导致HRegionServer无法启动通过start-hbase.sh命令在主节点启动Hbase集群,可以看出主节点node01、node02,从节点node02、node03、node04均成功启动...转载 2018-08-21 16:10:32 · 5017 阅读 · 0 评论 -
Kafka实践:到底该不该把不同类型的消息放在同一个主题中?
http://martin.kleppmann.com/2018/01/18/event-types-in-kafka-topic.htmlAI 前线导读: 如果你使用了像 Kafka 这样的流式处理平台,就要搞清楚一件事情:你需要用到哪些主题?特别是如果你要将一堆不同的事件作为消息发布到 Kafka,是将它们放在同一个主题中,还是将它们拆分到不同的主题中?更多优质内容请关注微信公众号“AI ...转载 2018-08-18 15:17:37 · 1985 阅读 · 0 评论 -
为什么心跳包(HeartBeat)是必须的?
https://blog.coderzh.com/2015/03/05/WhyHeartBeatNeeded/几乎所有的网游服务端都有心跳包(HeartBeat或Ping)的设计,在最近开发手游服务端时,也用到了心跳包。思考思考,心跳包是必须的吗?为什么需要心跳包?TCP没有提供断线检测的方法吗?TCP提供的KeepAlive机制可以替代HeartBeat吗? 由于连接丢失时,TCP不...转载 2018-08-17 11:19:15 · 3964 阅读 · 0 评论 -
UDP主要丢包原因及具体问题分析
文章来源:http://www.2cto.com/net/201311/254835.htmlUDP主要丢包原因及具体问题分析一、主要丢包原因1、接收端处理时间过长导致丢包:调用recv方法接收端收到数据后,处理数据花了一些时间,处理完后再次调用recv方法,在这二次调用间隔里,发过来的包可能丢失。对于这种情况可以修改接收端,将包接收后存入一个缓冲区,然后迅速返回继续......转载 2015-08-28 00:20:44 · 53714 阅读 · 2 评论 -
Linux C 语言实现MySQL连接池
C 语言实现MySQL连接池MYSQL C API 封装和MYSQL连接池引言:数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个; 连接池技术大多运用在高并发服务器的后面;在现有的大型高并发服务器上,每一次线程与数据库的数据交换都属于网络连接,频繁的启停连接是极不合理的,特别是在大型Web服务器上过长时间的延迟在用户体验上极其糟糕...转载 2018-07-28 16:43:27 · 1793 阅读 · 1 评论 -
Linux C 语言实现线程池
C 语言实现线程池非常精简的Linux线程池实现(一)——使用互斥锁和条件变量引言:线程池是一种多线程处理形式,大多用于高并发服务器上,它能合理有效的利用高并发服务器上的线程资源;在Unix网络编程中,线程与进程用于处理各项分支子功能,我们通常的操作是:接收消息 ==> 消息分类 ==> 线程创建 ==> 传递消息到子线程 ==> 线程分离 ==> 在子线...转载 2018-07-28 16:57:02 · 879 阅读 · 0 评论 -
mysql,redis客户端连接池和线程池的Linux C编程实现(★firecat推荐★)
一、环境准备:CentOS7,CMake编译器Mysql使用官方c语言版本客户端,不使用c++库,因为c++库依赖boost库Linux安装mysql时,有这个包,mysql-community-devel-5.7.18-1.el7.x86_64.rpm -- 里面内容是c语言版本的客户端库函数和头文件https://downloads.mysql.com/archives/community/R...原创 2018-02-27 16:43:08 · 1618 阅读 · 0 评论 -
mysql,redis客户端连接池和线程池的Windows C/C++编程实现(★firecat推荐★)
一、环境准备:Windows,VS2015Mysql使用官方c语言版本客户端,mysql-connector-c-6.1.10-win32.zip,不使用c++库,因为c++库依赖boost库https://downloads.mysql.com/archives/c-c/库函数和头文件使用方法参见http://blog.csdn.net/libaineu2004/article/details/...原创 2018-03-16 17:55:15 · 2049 阅读 · 0 评论 -
Linux tcpdump,我的个人使用实例
我的个人实践如下:Wireshark是Windows下非常简单易用的抓包工具。但在Linux下很难找到一个好用的图形化抓包工具。还好有Tcpdump。我们可以用Tcpdump + Wireshark 的完美组合实现:在 Linux 里抓包,然后在Windows 里分析包。记得先在终端执行命令“ip a”,查看网卡的名称。CentOS 需要确保安装了tcpdump工具 #yum -y...原创 2018-07-26 09:58:59 · 1650 阅读 · 0 评论 -
Linux tcpdump命令详解
Linuxtcpdump命令详解tcpdump使用详解及数据包分析简介用简单的话来定义tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉...原创 2017-11-01 16:15:02 · 3595 阅读 · 0 评论 -
Use HAProxy to load balance 300k concurrent tcp socket connections: Port Exhaustion, Keep-alive and
https://www.linangran.com/?p=547I’m trying to build up a push system recently. To increase the scalability of the system, the best practice is to make each connection as stateless as possible.转载 2018-01-29 09:56:49 · 462 阅读 · 0 评论 -
《kafka权威指南》读书笔记
1、2、其他主题名不建议使用"."和"_"字符。建议分区数目是broker节点的整数倍;复制系数(即副本)建议使用默认值3。原创 2018-05-17 17:31:14 · 441 阅读 · 0 评论 -
我个人的分布式集群问题集锦,nginx/lvs/dns/cdn(★firecat推荐★)
1、问:我有一个疑问,使用了nginx或者haproxy真的能提升性能吗?那nginx或haproxy本身服务器岂不是压力山大,所有数据都要经过它转发。答:它不需要处理,仅仅是转发。但是nginx不行,性能比较好的软件负载均衡是LVS。如果软件性能那么好,F5就不会卖那么贵了。还有,4层负载,DR模式回包不用经过负载,这在下行流量大的业务场景里性能不错了。2、nginx+web服务器可原创 2018-01-21 12:18:25 · 1076 阅读 · 0 评论 -
一个进程(Process)最多可以生成多少个线程(Thread),★firecat推荐★
一、Windows版本文章来源:http://blog.csdn.net/great3779/article/details/59301901.进程中创建线程的限制默认情况下,一个线程的栈要预留1M的内存空间,而一个进程中可用的内存空间只有2G,所以理论上一个进程中最多可以开2048个线程,但是内存当然不可能完全拿来作线程的栈,所以实际数目要比这个值要小。 [cpp] v...转载 2014-10-23 15:55:18 · 5285 阅读 · 0 评论 -
TCP 三次握手原理,你真的理解吗?(阿里技术,推荐一看)
点击打开链接阿里妹导读:最近,阿里中间件小哥哥蛰剑碰到一个问题——client端连接服务器总是抛异常。在反复定位分析、并查阅各种资料文章搞懂后,他发现没有文章把这两个队列以及怎么观察他们的指标说清楚。因此,蛰剑写下这篇文章,希望借此能把这个问题说清楚。欢迎大家一起交流探讨。问题描述场景:JAVA的client和server,使用socket通信。server使用NIO。间歇性得出现client向s...转载 2018-07-05 14:42:00 · 1237 阅读 · 0 评论 -
IO系列文章4:IO复用,AIO,BIO,NIO,同步,异步,阻塞和非阻塞区别
点击打开链接如果面试问到IO操作,这篇文章提到的问题,基本是必问,百度的面试官问我三个问题(1)什么是NIO(Non-blocked IO),AIO,BIO(2) java IO 与 NIO(New IO)的区别(3)select 与 epoll,poll区别我胡乱说了一气,自己边说边觉得完蛋了。果然,二面没过,很简单的问题,回来后赶紧作了总结:一、什么是socket?什么是I/O操作? 我们都知...转载 2018-06-25 15:09:02 · 456 阅读 · 0 评论 -
IO系列文章3:Unix中的IO模型:帮你弄清阻塞VS非阻塞、同步VS异步
点击打开链接对同步和异步、阻塞和非阻塞这些名词困惑了很久了,曾经相当然的认为阻塞就是同步、非阻塞就是异步,这也是典型的错误,后来从Unix网络编程卷1上才看到最全面的解析,下面主要的内容来自Unix网络编程,算是自己的一个学习笔记吧!由于这本书中面向的是Unix编程,所以在其他的环境中IO模型可能会有稍微的不同,比如Java中的IO模型,但是也不会相差很多,毕竟Unix作为众多技术的鼻祖,很多的思...转载 2018-06-25 15:07:35 · 260 阅读 · 0 评论