- 博客(77)
- 资源 (3)
- 收藏
- 关注
转载 tcp协议栈优化1-增加TCP初始拥塞窗口
看linux3.0 network代码,发现TCP initcwd(初始拥塞窗口)默认已经调为10,同时,TCP rcvwnd初始接收窗口也已调为10。 tcp initcwd初始化函数---函数tcp_init_cwnd(),宏TCP_INIT_CWND tcp rcvwnd初始化函数 ---函数tcp_select_initial_window(),宏TCP_DEFAU
2013-07-31 22:33:39 3353
转载 字符串的经典hash算法
1 概述 链表查找的时间效率为O(N),二分法为log2N,B+ Tree为log2N,但Hash链表查找的时间效率为O(1)。 设计高效算法往往需要使用Hash链表,常数级的查找速度是任何别的算法无法比拟的,Hash链表的构造和冲突的不同实现方法对效率当然有一定的影响,然而Hash函数是Hash链表最核心的部分,本文尝试分析一些经典软件中使用到的字符串Hash函数在执行效率、
2013-07-31 19:27:07 640
转载 Hash魔法:一致性 hash 算法
consistent hashing 一致性 hash 算法早在 1997 年就在论文 Consistent hashing and random trees 中被提出,目前在 cache 系统中应用越来越广泛。基本场景比如你有 N 个 cache 服务器(后面简称 cache ),那么如何将一个对象 object 映射到 N 个 cache 上呢,你很可能会采用类似下面的通用方法
2013-07-31 19:22:51 591
转载 Hash魔法:分布式哈希算法
我们从浅入深一步一步介绍什么是分布式哈希表。哈希函数哈希函数是一种计算方法,它可以把一个值A映射到一个特定的范围[begin, end]之内。对于一个值的集合{k1, k2, … , kN},哈希函数把他们均匀的映射到某个范围之中。这样,通过这些值就可以很快的找到与之对应的映射地址{index1, index2, … , indexN}。对于同一个值,哈希函数要能保证对这个值的运算
2013-07-31 19:21:52 1650
转载 从头到尾彻底解析Hash表算法
第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的Hash表算法。------------------------------------ 第一部分:Top K 算法详解问题描述百度面试题: 搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。
2013-07-31 19:10:28 638
转载 各种字符串Hash函数
整理了一下几个字符串hash函数,使用了模板,使其支持宽字符串,代码如下:/// @brief BKDR Hash Function/// @detail 本算法由于在Brian Kernighan与Dennis Ritchie的《The C Programming Language》一书被展示而得名,是一种简单快捷的hash算法,也是Java目前采用的字符串的Hash算法(累乘因子为31)
2013-07-31 19:08:03 651
转载 深入浅出多网卡绑定技术
在存储系统中为了提高后端设备的吞吐量,往往需要采用多网卡绑定技术。例如,后端存储最大能够提供300MB/s的吞吐量,因此需要采用3块1Gps的网卡并发传输才可以达到峰值性能。那么,从研发的角度来看如何实现多网卡绑定呢?这里对提高吞吐量用途的多网卡绑定技术进行深入分析。多网卡绑定一方面能够提高网络吞吐量,另一方面也可以增强网络高可用。这里对高可用应用的多网卡绑定技术不做讨论。从软件的角度来看
2013-07-30 21:01:56 923
转载 2.6的网络数据包时间戳
本文档的Copyleft归yfydz所有,使用GPL发布,可以自由拷贝,转载,转载时请保持文档的完整性,严禁用于任何商业用途。msn: yfydz_no1@hotmail.com来源:http://yfydz.cublog.cn1. 前言在linux 2.6内核中对于网络数据包中的时间戳处理和2.4相比有了不少变化,如果原样照搬2.4就要出错了。
2013-07-29 21:37:23 3355
转载 socket结构和几个IP地址转换函数
通用的结构体:struct sockaddr { unsigned short sa_family; /* address family, AF_xxx */ char sa_data[14]; /* 14 bytes of protocol address */};编程时常用的struct sockaddr_in { short int sin_family; /
2013-07-29 19:00:49 1450
转载 setsockopt()用法(参数详细说明)
int setsockopt(SOCKET s,int level,int optname,const char* optval,int optlen);s(套接字): 指向一个打开的套接口描述字level:(级别): 指定选项代码的类型。SOL_SOCKET: 基本套接口IPPROTO_IP: IPv4套接口IPPROTO_IPV6: IPv6套接
2013-07-29 15:11:20 751
转载 一个解除TCP连接的TIME_WAIT状态限制的简便方法
近日无意间发现了一个小窍门:当TCP连接所对应socket的接收队列中仍有未读数据时,将此socket强行close后,将使此socket连接不会进入TIME_WAIT状态,用"netstat -anp"命令查看可发现此连接将消失的无影无踪!上述情形在linux2.6.18-5-686-bigmem内核及winxp平台上验证通过。其他平台上,以及当socket的发送队列中仍有剩余数据未发送时强行c
2013-07-29 15:10:28 896
转载 Linux内核分析 - 网络[十七]:NetFilter之连接跟踪
内核版本:2.6.34转载请注明 博客:http://blog.csdn.net/qy532846454 by yoyo 前面章节介绍过Netfilter的框架,地址见:http://blog.csdn.net/qy532846454/article/details/6605592,本章节介绍的连接跟踪就是在Netfilter的框架上实现的,连接跟踪是实现DNAT,SNA
2013-07-28 15:09:50 840
转载 Linux内核分析 - 网络[十六]:TCP三次握手
内核:2.6.34 TCP是应用最广泛的传输层协议,其提供了面向连接的、可靠的字节流服务,但也正是因为这些特性,使得TCP较之UDP异常复杂,还是分两部分[创建与使用]来进行分析。这篇主要包括TCP的创建及三次握手的过程。 编程时一般用如下语句创建TCP Socket:[cpp] view plaincopysocke
2013-07-27 22:26:56 953
转载 tcp_v4_connect函数分析
当创建了TCP协议套接字后,客户端再调用connect()函数请求建立TCP链接。该函数通过系统调用触发tcp_v4_connect函数的执行,产生一个包含SYN标志和一个32位的序号的连接请求包,并发送给服务器端。这是TCP三次握手的第一步。我们知道,两个不同主机间的进程要进行通信,他们所发送的数据包所经过的路径为:应用层→传输层→网络层→网络介质层所以tcp_v
2013-07-25 19:27:12 3145
转载 Linux内核分析 - 网络[十五]:陆由表[再议]
内核版本:2.6.34 陆由表作为三层协议的核心数据结构,理解它是至关重要的。前面已经分析过路由表,有兴趣的可以参考: 第一篇:路由表 http://blog.csdn.net/qy532846454/article/details/6423496 分析了路由表的基本数据结构和基本操作 第二篇:路由表使用 http:/
2013-07-25 13:35:50 979
转载 CJSON中数组解析
cJSON *jsonroot = cJSON_Parse(my_json_string); //json根 if(cJSON_GetObjectItem(jsonroot,"success")->valuestring=="false") { packValue.ack=0; return packValue; } int task
2013-07-24 13:34:16 10223 1
转载 Linux内核分析 - 网络[十四]:IP选项
内核版本:2.6.34 在发送报文时,可以调用函数setsockopt()来设置相应的选项,本文主要分析IP选项的生成,发送以及接收所执行的流程,选取了LSRR为例子进行说明,主要分为选项的生成、选项的转发、选项的接收三部分。 先看一个源站路由选项的例子,下文的说明都将以此为例。 主机IP:192.168.1.99 源路由:192.168
2013-07-24 08:51:37 1054
转载 c语言解析json数据
我使用的是cJSON:http://sourceforge.net/projects/cjson/ 先看json的数据结构 c中没有对象,所以json数据是采用链表存储的 C代码 typedef struct cJSON { struct cJSON *next,*prev; // 数组 对象数据中用到 struct c
2013-07-22 18:33:56 28846
转载 C语言 JSON 解析库 - MJSON使用介绍
安装:解压出来,然后直接包含 json.h 就可以了。下面是几个官方给出的几个例子,由于直接拷贝过来编译没通过,做了一些修改,详见注释部分。【mjson例一】01#include 02#include 03#include
2013-07-22 18:33:28 4238
转载 JSON在android中应用
Android里面权限控制的比较严,一般的应用当需要使用系统或者root权限是,比较麻烦,所以编写一个root service用来处理root权限请求,通过socket通信[cpp] view plaincopyprint?/* 标准头文件放在前面,否则有些函数定义会被覆盖掉 */ #include #include #in
2013-07-22 18:32:48 1288
转载 使用cJSON
JSON是一种比XML更轻量级的数据交换格式,关于JSON的基础知识,参考 http://json.org/JSON(JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to
2013-07-22 18:31:35 1563
转载 json-C使用小结
json-c-0.7库使用小结www.firnow.com 时间 : 2010-07-20 作者:网络 编辑:huyang629 点击: 375[ 评论 ]--json-c这个库: 可以很方便的生成js的json字符串.主要几个函数如下: json_object_to_file(filepath, json_ob
2013-07-22 18:30:32 3479
转载 cJSON各函数实现的功能
参考资料:http://blog.csdn.net/daisy09/article/details/7086746cJSON简介:JSON(JavaScriptObject Notation)是一种轻量级的数据交换格式。它基于JavaScript的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯。这些特性使JSON成为理想的数据交换语言。易
2013-07-22 18:30:01 14207 2
转载 编写交互脚本
第 8 章 编写交互脚本目录8.1. 显示用户消息8.1.1. 交互与否?8.1.2. 使用内建命令echo8.2. 捕捉用户输入8.2.1. 使用内建命令read8.2.2. 提示用户输入8.2.3. 重定向和文件描述符8.2.4. 文件输入和输出8.3. 总结8.4. 练习摘要本章我们将讨论怎么通过脚本来和合用户交流:打印用户
2013-07-19 20:26:37 1776
转载 Linux shell 脚本实例
1. 写一个脚本,利用循环计算10的阶乘#!/bin/shfactorial=1for a in `seq 1 10`do factorial=`expr $factorial \* $a`doneecho "10! = $factorial"2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值
2013-07-18 19:02:47 945
转载 Shell编程基础(1)
Shell脚本编程学习入门是本文要介绍的内容,我们可以使用任意一种文字编辑器,比如gedit、kedit、emacs、vi等来编写shell脚本,它必须以如下行开始(必须放在文件的第一行): #!/bin/sh...注意:最好使用“!/bin/bash”而不是“!/bin/sh”,如果使用tc shell改为tcsh,其他类似。符号#!用来告诉系统执行该sell脚本
2013-07-18 13:46:27 593
转载 Linux内核分析 - 网络[八补]:IP协议补充
内核版本:2.6.34在前一篇”IP协议”中对报文接收时IP层的处理进行了分析,本篇分析将针对报文发送时IP层的处理。 传输层处理完后,会调用ip_push_pending_frames()将报文传递给IP层: ip_push_pending_frames() -> ip_local_out() -> __ip_local_out() 在ip_pu
2013-07-17 20:38:32 849
转载 Linux内核分析 - 网络[十三]:校验和
内核版本:2.6.34报文的IP校验和、ICMP校验和、TCP/UDP校验和使用相同的算法,在RFC1071中定义,网上这方面的资料和例子很多,就不解释算法流程了,而是侧重于在实现的变化和技巧。The checksum algorithm is simply to add up all the 16-bit words in one's complement and then to t
2013-07-17 19:53:53 710
转载 Linux内核分析 - 网络[十二]:UDP模块 - 收发
内核版本:2.6.34UDP报文接收 UDP报文的接收可以分为两个部分:协议栈收到udp报文,插入相应队列中;用户调用recvfrom()或recv()系统调用从队列中取出报文,这里的队列就是sk->sk_receive_queue,它是报文中转的纽带,两部分的联系如下图所示。第一部分:协议栈如何收取udp报文的。 udp模块的注册在inet_
2013-07-14 20:38:02 1007
转载 Linux内核分析 - 网络[十二]:UDP模块 - socket
内核版本:2.6.34这部分内容在于说明socket创建后如何被内核协议栈访问到,只关注两个问题:sock何时插入内核表的,sock如何被内核访问的。对于核心的sock的插入、查找函数都给出了流程图。sock如何插入内核表 socket创建后就可以用来与外部网络通信,用户可以通过文件描述符fd来找到要操作的socket,内核则通过查表来找到要操作的socket。这意味着s
2013-07-14 20:03:31 693
转载 ICMP报文分析
一.概述:1. ICMP允许主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。2. ICMP报文作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去。3. ICMP报文的种类有两种,即
2013-07-11 12:02:38 1331
转载 ping 原理与ICMP协议
ping 的原理 ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。 ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据
2013-07-11 11:41:38 807
转载 Linux内核分析 - 网络[十一]:ICMP模块
内核版本:2.6.34 ICMP模块比较简单,要注意的是icmp的速率限制策略,向IP层传输数据ip_append_data()和ip_push_pending_frames()。在net/ipv4/af_inet.c中的inet_init()注册icmp协议,从这里也可以看出,ICMP模块是绑定在IP模块之上的。inet_add_protocol()会将icmp_protocol加入到
2013-07-10 22:13:07 1388
转载 Linux内核分析 - 网络[十]:ARP杂谈
内核版本:2.6.34杂谈一:重复地址检测 Linux协议栈中处理重复地址检测报文的是arp_process()中的一段代码,RFC2131是DHCP的草案,相应的sip==0是DHCP服务器用来检测它所分发的地址是否重复的。 [cpp] view plaincopy/* Special case: IPv4 duplicate addre
2013-07-10 21:01:05 1050
转载 linux路由内核实现分析(四)---路由缓存机制(4)
ip_route_input函数 int ip_route_input(struct sk_buff *skb, __be32 daddr, __be32 saddr, u8 tos, struct net_device *dev){ struct rtable * rth; unsigned
2013-07-10 12:32:22 1289
转载 linux路由内核实现分析(四)---路由缓存机制(3)
在函数ip_rt_init( )中进行了rt_hash_bucket的初始化,代码如下: rt_hash_table = (struct rt_hash_bucket *) alloc_large_system_hash("IP route cache", sizeof(struc
2013-07-10 12:31:49 935
转载 linux路由内核实现分析(四)---路由缓存机制(2)
dst_entry结构 struct dst_entry{ struct rcu_head rcu_head; struct dst_entry *child; struct net_device *dev; short
2013-07-10 12:31:01 892
转载 linux路由内核实现分析(四)---路由缓存机制(1)
------------------------------------------------------------------------------------------以下是我根据 linux-2.6.23.9版本内核源代码所做阅读笔记,属个人兴趣而为,希望找到有共同兴趣的朋友一起讨论和研究,有谬误之处,笔者水平有限,欢迎大家拍砖:)--------------
2013-07-10 12:30:28 966
转载 linux路由内核实现分析(三)---路由查找过程
------------------------------------------------------------------------------------------以下是我根据 linux-2.6.23.9版本内核源代码所做阅读笔记,属个人兴趣而为,希望找到有共同兴趣的朋友一起讨论和研究,有谬误之处,笔者水平有限,欢迎大家拍砖:)--------------
2013-07-10 12:29:48 4968
转载 linux路由内核实现分析(二)---FIB相关数据结构(4)
fib_info结构struct fib_info { struct hlist_node fib_hash; struct hlist_node fib_lhash; int fib_treeref; atomic_t fib_clntref; int
2013-07-10 12:21:32 1487
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人