
计算机网络
文章平均质量分 79
网络是移动互联网的基础,对网络基础的理解对设计、开发都非常重要,该专栏将主要介绍网络通信的实现原理、底层机制以及实际应用等
逍遥子_
重点关注大并发处理、分布式计算、微服务、物联网、大数据等领域
展开
-
不用软件直接查询QQ好友的IP地址
使用快捷键 “开始键+R”,或者打开开始,搜索“运行”,运行cmd。输入 tasklist 命令,得到当前进程的名字,PID,会话,内存使用情况。例如当前两个QQ的PID是4616,4618。给QQ好友随便发送一个截图,可以建立一个直接到对方电脑的Socket连接(因为QQ发送消息时候文字利用服转载 2013-06-21 10:29:32 · 4303 阅读 · 2 评论 -
select,poll,epoll区别
原文地址:http://blog.youkuaiyun.com/Sunboy_2050/article/details/5971779select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。对于单进程多线程,每个线程处理多个fd的情况,sel转载 2013-07-24 10:20:14 · 1232 阅读 · 0 评论 -
wireshark windows版数据过滤插件安装及使用
1、下载wireshark和数据过滤插件以及本文中所涉及的全部下载资源:http://download.youkuaiyun.com/detail/hjx_1000/6442019 2、数据过滤插件的安装方法: 2.1、下载插件generic.dll(Windows)或者 generic.so(Linux),地址为:http://wsgd.free.fr/download.h原创 2013-10-23 14:40:10 · 7674 阅读 · 1 评论 -
tcpcopy使用方法
1、下载tcpcopyhttp://code.google.com/p/tcpcopy/downloads/list2、配置、编译、安装依此使用如下命令:配置:./configure 编译:make安装:make install 3、使用方法下面以mosquitto为例,说明tcpcopy的用法,tcpcopy分为客户端(称为tcpcopy)和服务原创 2014-01-14 10:17:43 · 2415 阅读 · 0 评论 -
关于socket的一些总结
在linux下socket是用一个文件描述符来表示,对于linux来说从某个socket读数据和从某个文件读数据是一样的;linux下文件描述符的范围是1024,也就是有个用户进行所能使用的最大的文件描述符的数量不能超过此值,但是这个值可以进行修改,在服务器程序中,该值可以修改为10w、20w甚至更大的值。 socket可以用一个五元组来标识:例如:地址为A的主机欲用tc原创 2014-01-24 16:50:27 · 2974 阅读 · 0 评论 -
tcp对连接断开的感知——保活定时器
根据tcp/ip协议的描述,tcp连接建立之后,如果双方没有通信,连接可以一直保存下去,假如中间路由器崩溃或者中间的某条线路断开,只要两端的主机没有被重启,连接就一直被保持着。 在实际应用中,这是一个很重要的问题:在很多时候服务器与客户端建立tcp连接之后,基于各种异常原因,经常发生客户端还没有来得及向服务器发送断开连接时就崩溃掉了的问题,服务器就需要能够感知这种变化。然而,TCP规范原创 2014-02-13 10:19:54 · 5104 阅读 · 0 评论 -
epoll源码分析
源码分析使用版本为:linux2.6.9;分析文件为:eventpoll.c,所有的epoll实现代码都在此文件中。1、 sys_epoll_create()Epoll通过sys_epoll_create创建一个epoll文件,并返回该epoll文件的描述符,在该文件中也将同时创建该epoll文件的文件结构体,i节点等,需要注意的是,其中创建了一个eventpoll结构体,该结构原创 2014-02-13 10:45:51 · 1841 阅读 · 1 评论 -
mosquitto源码分析(一)
本文由逍遥子撰写,转发请标注原址:http://blog.youkuaiyun.com/houjixin/article/details/21461225一、 Mosquitto简介mosquitto是一款实现了消息推送协议MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,例如现在应用广泛的低功耗传感器,手原创 2014-03-18 15:22:26 · 25245 阅读 · 2 评论 -
mosquitto源码分析(二)
一、 Mosquito的数据结构1) struct mosquito结构体struct mosquito主要用于保存一个客户端连接的所有信息,例如用户名、密码、用户ID、向该客户端发送的消息等,其定义为:struct mosquitto { int sock; char*address; char *id; char*username; ch原创 2014-03-18 15:24:27 · 12237 阅读 · 3 评论 -
mosquitto源码分析(三)
一、 Mosquito的核心功能分析3.1、订阅树Mosquitto通过订阅树的方式来管理所有的topic以及客户端的订阅关系,它首先将所有的topic按照/分割并组织成一棵树结构,从根节点到树中的每个节点即组成该节点所对应的一个topic,每个topic都保存一个订阅列表,该订阅列表中保存了所有订阅当前topic的客户端信息。例如有如下订阅关系:客户端a1,a2,a3订阅了topi原创 2014-03-18 15:30:16 · 11305 阅读 · 8 评论 -
mosquitto源码分析(四)
3.1.2、使用订阅树发布消息在Mosquito程序中,消息发送过程主要通过遍历订阅树来完成,具体为:递归遍历订阅树找到指定的订阅列表,并将消息挂到订阅列表中的每个contextg的消息队列中,如果消息的retain字段被设置为1,则mosquitto还需要保存此消息,以备新订阅的客户端可以立即收到上次发送的消息;另外,发往系统topic的消息也会被mosquitto保存起来。上述消息发送过程原创 2014-03-18 15:52:28 · 10002 阅读 · 4 评论 -
mosquitto源码分析(五)
3.2.1、poll机制简介Poll机制是一种I/O多路转接(I/O multiplexing)技术,这种技术先构造一个有关描述符的表,然后调用一个函数,知道这些描述符中的一个已准备就绪好进行I/O时,该函数才返回,该函数返回之后它告诉进程那些描述符已经准备好进行I/O)。其工作过程为:(1)首先构造一个pollfd结构数组,每个数组元素指定一个描述符编号以及对其所关心的状态。(2)为原创 2014-03-18 16:02:52 · 9347 阅读 · 5 评论 -
mosquitto源码分析(六)
一、 Mosquito的辅助功能介绍Mosquitto代码的辅助功能主要包括:log输出功能、配置参数管理功能和内存封装的功能,这三个功能虽不是mosquitto的核心模块,但是却在其源码实现中经常遇到,它们的实现给mosquitto的代码开发带来了很大的方便。4.1、log输出功能Mosquitto日志输出功能的实现代码主要在文件/ mosquitto-1.2/src/loggin原创 2014-03-18 16:04:53 · 8096 阅读 · 4 评论 -
一些值得好好学习的博客或者网站
讲解wireshark的http://blog.jobbole.com/70907/原创 2014-07-10 14:38:03 · 1160 阅读 · 0 评论 -
性能调优攻略
关于性能优化这是一个比较大的话题,在《由12306.cn谈谈网站性能技术》中我从业务和设计上说过一些可用的技术以及那些技术的优缺点,今天,想从一些技术细节上谈谈性能优化,主要是一些代码级别的技术和方法。本文的东西是我的一些经验和知识,并不一定全对,希望大家指正和补充。在开始这篇文章之前,大家可以移步去看一下酷壳以前发表的《代码优化概要》,这篇文章基本上告诉你——要进行优化,先得找到性能瓶颈转载 2014-07-25 14:26:31 · 1248 阅读 · 0 评论 -
抓包及分析包的常用命令
tcpdump抓包命令:tcpdump port 1883 -w /tmp/mosq.pcapwireshark常用的过滤命令:(1)等号使用 == 或者 eq,不等于使用 != 或者 ne例如:端口为80的包tcp.port eq 80或者:tcp.port == 80(2)过滤条件可以用and 或者or进行连接:例如:过滤出来包内容中含有"set"或者"原创 2014-09-28 16:23:47 · 3054 阅读 · 0 评论 -
The C10K problem
The C10K problem[Help save the best Linux news source on the web -- subscribe to Linux Weekly News!]It's time for web servers to handle ten thousand clients simultaneously, don't you think? After转载 2014-11-14 16:43:54 · 2042 阅读 · 0 评论 -
几种TCP连接中出现RST的情况
目录[-]1 端口未打开2 请求超时3 提前关闭4 在一个已关闭的socket上收到数据总结参考文献:应该没有人会质疑,现在是一个网络时代了。应该不少程序员在编程中需要考虑多机、局域网、广域网的各种问题。所以网络知识也是避免不了学习的。而且笔者一直觉得TCP/IP网络知识在一个程序员知识体系中必需占有一席之地的。在TCP协议中RST表示复位,转载 2014-12-08 13:57:46 · 1653 阅读 · 0 评论 -
如何为CentOS 7配置静态IP地址
问题:在CentOS 7上,我想要将我其中一个网络接口从DHCP改为静态IP地址配置,如何才能永久为CentOS或RHEL 7上的网络接口分配静态IP地址?如果你想要为CentOS 7中的某个网络接口设置静态IP地址,有几种不同的方法,这取决于你是否想要使用网络管理器。网络管理器(Network Manager)是一个动态网络的控制器与配置系统,它用于当网络设备可用时保持设备和连接开启转载 2015-06-05 17:19:50 · 3721 阅读 · 0 评论 -
linux下查看中断请求记录 IRQ
linux下查看中断请求记录。通过cpu的中断请求的响应,可以看出cpu都在为哪些设备干活,干的活有多少量等信息。[~]$ cat /proc/interrupts CPU0 CPU1 CPU2 CPU3 0: 1383283707 0 0 0 IO-A转载 2015-08-03 14:43:07 · 17170 阅读 · 0 评论 -
epoll示例程序——客户端
源码:#include #include #include #include #include //这里配置服务器的ip地址和端口号#define SERVER_LISTEN_PORT 3557#define SERVER_HOST "192.168.1.202"#define MAX_BUF_SIZE 1024#define INVALID_SOCKET -1//返原创 2016-02-16 14:30:48 · 1121 阅读 · 0 评论 -
LVS 工作模式以及工作原理
原文地址:http://blog.youkuaiyun.com/caoshuming_500/article/details/8291940LVS 简介 LVS 是 Linux Virtual Server ,Linux 虚拟服务器;是一个虚拟的服务器集群【多台机器 LB IP】。LVS 集群分为三层结构:负载调度器(load balancer):它是整个LVS 集群对外的前端机器,负责转载 2016-09-09 17:31:33 · 1098 阅读 · 0 评论 -
Linux服务器集群系统(一)——LVS项目介绍
原文地址:http://www.linuxvirtualserver.org/zh/lvs1.htmlLVS项目介绍 章文嵩 (wensong@linux-vs.org) 2002 年 3 月本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目的产生背景和目标,并描述了LVS服务器集群框架及目前提供的软件,列举LVS集群系统的特点和一些实际应用,最后,本文谈转载 2016-09-10 09:12:43 · 1416 阅读 · 0 评论 -
Linux服务器集群系统(二)——LVS集群的体系结构
原文地址:http://www.linuxvirtualserver.org/zh/lvs2.html本文主要介绍了LVS集群的体系结构。先给出LVS集群的通用体系结构,并讨论了其的设计原则和相应的特点;最后将LVS集群应用于建立可伸缩的Web、Media、Cache和Mail等网络服务。1.引言 在过去的十几年中,Internet从几个研究机构转载 2016-09-10 09:15:29 · 1068 阅读 · 0 评论 -
Linux服务器集群系统(三)——LVS集群中的IP负载均衡技术
原文地址:http://www.linuxvirtualserver.org/zh/lvs3.html本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)的工作原理,以及它们的优缺点。1.前言在 前面文章中,讲述了可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备份)。我们先分析实转载 2016-09-10 09:18:29 · 1602 阅读 · 0 评论 -
Linux服务器集群系统(四)——LVS集群的负载调度
原文地址:http://www.linuxvirtualserver.org/zh/lvs4.html本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法。针对请求的服务时间变化很大,给出一个动态反馈负载均衡算法,它结合内核中的加权连接调度算法,根据动态反馈回来的负载信息来调整服务器的权值,来进一步避免服务器间的负载不平衡。1. 前言 在上一篇文章中,我们主要讲述了转载 2016-09-10 09:21:02 · 1091 阅读 · 0 评论 -
IP、主机名和域名
在网络通信中,每个IP可唯一标识一台主机,在多网卡或者路由器等的情况下,每个主机可以有多个IP,通过哪个IP都可以找到该主机;但是IP地址是一个32位的数字,为了便于记忆,我们通常把按每字节划分,然后用10进制表示出来,即我们通常说的点分十进制(在IPV6的中采用的是冒号分十六进制)。如下图的网络抓包,可以看到一个我们常见的IP地址:192.168.100.1的实际存在形式用16进制就是:c0 a...原创 2016-09-21 10:13:32 · 27064 阅读 · 3 评论 -
数据链路层的一些总结
在网络中,主机与主机之间总是通过一个网线把各自的网卡对接起来,数据链路层的功能就是把一帧数据从当前主机(的某个网卡)传递到相连的下一个主机上(的某个网卡); 数据链路层为适应物理层采用的不同硬件,它支持多种协议,例如以太网、令牌环网、FDDI等,在我们日常使用过程中,以太网是最常见,也是TCP/IP采用的主要局域网技术,它采用CSMA/CD(带冲突检测的载波侦听多路介入)的媒体接入方法,速率为10原创 2016-09-21 10:27:33 · 1853 阅读 · 0 评论 -
关于推送系统设计的一些总结与思考(二)
**三、 消息推送的工作模式** 常见的消息推送系统的工作模式有:推模式、拉模式以及推拉混合模式三种,在很多推送系统中,采用在线消息直接推送下去,离线消息让客户端拉取,这种方式很容易造成漏消息的问题。本节将介绍几种“特殊定义“的推送模式的特点和应用场景,它们的含义与通常理解的略微有些差异。 在线用户:个人认为在线用户是指网络正常、弱网、网络异常等情况下的用户,这些用户实际上正在使用系统,只是由于原创 2016-11-24 19:40:05 · 10179 阅读 · 0 评论 -
关于推送系统设计的一些总结与思考(三)
**四、 推送系统的集群化**4.1长连接集群推送系统作为一项基础服务,它需要承载全部在线用户量,对于移动互联网行业,在设计之初的期望目标用户量就非常大,并且用户未来一段时间的增长量通常难以预估,因此要求在设计推送系统时,都要求能够集群化部署、支持动态扩展。那么长连接集群化设计时需要解决那些问题呢? 个人认为长连接服务需要解决三个问题:路由、管理和动态扩展;另外,如果想要锦上添花,让长连接通道更加原创 2016-11-24 19:43:51 · 3411 阅读 · 0 评论 -
使用LVS实现负载均衡原理及安装配置详解
本文转自:http://www.cnblogs.com/liwei0526vip/p/6370103.html 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。一、负载均衡LVS基本介绍 LB集群的架构转载 2017-02-15 08:54:53 · 989 阅读 · 0 评论 -
nginx源码分析之IO多路复用流程
一、 主流程几乎所有的服务器程序的工作模式都是:(1) 初始化一些参数;(2) 开启监听socket;(3) 在主线程的死循环(一般都是死循环)中对监听socket和业务socket进行IO状态监控(IO多路复用),并对IO进行处理;Nginx的主要工作模式是多进程模式,那么它的工作方式也是类似的。只不过是它的死循环被分散到了各个工作进程中。这原创 2017-03-02 20:35:40 · 4364 阅读 · 1 评论 -
大数据平台在分布式服务中的应用
对大数据平台的一些理解大数据是目前比较火的领域,它涉及的领域比较广泛,例如数据挖掘、机器学习等等;所有这些基于数据的操作能够正常工作的前提是:搭建相应的大数据收集平台,在该平台中能够通过主动和被动的方式收集到足够的数据;一般情况下,大数据平台里的数据来源主要有:(1) 日志数据,相对于大数据平台,这是一种主动收集数据的方式;这种方式可能是大数据平台中最主要的数据来源,并且随着用户请求量、服务数量原创 2017-06-27 18:03:22 · 3797 阅读 · 2 评论 -
mosquitto支持websocket的使用方法
欢迎加入QQ群:221779856,国内最活跃的Mosquitto沟通社区,关于MQTT、Mosquitto、IM、推送系统、物联网、高并发处理等技术。mosquito的版本要大于1.4.2;1.修改配置:打开configure.mk中的WITH_WEBSOCKETS配置项,如下:WITH_WEBSOCKETS:=yes2.编译make3.安装webs...原创 2018-04-02 14:59:39 · 22536 阅读 · 7 评论 -
linux 相关系统参数调优(特别针对网络传输,大量TIME_WAIT 的TCP状态的情况)
系统文件:/etc/sysctl.conf中的参数配置如下:net.ipv4.ip_local_port_range = 1024 65535net.core.rmem_max=16777216net.core.wmem_max=16777216net.ipv4.tcp_rmem=4096 87380 16777216net.ipv4.tcp_wmem=4096 65536 167原创 2015-07-22 16:15:35 · 2427 阅读 · 0 评论 -
ip别名及其在tcp压力测试时候的作用
通常在对服务器程序进行压力测试时,需要客户端模拟大量的tcp连接,以对服务器端产生强大的压力,但是由于linux端口号的限制,每个客户端ip顶多能发起6.4w左右的连接,详情可参考:http://blog.youkuaiyun.com/houjixin/article/details/18737881或者:http://houjixin.blog.163.com/blog/static/35628410201...原创 2015-07-31 17:03:43 · 2228 阅读 · 1 评论 -
将网卡中断分布到多个cpu上的方法
Linux下默认的一个网卡的中断操作只是有一个cpu来处理,目前多数主机都是多核cpu,在网络io操作比较多的服务器上,io操作往往成为瓶颈。最直观的体现就是,当网络操作较多时,应用程序的cpu飙升到100%,但是再查看每个cpu的负载情况,会发现压力都被击中到了某个cpu上,其他的cpu都还是空的,例如:图1出现上述情况时就应考虑是不是由于io太多的原因了,这里的Mosq原创 2015-08-11 15:11:58 · 9469 阅读 · 2 评论 -
TCP通信的基本流程
1. 简单的示例伪程序服务端伪代码:// 1. 建立一个监听socket listen_socket = socket(AF_INET, SOCK_STREAM, 0); // 2. 创建一个监听socket绑定的本地地址结构体 serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = h原创 2016-01-21 11:09:29 · 5887 阅读 · 0 评论 -
epoll示例程序——服务端
源码:#include #include #include #include #include #include #include #include #include //返回值的宏定义,在开发linux环境时,用0表示成功#define RES_SUC 0#define RES_FAIL -1#define FD_NULL 0#define null 0#de原创 2016-02-16 14:28:56 · 2245 阅读 · 0 评论 -
unix文件描述符——socket
在unix系统中,socket和普通文件一样对待,因为它可以像普通文件一样被读和写,但是它还有一些自己独特的特点,例如,文件的读写位置可以设置,但是socket只能被顺序的读写等等,那么在unix系统中,是如何实现这种方式的呢?如下图,其中有以下重要数据结构:proc、filedesc、file等,对这些重要数据结构及其之间的关系弄清楚之后,上面的问题自然就有答案了。在本文介绍中,使用的操作系原创 2016-07-16 13:12:12 · 6105 阅读 · 0 评论