网络编程
文章平均质量分 94
编程小问号
这个作者很懒,什么都没留下…
展开
-
针对TCP连接异常断开的分析
我们知道,一个基于TCP/IP的客户端-服务器的程序中,正常情况下,我会是启动服务器使其在一个端口上监听请求,等待客户端的连接;通过TCP的三次握手,客户端能够通过socket建立一个到服务器的连接;然后,两者就可以基于这个socket连接通信了。连接结束后,客户端(进程)会退出;在不需要继续处理客户请求的情况下,服务器(进程)也将退出。而且,当一个进程退出的时候,内核会关闭所有由这个进程打开的套转载 2014-07-16 16:37:37 · 2036 阅读 · 0 评论 -
TCP协议--TIME_WAIT状态
1.TIME_WAIT状态存在的两个理由:1)让4次握手关闭流程更加可靠;4次握手的最后一个ACK是是由主动关闭方发送出去的,若这个ACK丢失,被动关闭方会再次发一个FIN过来。若主动关闭方能够保持一个2MSL的TIME_WAIT状态,则有更大的机会让丢失的ACK被再次发送出去。如果主动关闭端不维持TIME_WAIT状态,而是处于CLOSED 状态,那么当主动端ACK丢失,被动转载 2015-07-07 11:04:36 · 415 阅读 · 0 评论 -
AF_INET与套接字
创建套接字的函数是socket(),函数原型为: #include #include int socket(int domain, int type, int protocol); 其中“int domain”参数表示套接字要使用的协议簇,协议簇的在“linux/socket.h”里有详细定义,常用的协议簇:AF_UNIX(本机通信)AF_IN转载 2015-07-08 10:05:54 · 1055 阅读 · 0 评论 -
nginx后端应用服务器有大量的tcp连接处于time_wait
今天发现weblogic上有大量的连接处于time_wait状态,感觉很奇怪。据说是nginx照成的,用tcpdump研究下。在nginx的服务器上执行tcpdump -i bond0 -nnA src host 134.96.129.36 and dst host 134.96.129.71 | grep -30 134.96.111.86可以看到nginx在把请求转转载 2015-07-30 17:30:14 · 3508 阅读 · 0 评论 -
一个epoll/aio/eventfd结合使用的简单例子
#define _GNU_SOURCE#define __STDC_FORMAT_MACROS#include #include #include #include #include #include #include #include #include #include #include #include #de转载 2015-08-12 09:21:59 · 609 阅读 · 0 评论 -
Linux kernel AIO这个奇葩
本文试图总结一下Linux kernel AIO的发展和现状Contents [hide]1. 动机2. 什么是AIO3. AIO的设计方案4. 替代方案5. AIO可以做的事6. AIO实现的几个问题7. AIO实现方案8. AIO现在9. 吐槽1. 动机Asynchronous I/O帮助用户程序提高CPU和IO设备的利用率和提高程序性能,特别是在高转载 2015-08-12 10:08:20 · 4436 阅读 · 0 评论 -
网络连接 keepalive
最近工作中遇到一个问题,想把它记录下来,场景是这样的: 从上图可以看出,用户通过Client访问的是LVS的VIP, VIP后端挂载的RealServer是Nginx服务器。 Client可以是浏览器也可以是一个客户端程序。一般情况下,这种架构不会出现问题,但是如果Client端把请求发送给Nginx,Nginx的后端需要一段时间才能返回结果,超过1分30秒就会有转载 2015-07-20 16:34:49 · 631 阅读 · 0 评论 -
网络编程释疑之:单台服务器上的并发TCP连接数可以有多少
曾几何时我们还在寻求网络编程中C10K问题的解决方案,但是现在从硬件和操作系统支持来看单台服务器支持上万并发连接已经没有多少挑战性了。我们先假设单台服务器最多只能支持万级并发连接,其实对绝大多数应用来说已经远远足够了,但是对于一些拥有很大用户基数的互联网公司,往往面临的并发连接数是百万,千万,甚至腾讯的上亿(注:QQ默认用的UDP协议)。虽然现在的集群,分布式技术可以为我们将并发负载分担在多台服务转载 2015-07-24 10:32:05 · 461 阅读 · 0 评论 -
Http长连接200万尝试及调优
对于一个server,我们一般考虑他所能支撑的qps,但有那么一种应用, 我们需要关注的是它能支撑的连接数个数,而并非qps,当然qps也是我们需要考虑的性能点之一。这种应用常见于消息推送系统,也称为comet应用,比如聊天室或即时消息推送系统等。comet应用具体可见我之前的介绍,在此不多讲。对于这类系统,因为很多消息需要到产生时才推送给客户端,所以当没有消息产生时,就需要hold住客户端的连接转载 2015-07-24 11:18:34 · 490 阅读 · 0 评论 -
[转]互联网的长在线、心跳和断线重连
2015-6-30阅读58 评论0概述 目前IM软件有一个基本的功能就是长在线,即只要有网络就保持登录,然而,网络状态是无法预测的,所以IM软件经常会有”离线“状态,尤其是手机客户端。长在线这个功能依赖断线重连完成。 通常,网络不稳定是造成不能长时间在线的主要原因,还有比如:服务器强制注销客户端、次客户端被主客户端踢。目前的qq和飞信都有断线重连转载 2015-08-05 15:07:56 · 900 阅读 · 0 评论 -
[转]互联网推送服务原理:长连接+心跳机制
2015-7-1阅读60 评论0 互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢? 在写之前,我们首先了解一下为什么android维转载 2015-08-05 15:09:20 · 754 阅读 · 0 评论 -
linux异步IO编程实例分析
在Direct IO模式下,异步是非常有必要的(因为绕过了pagecache,直接和磁盘交互)。linux Native AIO正是基于这种场景设计的,具体的介绍见:KernelAsynchronousI/O (AIO) SupportforLinux。下面我们就来分析一下AIO编程的相关知识。 阻塞模式下的IO过程如下:int fd = open(const char转载 2015-11-25 12:37:08 · 583 阅读 · 0 评论 -
网络服务
Lua的epoll模块 lua-epollLua的epoll模块 更多细节,请查看sample.lua API: ok,err=epoll.setnonblocking(fd) 设置一个文件描述符非阻塞。 epfd,err=epoll.create() 创建一个 epoll 文件描述符。 ok,err=epoll.register(epfd,fd,eventmask) 把目转载 2015-11-26 15:04:06 · 866 阅读 · 0 评论 -
tcp_keepalive 设置
1.参数设置查看相关的参数sysctl -a|grep tcp_keepalivenet.ipv4.tcp_keepalive_intvl = 30net.ipv4.tcp_keepalive_probes = 2net.ipv4.tcp_keepalive_time = 160设置相关的参数sysctl -w net.ipv4.tcp_keepalive_time =转载 2015-02-26 12:25:56 · 847 阅读 · 0 评论 -
TIME_WAIT状态引起的服务端重启失败问题
问题模型:server1为服务端,在本地的9999端口监听,server2相对server1是客户端,server2启动后首先向server1发起连接,然后再8888端口监听。程序代码不在列出。先后启动server1、server2,然后查看当前连接,如图1所示。图1.建立连接,正常之后强制结束server1(ctrl+c),再次查看当前连接状态,如图2所示转载 2016-06-21 14:08:53 · 505 阅读 · 0 评论 -
又见CLOSE_WAIT
环境简述要说清楚问题,先要简单说下生产环境的网络拓扑 (毕竟是个网络问题对吧)看,挺简单的对吧,一个OpenResty做SLB承受客户端请求,后向代理到几台应用服务器。由于业务要求,必须要同步调用第三方运营商的接口并返回结果到客户端。怎么“挂”了深夜接到某妹子电话本该是激动人心的事,但是奈何怎么都高兴不起来,因为来电是来告诉我环境挂了。赶紧问转载 2016-06-21 14:10:13 · 1598 阅读 · 0 评论 -
TCP协议--CLOSE_WAIT状态
1.服务器异常如果服务器出了异常,十之八九都是以下两种情况:1.服务器保持了大量TIME_WAIT状态2.服务器保持了大量CLOSE_WAIT状态因为linux分配给一个用户的文件句柄是有限的,而TIME_WAIT和CLOSE_WAIT两种状态如果一直被保持,那么意味着对应数目的通道就一直被占着,一旦达到句柄数上限,新的请求就无法被处转载 2015-07-07 11:02:50 · 455 阅读 · 0 评论 -
没有任何关闭socket的日志,客户端和服务端进程都在, 网络连接完好, 为什么进行某操作后好好的tcp连接莫名其妙地断了呢?
遇到这样一个问题:没有任何关闭socket的日志,客户端和服务端进程都在, 网络连接完好, 为什么进行某操作后好好的tcp连接莫名其妙地断了呢? 而且这个问题必现。 首先, 看日志, 没有close socket的任何日志, 而且, 可以确定的是, 如果代码有close socket的操作, 必定有日志输出。 其次, 查看客户端和服务端进程, 发现进程都转载 2015-07-25 13:07:23 · 1391 阅读 · 0 评论 -
tcp连接和断开流程
说起TCP,我们一般都需要知道发起一个tcp连接和终止一个tcp连接是所发生的事情,下边,我将跟大家介绍下tcp的三次握手及四次挥手的过程。 TCP三路握手 (1)服务器必须准备好接受外来的连接。这通常在调用socket,bind,listen这三个函数来完成,我们称之为被动打开(passive open)。 (2)客户通过调用socket,c转载 2014-07-16 16:28:00 · 630 阅读 · 0 评论 -
TCP 连接断连问题剖析
TCP 连接的保持并不需要任何额外的操作,但在实际应用中,要长时间保持一个 TCP 连接则会受到诸多因素的影响。本文介绍了几种常见的导致 TCP 连接断连的原因,并在此基础上,以 AIX 系统上 TCP 连接的异常断连为例,借助相应的网络分析工具,逐步揭开 AIX 上 TCP 断连的原因,并给出两种可行的解决方案。引言 在官方的正式文档中,TCP/IP 协议簇也称为国际互联网协议簇。TCP转载 2014-07-16 19:09:03 · 512 阅读 · 0 评论 -
初探Linux网络协议栈
译者注: 原文写于2003年,文中描述的不少内容已经发生了改变,在不影响愿意的情况下,我擅自增删了一些内容.翻译过程中找到的好资料:How SKBs WorkEvaluation of TCP retransmission delaysCongestion Control in Linux TCPAnatomy of the Linux networking stack — From转载 2014-07-17 20:51:12 · 768 阅读 · 0 评论 -
TCP 的那些事儿(上)
TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另外,本文我会使用英文术语,这样方便你通过这些英文关键词来查找相转载 2014-07-19 00:32:11 · 389 阅读 · 0 评论 -
TCP 的那些事儿(下)
这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己的发包的速度,小则让自己的连接更稳定,大则让整个网络更稳定。在你阅读下篇之前,你需要做好准备,本篇文章有好些算法和策略,可能会引发你的各种思考,让你的大脑分配很多内存和计算资转载 2014-07-19 00:34:26 · 615 阅读 · 0 评论 -
socket原理
使用sockets Socket控件让你建立一个利用TCP/IP和有关的协议与其他系统进行通信的应用。使用Sockets,你能够读和写通过它连接的其他机器,而不用担心实际的网络软件的相关细节。Sockets提供基于TCP/IP协议的连接。除此以外还能很好的工作,在其他相关的协议,例如Xerox Network System (XNS), Digital’s DEC net, or Novell’s转载 2014-07-23 14:58:26 · 440 阅读 · 0 评论 -
常见网络攻击基本原理
常见网络攻击原理 1.1 TCP SYN拒绝服务攻击 一般情况下,一个TCP连接的建立需要经过三次握手的过程,即: 1、 建立发起者向目标计算机发送一个TCP SYN报文; 2、目标计算机收到这个SYN报文后,在内存中创建TCP连接控制块(TCB),然后向发起者回送一个TCP ACK报文,等待发起者的回应; 3、 发起者收到TCP ACK报文后,再回转载 2014-07-14 13:01:10 · 1466 阅读 · 0 评论 -
Linux中socket 错误编码表 errno
最近在网络编程使用的过程中,发现errno会经常使用。因此决定在此做个留用,以备以后使用。。。 虽然errno是非线程安全的,但是可以通过几种机制保证其安全。。 最近在使用的过程中获得了errno,程序无法执行,也不知道如何解决问题。因此,理解每一个返回的errno整数值的含义是很重要的。。这个我们可以通过strerror函数来实现。。strerror(返回整数er转载 2014-07-14 12:25:51 · 1357 阅读 · 0 评论 -
网络中进程之间如何通信
进 程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIX BSD有:管道(pipe)、命名管道(named pipe)软中断信号(signal)UNIX system V有:消息(message)、共享存储区(shared memory)和信号量(semaph转载 2014-07-14 12:47:26 · 4808 阅读 · 0 评论 -
tcp的连接和终止
1.TCP报头 T C P将用户数据打包构成报文段;它发送数据后启动一个定时器;另一端对收到的数据进行确认,对失序的数据重新排序,丢弃重复数据; T C P提供端到端的流量控制,并计算和验证一个强制性的端到端检验和。2.TCP连接的建立与终止3.TCP的状态变迁 导致两个进入ESTABLISHED状态的变迁对应打开一个连接转载 2014-07-15 17:19:07 · 418 阅读 · 0 评论 -
TCP 连接的建立和中断
在阅读本文之前,可以先了解一些基本术语:http://name5566.com/1348.htmlTCP 是一个面向连接(connection-oriented)的协议(区别于 UDP),在双方发送数据前需要在它们之间建立一个连接(connection)。为了搞清楚 TCP 连接的建立和中断,我们从一个实际的例子说起(这里直接摘取《TCP/IP Illustrated, Volum转载 2015-01-27 01:01:22 · 1411 阅读 · 0 评论 -
TCP/IP 协议族简述
网络协议通常都是分层开发的,一个协议族(protocol suite)则是不同 layer(层)上的协议的集合,TCP/IP 协议族是我们常用的一个协议族,其包含 4 个 layer:Link layer 也被叫做 Data link layer(数据链路层)或者 Network interface layer(网络接口层)。此 Layer 主要包括设备的驱动(device driver)转载 2015-01-27 01:03:38 · 565 阅读 · 0 评论 -
tcp 三次握手和四次断连深入分析:连接状态和socket API的关系
说到tcp协议,凡是稍微看过的人都能顺口说出三次握手和四次断连,再牛逼的一点的就能够把每个状态(SYNC_SENT、CLOSE_WAIT。。。。。。等)都能背出来,而说道socket编程,基本上写过网络编程的人都会熟悉那几个标准的API:socket、connect、listen、accept。。。。。。等但是,我敢打赌很少有人明白tcp状态和socket编程API之间转载 2015-01-03 00:28:28 · 507 阅读 · 0 评论 -
setsockopt()用法
1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用 closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket: BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*转载 2015-04-26 01:17:29 · 477 阅读 · 0 评论 -
TCP 连接断连问题剖析
引言在官方的正式文档中,TCP/IP 协议簇也称为国际互联网协议簇。TCP/IP 协议簇是目前使用最为广泛的全球互联网技术,其分层结构如图 1 所示:图 1. TCP/IP 协议簇分层结构如图 1 所示,数据链路层主要负责处理传输媒介等众多的物理接口细节;网络层负责处理数据分组在网络中的活动,包括上层数据报文的分割、选路 phost2008-08-21T00:00:00转载 2015-06-23 14:14:29 · 436 阅读 · 0 评论 -
TCP连接建立过程中为什么需要“三次握手”
传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的运输层(Transport layer)通信协议。是专门为了在不可靠的互联网络上提供一个可靠的端到端字节流而设计的。互联网络与单个网络不同,因为互联网络的不同部分可能有着截然不同的拓扑、带宽、延迟、分组大小和其他参数。TCP的设计目标是能够动态的适应互联网络的这些特性,而且当转载 2016-08-06 00:20:40 · 655 阅读 · 0 评论