[置顶] TCP协议的性能评测工具 — Tcpdive开源啦

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

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

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

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

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

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

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

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

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

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

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

Nginx的负载均衡 - 整体架构

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

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

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

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

主要内容:TCP发送缓存的管理,包括发送缓存的初始化、sock发送缓存的动态调整、sock发送缓存的申请和释放。 内核版本:3.15.2。 TCP对发送缓存的管理是在两个层面上进行的,一个层面是单个socket的发送缓存管理, 另一个层面是整个TCP层的内存管理。先来看下单个socket的发送缓存管理。...
阅读(6487) 评论(0)

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

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

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

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

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

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

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

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

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

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

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 = {...
阅读(3268) 评论(0)

linux下使用异步通知

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

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...
阅读(6995) 评论(0)

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; /*...
阅读(4891) 评论(0)

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

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

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

主要内容:Socket的几个I/O事件、Socket的同步等待机制。 内核版本:3.15.2 我的博客:http://blog.csdn.net/zhangskd   概述   socket上定义了几个IO事件:状态改变事件、有数据可读事件、有发送缓存可写事件、有IO错误事件。 对于这些事件,socket中分别定义了相应的事件处理函数,也称回调函数。   Socket I/O事件...
阅读(2878) 评论(0)
158条 共8页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:1209107次
    • 积分:11575
    • 等级:
    • 排名:第1267名
    • 原创:149篇
    • 转载:8篇
    • 译文:0篇
    • 评论:205条
    博客专栏
    博客公告

    小程序员一个,坐标深圳。

    Email: zhangskd at gmail.com

    不总在,多包涵

    最新评论