- 博客(31)
- 资源 (1)
- 收藏
- 关注

原创 epoll 惊群(Nginx 类似处理方案)
#include <sys/types.h>#include <sys/socket.h>#include <sys/epoll.h>#include <netdb.h>#include <string.h>#include <stdio.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#include <errn
2017-10-24 16:42:35
636

原创 epoll中accept的使用细节
accept 要考虑 2 个问题 (1) 阻塞模式 accept 存在的问题 考虑这种情况:TCP连接被客户端夭折,即在服务器调用accept之前,客户端主动发送RST终止连接,导致刚刚建立的连接从就绪队列中移出,如果套接口被设置成阻塞模式,服务器就会一直阻塞在accept调用上, 直到其他某个客户建立一个新的连接为止。但是在此期间,服务器单纯地阻塞在accept调用上,就绪队列中的其他描述符
2017-09-06 16:04:37
2355

转载 gdb 如何调试绑定一个线程
info threads 显示当前可调试的所有线程,每个线程会有一个GDB为其分配的ID,后面操作线程的时候会用到这个ID。 前面有*的是当前调试的线程。 thread ID 切换当前调试的线程为指定ID的线程。 break thread_test.c:123 thread all 在所有线程中相应的行上设置断点 thread apply ID1 ID2 command 让一个或者多个线程执行
2017-09-01 09:20:17
2577

原创 linux下的一个简单线程安全内存池实现
这里提供一个简单线程安全内存池, 基于linux pthread 如下图: 具体的数据结构: typedef struct LocMap{ char * point; int len; }LOCMAP;//每个数据块的起始指针和大小 int size; //内存池的大小 int datanum; //内存池内数据 int freemem; //剩
2017-08-23 15:10:43
1290

原创 服务器怎样处理连接超时和数据拼接
近期实现了一个linux epoll 服务器, 大致功能就是接收客户端数据,分析数据,按字段存入数据库, 是一个短链接服务, 从中收获良多,这里谈一下, 服务器开发中常遇问题和解决方案。 源码: https://github.com/BambooAce/Repository/tree/master/network/server_epoll 大致模型至于epoll 模型原理和使用网
2017-08-22 17:49:43
3303

原创 linux下软件安装apt-get yum dpkg rpm 的使用
Ubuntu Debian系统安装软件一般都是deb包, apt-get install * 也就是从源服务器下载deb包然后安装 ,它和Redhat中的yum install一样都可以帮你轻松的解决依赖性问题。Ubuntu系列软件管理:apt-get install * //安装某个软件包apt-get remove/autoremove * //移除软件包apt-get purge * /
2017-04-18 13:11:02
1249

原创 TCP/IP协议栈 -- 编写较稳定的client注意的细节
这张主要以实验形式观察一个简单的TCP 连接 实验代码如下:#include <sys/socket.h>#include <sys/types.h>#include <unistd.h>#include <arpa/inet.h>#include <fcntl.h>#include <netinet/in.h>#include <stdio.h>#include <stdlib.h
2017-03-30 13:05:14
836

原创 daemon 启动system V init 和 systemd 配置
先试着写一个udpserver的daemon#include <stdio.h>#include <sys/socket.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#defi
2017-02-23 12:46:20
578

原创 TCP/IP协议栈 -----链路层
这节说一下链路层和ARP RARP协议链路层: 在协议栈中链路层的目的有三个:1. 为IP模块发送或接受数据包 2.为ARP模块发送或接受ARP请求 3. 为RARP模块发送或接受RARP请求。 让我们看一下最常用的以太网链路层封装格式 这里可以看到以太网协议头部有类型字段 来表明是IP 还是 ARP RARP数据包,尾部还有CRC校验码。环回接口:localhost 127类的地址,一个传
2017-02-15 13:05:42
418

原创 TCP/IP 协议 ----- 协议栈
文章是作者对tcp/ip协议族的一些看法,借鉴TCP/IP详解卷一的内容,进行总结归纳,并阐述自己的一些看法。TCP/IP协议栈· : 整个协议栈被分为了四层,每一层协议负责不同的功能:链路层:负责处理物理接口的细节,接受发送的都是比特流,链路层主要有三个目的: 1. 为IP模块发送和接收I P数据报;2. 为ARP模块发送ARP请求和接收ARP应答;3.为RARP发送RARP请求和接
2017-02-14 12:58:12
402

原创 Makefile中的变量和shell变量
我们在写makefile时 多多少少会用到shell脚本, 对于变量的在shell中的使用有一些要注意的细节。让我们从一个简单的makefile来看看。 注意makefile中一定要有一个目标,且一定要有一个终极目标,若想要有多个目标应该设立一个伪目标。如下:all: hello hello2 hello3hello: hello.c gcc ....hello2: hello2.c
2017-01-12 13:29:54
2657

转载 SSL/TLS 握手过程详解
在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐、经济、社会关系等都离不开互联网的帮助。在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的。幸运的是,在大牛们的努力下,很早以前就有一套安全体系来保障互联网信息的传递。下面我们一起来了解一下这套体系。加密算法 首先我们需要了解一下加密相关的知识,加密可以分为对称加密和非对称加密。两者的主要区别就是是否使用同
2017-01-11 12:26:16
1346

转载 数字签名技术
1.什么是电子签名 电子签名指数据电文中以电子形式所含、所附用于识别签名人身份并表明签名人认可其中内容的数据。通俗地说,电子签名就是通过密码技术对电子文档的电子形式的签名,并非是书面签名的数字图像化,它类似于手写签名或印章,也可以说它就是电子印章。 电子签名主要有三个作用: (1)证明文件的来源,即识别签名人; (2)表明签名人对文件内容的确认;(3)构成签名人对文件内容正确性和完整性负责的
2017-01-11 10:48:42
672

原创 Docker理解
近期一直在研究Docker,感悟颇深,和大家分享一下Docker 在云计算中的应用和Docker的原理。 Docker 用法https://yeasy.gitbooks.io/docker_practice/content/Docker 是什么?有哪些用途? https://yeasy.gitbooks.io/docker_practice/content/introduction/what.
2017-01-06 12:53:59
762

原创 提高服务器并发量,有关系统配置的常规方法
一般情况下, 服务器的性能除了编程技巧之外,还有一些操作系统本身的限制。这里我们假设服务器CPU 内存都是能满足需求的。来说说Linux 服务器的一些提高性能的方法。文件描述符的限制 对于服务器,每当有一个连接到来都要消耗一个文件描述符,即系统对文件描述符的限制就成了高性能的障碍。我们可以用ulimit可以查看当前系统对资源的一些限制。# ulimit -acore file size
2017-01-05 12:52:57
656

原创 Linux EXT 文件系统 详解
上几章我们讲到了Linux启动的一些问题,接下来我们来看一下硬盘分割和EXT格式文件系统的问题。前面提到了分区表的问题,分区表位于MBR, 占用64个字节。所谓的硬盘分区也就是对硬盘进行规划,填写分区表的配置。硬盘默认分区表仅能写入四组分区信息。这四个主要分区我们称之为主分区和拓展分区,而后拓展分区里面又可以划分多个逻辑分区。 先让我们模拟一块硬盘:dd if=/dev/zero of=zero
2017-01-03 15:22:35
910
原创 gdb的多线程调试
info threads 可以查看当前进程有哪些线程thread ID 可以切换到线程IDbt 查看当前线程堆栈set scheduler-locking on多线程调试过程中, 线程会来回切换, 使用它即可锁定一个线程。当程序被打断点时, 所有线程都会停下 如果不希望其他线程也停下, 可以设置gdb如下(版本要7.0 以上):set target-async 1set paginat
2017-10-30 10:24:51
307
原创 accept 文件描述符用尽处理
if (events[i].data.fd == listenfd) { peerlen = sizeof(peeraddr); connfd = ::accept4(listenfd, (struct sockaddr*)&peeraddr, &p
2017-09-21 15:11:05
760
转载 makefile 中=与:=的差别
1、“=” make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子: x = foo y = $(x) bar x = xyz 在上例中,y的值将会是 xyz bar ,而不是 foo bar 。 2、“:=” “:=”表示变量的值决定于它在makefile中的位置,而不是整个
2017-09-15 11:38:55
274
原创 ubuntu debain下好用的编辑器
geany: 轻量级的IDE apt-get install geany 用来写shell脚本和python十分方便。特别写python脚本时,它有丰富的提示和自动补全功能。查看代码也很方便
2017-04-19 10:48:53
620
原创 TCP/IP 协议栈 ------ ICMP
I C M P经常被认为是 I P层的一个组成部分。它传递差错报文以及其他需要注意的信息。I C M P报文通常被I P层或更高层协议( T C P或U D P)使用。一些I C M P报文把差错报文返回给用户进程。 ICMP格式如下: 报文类型及相关说明如下:
2017-04-12 12:23:53
540
原创 TCP/IP 协议栈 -- 编写UDP客户端注意细节
上节我们说到了TCP 客户端编写的主要细节, 本节我们来看一下UDP client的几种情况,测试代码如下: server:#include <stdio.h>#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <sys/stat.h>#include <sys/types.h>#in
2017-04-05 13:23:28
369
原创 I/O复用中的 select poll 和 epoll
I/O复用中的 select poll 和 epoll: 这里有一些不错的资料: I/O多路复用技术之select模型: http://blog.youkuaiyun.com/nk_test/article/details/49256129Select的限制和poll(并发的初步知识)http://blog.youkuaiyun.com/nk_test/article/details/49283325epoll实现高
2017-03-20 13:02:31
449
原创 TCP/IP协议栈 ARP和RARP协议
上几章中我们提到以太网协议中,在以太网首部中一个帧类型的字段,它可以表示为IP ARP RARP协议。 这里说一下ARP 和RARP协议。 首先看ARP协议: 要想网络中的数据包准确到达某个主机,最后还是依靠MAC地址, 那么ARP协议就负责将IP地址映射为48位MAC地址,当数据包到达一个以太网内后,就要依靠mac地址找到相应的主机。下面这张图表达的十分清晰 当数据包到达以太网时, 它要
2017-03-13 12:18:58
713
原创 TCP/IP协议栈 --- IP路由
IP路由:当一个IP包在主机发送出去或者在网络当中时,是怎么选择路径到达目的主机的呢? 一般情况下, 如果说源主机和目的主机在同一个网络中的话,那个数据报可以直接到达目的主机而不经过路由器,下面可以试一下, 我的主机网络是192.168.1.2 ping 网络里面的另一台主机, 我们可以用traceroute或者tracepath看一下整个包在网络中的过程。~/Desktop$ tracepath
2017-03-03 12:08:58
649
原创 TCP/IP协议栈 --- 网络层(IP 首部 和分片)
IP 是TCP/IP协议栈中重要的层次, TCP UDP ICMP IGMP都是依赖IP层进行传输的。首先它是一种不可靠,无连接的协议。不可靠:它不保证IP包能正确到达目的地,无连接:表示IP并不会维护后续数据包的信息,每个数据包的传输都是独立的。数据包的可靠性需要依赖传输层协议来保证如TCP协议,也就是说当一个比特流从网络接口发送向网络之后,所经过的每个路由器会解析数据包的网络层的信息,再通过路由
2017-02-21 12:56:47
455
原创 Docker 使用教程
概括 Docker与传统虚拟机的区别 与传统虚拟机的区别 Docker的安装 的安装 Docker daemon , client , containerd 镜像与容器操作 容器运行配置 Docker网络配置 网络配置 Alpine Docker Image 制作自己的 Docker Image Docker安全性问题 安全性问题 Dock
2017-02-14 13:27:59
1511
原创 Linux启动 grub 虚拟文件系统initrd详解(三)
在内核找到硬盘的/sbin/init后,就开始了第一号进程,此进程的主要目的是:准备软件执行的环境,包括系统的主机名,网络配置,语系处理,文件系统格式及其他服务的启动。主要是通过/etc/inittab来规划。 我们可以看到它默认选择3运行级别。 之后会使用/etc/rc.d/rc.sysinit进行系统初始化 大致是用来读取网络环境和主机类型;测试与挂载内存设备/proc和usb设备;用户
2016-12-31 16:10:45
727
原创 Linux启动 grub 虚拟文件系统initrd详解(二)
上文我们分析了启动和grub的一些东西,这节让我们讨论一些linux内核加载启动和虚拟文件系统initrd的问题。 首先还是grub的menu.lst 其中关于default 和timeout的讲解网上都有说明 这里的root(hd0,0) 代表的以下的kernel和initrd文件系统所在的位置是第一块硬盘的第一个分区,这个可以根据自己内核存放位置设置,但是要注意grub的文件系统类型。ke
2016-12-30 18:10:35
2265
原创 Linux启动 grub 虚拟文件系统initrd详解(一)
Linux的启动时一个复杂的过程: 加载 BIOS 的硬件资讯与进行自我测试,并依据配置取得第一个可启动的装置; 读取并运行第一个启动装置内 MBR 的 boot Loader (亦即是 grub, spfdisk 等程序); 依据 boot loader 的配置加载 Kernel ,Kernel 会开始侦测硬件与加载驱动程序; 在硬件驱动成功后,Kernel 会主动呼叫 i
2016-12-30 16:59:07
1956
MySQL学习资料
2014-09-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人