zhangskd
码龄16年
关注
提问 私信
  • 博客:2,452,231
    社区:53
    2,452,284
    总访问量
  • 150
    原创
  • 751,774
    排名
  • 1,590
    粉丝
  • 3
    铁粉

个人简介:一路风雨,一路奔跑

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:北京市
  • 加入CSDN时间: 2009-09-11
博客简介:

zhangskd的专栏

博客描述:
鱼跃此时海,花开彼岸天
查看详细资料
个人成就
  • 博客专家认证
  • 获得597次点赞
  • 内容获得295次评论
  • 获得1,234次收藏
  • 代码片获得410次分享
创作历程
  • 1篇
    2016年
  • 29篇
    2015年
  • 22篇
    2014年
  • 47篇
    2013年
  • 38篇
    2012年
  • 21篇
    2011年
成就勋章
TA的专栏
  • Tcpdive开源项目
    4篇
  • Nginx开发
    6篇
  • Socket源码分析
    11篇
  • TCP协议优化
    84篇
  • TCP/IP
    84篇
  • Socket
    10篇
  • Tcpdive
    1篇
  • Nginx
    6篇
  • Kernel
    38篇
  • CDN
    8篇
  • Network
    8篇
  • Algorithm & Data structure
    8篇
  • Linux Skills
    8篇
  • Languages
    1篇
  • Compression
    3篇
  • Subversion
    3篇
  • Git
    3篇
  • Tools
    9篇
  • Essays
    2篇
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

TCP协议的性能评测工具 — Tcpdive开源啦

Tcpdive是一个专门的TCP协议性能评测工具。Github地址:https://github.com/fastos/tcpdive 在过去的几年里,随着移动互联网的飞速发展,整个基础网络已经发生了翻天覆地的变化。用户接入网络的方式,除了宽带和光纤之外,还有2G/3G/4G/WiFi,5G也已经在路上了。作为使用范围最广的传输层协议,TCP诞生于固网时代,在设计之初并没有考虑到上述种种情况,这导致了
原创
发布博客 2016.01.19 ·
24113 阅读 ·
15 点赞 ·
11 评论 ·
37 收藏

Nginx的负载均衡 - 一致性哈希 (Consistent Hash)

当后端是缓存服务器时,经常使用一致性哈希算法来进行负载均衡。使用一致性哈希的好处在于,增减集群的缓存服务器时,只有少量的缓存会失效,回源量较小。在nginx+ats / haproxy+squid等CDN架构中,nginx/haproxy所使用的负载均衡算法便是一致性哈希。我们举个例子来说明一致性哈希的好处。假设后端集群包含三台缓存服务器,A、B、C。
原创
发布博客 2015.12.12 ·
51226 阅读 ·
10 点赞 ·
7 评论 ·
39 收藏

Nginx的负载均衡 - 最少连接 (least_conn)

我们知道轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同。这有个前提,就是每个请求所占用的后端时间要差不多,如果有些请求占用的时间很长,会导致其所在的后端负载较高。在这种场景下,把请求转发给连数较少的后端,能够达到更好的负载均衡效果,这就是least_conn算法。
原创
发布博客 2015.12.12 ·
34202 阅读 ·
5 点赞 ·
0 评论 ·
27 收藏

Nginx的负载均衡 - 保持会话 (ip_hash)

Nginx版本:1.9.1我的博客:http://blog.csdn.net/zhangskd 算法介绍 ip_hash算法的原理很简单,根据请求所属的客户端IP计算得到一个数值,然后把请求发往该数值对应的后端。所以同一个客户端的请求,都会发往同一台后端,除非该后端不可用了。ip_hash能够达到保持会话的效果。ip_hash是基于round robin的,判断后端是否
原创
发布博客 2015.12.12 ·
34617 阅读 ·
1 点赞 ·
0 评论 ·
9 收藏

Nginx的负载均衡 - 加权轮询 (Weighted Round Robin) 下篇

上篇blog讲述了加权轮询算法的原理、以及负载均衡模块中使用的数据结构,接着我们来看看加权轮询算法的具体实现。如果upstream配置块中没有指定使用哪种负载均衡算法,那么默认使用加权轮询。也就是说使用加权轮询算法,并不需要特定的指令,因此也不需要实现指令的解析函数。而实际上,和其它负载均衡算法不同(比如ip_hash),加权轮询算法并不是以模块的方式实现的,而是作为Nginx框架的一部分。
原创
发布博客 2015.12.12 ·
8883 阅读 ·
2 点赞 ·
0 评论 ·
7 收藏

Nginx的负载均衡 - 加权轮询 (Weighted Round Robin) 上篇

当在upstream配置块中没有指定使用的负载均衡算法时,默认使用的是加权轮询。按照上述配置,Nginx每收到7个客户端的请求,会把其中的5个转发给后端a,把其中的1个转发给后端b,把其中的1个转发给后端c。这就是所谓的加权轮询,看起来很简单,但是最早使用的加权轮询算法有个问题,就是7个请求对应的后端序列是这样的:{ c, b, a, a, a, a, a },会有5个连续的请求落在后端a上,分布不太均匀。
原创
发布博客 2015.12.12 ·
70656 阅读 ·
12 点赞 ·
1 评论 ·
35 收藏

Nginx的负载均衡 - 整体架构

Nginx版本:1.9.1我的博客:http://blog.csdn.net/zhangskd 什么是负载均衡 我们知道单台服务器的性能是有上限的,当流量很大时,就需要使用多台服务器来共同提供服务,这就是所谓的集群。负载均衡服务器,就是用来把经过它的流量,按照某种方法,分配到集群中的各台服务器上。这样一来不仅可以承担更大的流量、降低服务的延迟,还可以避免单点故障造成服务
原创
发布博客 2015.12.12 ·
23826 阅读 ·
10 点赞 ·
0 评论 ·
35 收藏

TCP的发送系列 — 发送缓存的管理(二)

主要内容:从TCP层面判断发送缓存的申请是否合法,进程因缺少发送缓存而进行睡眠等待、因为有发送缓存可写事件而被唤醒。内核版本:3.15.2上一篇blog讲述了单个Socket层面上的发送缓存管理,现在来看下整个TCP层面上的发送缓存管理。
原创
发布博客 2015.09.06 ·
9160 阅读 ·
1 点赞 ·
7 评论 ·
8 收藏

TCP的发送系列 — 发送缓存的管理(一)

主要内容:TCP发送缓存的管理,包括发送缓存的初始化、sock发送缓存的动态调整、sock发送缓存的申请和释放。内核版本:3.15.2。TCP对发送缓存的管理是在两个层面上进行的,一个层面是单个socket的发送缓存管理,另一个层面是整个TCP层的内存管理。先来看下单个socket的发送缓存管理。
原创
发布博客 2015.09.06 ·
16580 阅读 ·
7 点赞 ·
6 评论 ·
28 收藏

TCP的发送系列 — tcp_sendmsg()的实现(二)

主要内容:Socket发送函数在TCP层的实现内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 在上篇blog中分析了tcp_sendmsg()这个主要函数的实现,现在来看下之前略过的一些细节,包括等待连接的建立、tcp_push()的实现、tcp_autocorking和数据的复制。
原创
发布博客 2015.09.06 ·
8687 阅读 ·
1 点赞 ·
4 评论 ·
12 收藏

TCP的发送系列 — tcp_sendmsg()的实现(一)

主要内容:Socket发送函数在TCP层的实现内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd上一篇blog讲的是send()、sendto()、sendmsg()和sendmmsg()这些发送函数的系统调用和Socket层实现,现在来看下它们的TCP层实现tcp_sendmsg()。
原创
发布博客 2015.09.06 ·
15131 阅读 ·
7 点赞 ·
4 评论 ·
21 收藏

Socket层实现系列 — send()类发送函数的实现

主要内容:socket发送函数的系统调用、Socket层实现。内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd以下是send()、sendto()、sendmsg()和sendmmsg()的发送流程图,这四个函数除了在系统调用层面上有些差别,在Socket层和TCP层的实现都是相同的。
原创
发布博客 2015.09.06 ·
19711 阅读 ·
4 点赞 ·
1 评论 ·
19 收藏

TCP连接建立系列 — 客户端接收SYNACK和发送ACK

主要内容:客户端接收SYNACK、发送ACK,完成连接的建立。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 客户端主动建立连接时,发送SYN段后,连接的状态变为SYN_SENT。此时如果收到SYNACK段,处理函数为tcp_rcv_state_process()。
原创
发布博客 2015.08.15 ·
13156 阅读 ·
1 点赞 ·
5 评论 ·
9 收藏

TCP连接建立系列 — 客户端的端口选取和重用

主要内容:connect()时的端口选取和端口重用。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 端口选取 connect()时本地端口是如何选取的呢? 如果用户已经绑定了端口,就使用绑定的端口。如果用户没有绑定端口,则让系统自动选取,策略如下:1. 获取端口的取值区间,以及区间内端口的个数。2. 根据初始偏移量
原创
发布博客 2015.08.15 ·
10384 阅读 ·
2 点赞 ·
2 评论 ·
13 收藏

TCP连接建立系列 — 客户端发送SYN段

主要内容:客户端调用connect()时的TCP层实现。内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd connect的TCP层实现 SOCK_STREAM类socket的TCP层操作函数集实例为tcp_prot,其中客户端使用tcp_v4_connect()来发送SYN段。struct proto tcp_prot = {
原创
发布博客 2015.08.15 ·
6663 阅读 ·
1 点赞 ·
2 评论 ·
5 收藏

linux下使用异步通知

阻塞式I/O是一直等待直到设备可以访问,非阻塞式I/O是定期轮询设备是否可以访问。异步通知则是当设备可以访问时才主动通知应用程序,有点像设备的硬中断。 并不是所有的设备都支持异步通知,应用程序通常假设只有套接字和终端才有异步通知的能力。异步通知存在一个问题,当进程收到SIGIO信号时,它并不知道是哪个文件有了新的输入,如果有多于一个的文件可以异步通知同一个进程,那么应用进程还需
原创
发布博客 2015.05.23 ·
8191 阅读 ·
2 点赞 ·
0 评论 ·
7 收藏

Socket层实现系列 — connect()的实现

主要内容:connect()的Socket层实现、期间进程的睡眠和唤醒。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 应用层 int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);Connects the socket ref
原创
发布博客 2015.05.23 ·
13298 阅读 ·
3 点赞 ·
0 评论 ·
12 收藏

Socket层实现系列 — I/O事件及其处理函数

主要内容:Socket I/O事件的定义、I/O处理函数的实现。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd I/O事件定义 sock中定义了几个I/O事件,当协议栈遇到这些事件时,会调用它们的处理函数。struct sock { ... struct socket_wq __rcu *sk_wq; /*
原创
发布博客 2015.05.23 ·
10226 阅读 ·
3 点赞 ·
0 评论 ·
14 收藏

Socket层实现系列 — 信号驱动的异步等待

主要内容:Socket的异步通知机制。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 概述 socket上定义了几个IO事件:状态改变事件、有数据可读事件、有发送缓存可写事件、有IO错误事件。对于这些事件,socket中分别定义了相应的事件处理函数,也称回调函数。 Socket I/O事件的处理过程中,要使用到sock
原创
发布博客 2015.05.23 ·
7596 阅读 ·
1 点赞 ·
0 评论 ·
6 收藏

Socket层实现系列 — 睡眠驱动的同步等待

主要内容:Socket的几个I/O事件、Socket的同步等待机制。内核版本:3.15.2我的博客:http://blog.csdn.net/zhangskd 概述 socket上定义了几个IO事件:状态改变事件、有数据可读事件、有发送缓存可写事件、有IO错误事件。对于这些事件,socket中分别定义了相应的事件处理函数,也称回调函数。 Socket I/O事件
原创
发布博客 2015.05.23 ·
6438 阅读 ·
2 点赞 ·
0 评论 ·
8 收藏
加载更多