网络
文章平均质量分 69
FreeeLinux
A3GM5H3647LPD4QVYMYAER2S47P4WZ2UKBXBCGZES2V62WEY2HULQA
展开
-
C/S模型 多线程服务器实现简单计算工作并回馈客户端
本位代码实现客户端输入相应需要计算的表达式,服务器做简单计算,并将结果返回。头文件:#pragma once#include #include #include #include #include #include #include #include #include #include #include #define INIT_THREAD_NUM 5#de原创 2016-09-17 20:05:25 · 1282 阅读 · 0 评论 -
Linux网络编程之多进程模型编程与一个使用进程池实现的CGI服务器
一:什么是多进程模型多进程模型是服务器在接收到大量高并发客户端访问时,通过创建多个子进程来与客户端进行通信。单进程阻塞在read()系统调用的时候,会导致服务器无法响应到其他的连接请求。这时可以通过fork()函数创建出多个子进程来处理业务,而主进程继续循环accept()其他客户连接,子进程实施具体的通信细节。二:fork函数详解NAME fork - create原创 2016-08-29 15:16:13 · 2144 阅读 · 0 评论 -
Unix网络编程之socket编程(一)--socket入门简单程序
本程序实现客户端向服务器发送一个字符串,服务器将接收到的字符串回送给客户端。// unp.h#ifndef _UNP_H#define _UNP_H#include #include #include #include #include #include #include #include #include #include #define MAXLINE 409原创 2016-07-28 19:46:53 · 1563 阅读 · 1 评论 -
TCP连接为什么三次握手和四次挥手
最近开始复习了,以前学过的网络知识有点遗忘,所以做一点总结,让自己回忆起来。 为什么要三次握手为什么TCP连接采用三次握手而不是两次,四次?TCP的核心思想是,既要保证数据可靠传输,又要保证传输的效率。而三次恰好可以满足这两方面的需求。三次握手目的在于同步连接双方的序列号和确认号并交换 TCP窗口大小信息,让双方都确认自己发送的信息对方能够收到。这样三次就足够了,四次效率低且浪费资源。如果采用两原创 2017-01-30 22:19:02 · 705 阅读 · 0 评论 -
TCP的拥塞控制
1.引言 计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏。这种情况就叫做拥塞。 拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,和流量控制不同,流量控制指点对点通信量的控制。2.慢开始与拥塞避免转载 2017-01-31 13:24:41 · 387 阅读 · 0 评论 -
TCP协议疑难杂症全景解析
说明:1).本文以TCP的发展历程解析容易引起混淆,误会的方方面面2).本文不会贴大量的源码,大多数是以文字形式描述,我相信文字看起来是要比代码更轻松的3).针对对象:对TCP已经有了全面了解的人。因为本文不会解析TCP头里面的每一个字段或者3次握手的细节,也不会解释慢启动和快速重传的定义4).除了《TCP/IP详解》(卷一,卷二)以及《Unix网络编程》以及Linux源代码之外,转载 2017-01-31 13:52:43 · 658 阅读 · 0 评论 -
TCP 的那些事儿(下)
这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己的发包的速度,小则让自己的连接更稳定,大则让整个网络更稳定。在你阅读下篇之前,你需要做好准备,本篇文章有好些算法和策略,可能会引发你的各种思考,让你的大脑分配很多内存和计算资转载 2017-01-31 13:57:43 · 657 阅读 · 1 评论 -
TCP相关面试题总结
1、TCP三次握手过程 wireshark抓包为:(wireshark会将seq序号和ACK自动显示为相对值) 1)主机A发送标志syn=1,随机产生seq =1234567的数据包到服务器,主机B由syn=1知道,A要求建立连接; 此时状态A为SYN_SENT,B为LISTEN 2)主机B收到请求后要确认连接信息,向A发送ack转载 2017-01-31 14:28:27 · 620 阅读 · 0 评论 -
TCP的四种定时器
TCP使用四种定时器(Timer,也称为“计时器”):重传计时器:Retransmission Timer坚持计时器:Persistent Timer保活计时器:Keeplive Timer时间等待计时器:Time_Wait Timer。 (1)重传计时器:重传定时器:为了控制丢失的报文段或丢弃的报文段,也就是对报文段确认的等待时间。当TCP发送报文段时,就创建这个特定转载 2017-01-31 14:45:59 · 451 阅读 · 0 评论 -
简析TCP的三次握手与四次分手
TCP是什么?具体的关于TCP是什么,我不打算详细的说了;当你看到这篇文章时,我想你也知道TCP的概念了,想要更深入的了解TCP的工作,我们就继续。它只是一个超级麻烦的协议,而它又是互联网的基础,也是每个程序员必备的基本功。首先来看看OSI的七层模型:我们需要知道TCP工作在网络OSI的七层模型中的第四层——Transport层,IP在第三层——Network层,ARP在第二层——Data转载 2017-01-30 22:24:00 · 313 阅读 · 0 评论 -
TCP连接的坑总结
一. 关于半关闭和CLOSE_WAIT客户端主动关闭,发送FIN包。服务端收到FIN,发出ACK,停留在CLOSE_WAIT状态。这个状态持续时间非常长,服务器如果积攒大量的CLOSE_WAIT状态socket,有可能耗尽资源。为什么会产生这样情况?有可能sockfd通过fork被子进程复制了一份,这样该sockfd引用计数为2。在关闭socket时使用close()函数并没有关掉该fd,仅仅是引用原创 2017-01-31 13:55:16 · 1406 阅读 · 0 评论 -
TCP 的那些事儿(上)
TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另外,本文我会使用英文术语,这样方便你通过这些英文关键词来查找相转载 2017-01-31 13:55:44 · 329 阅读 · 0 评论 -
epoll内核实现分析
注:之前写过两篇关于epoll实现的文章,但是感觉懂得了实现原理并不一定会使用,所以又决定写这一系列文章,希望能够对epoll有比较清楚的认识。是请大家转载务必注明出处,算是对我劳动成果的一点点尊重吧。另外,文中如果有不全面或者不正确的地方还请大家指出。也可以私信或者发邮件:lvyilong316@163.com1. ET模式实现分析1.1 ET和LT的实现区别 首先给出下面转载 2017-02-19 19:04:25 · 1778 阅读 · 0 评论 -
多进程、共享内存的网络聊天室
好久没写网络聊天室了,去年暑假可以说写了一暑假,最近复习这些,又因为我一直偏向于多线程,就用多进程复习一下。下面给出昨天写的基于多进程、共享内存的网络聊天室代码。每个进程负责一个连接,多个进程之间仅共享读,不共享写,因此无需信号量来同步。分配的一段内存中,以数组的方式,分配给每个client一段buffer,每个clilent对应的buffer的索引就是connfd。当一个子进程收到客户端数据后,通原创 2017-02-08 12:14:30 · 2164 阅读 · 2 评论 -
网络编程定时器一:使用升序链表
之前一直对定时器这块不熟,今天来练练手。首先我们来看实现定时器的第一种方式,升序链表。网络编程中应用层的定时器是很有必要的,这可以让服务端主动关闭时间很久的非活跃连接。另外一种解决方案是TCP的keepalive,但它只能检测真正的死连接,即客端主机断电,或者网线被拔掉这种情况。如果客端连接上,但什么都不做,keepalive是毫无办法的,它只能一定时间后不断的向客户端发送心跳包。定时器通常至少要包原创 2017-02-05 23:09:49 · 1881 阅读 · 0 评论 -
网络编程定时器二:使用时间轮
上次说到,基于排序链表的定时器存在一个问题:添加定时器的效率偏低。这次我们用时间轮来解决该问题。如图就是一个时间轮:在时间轮内,指针指向轮子上的一个槽。它以恒定的速率顺时针转动。没转动一步就指向下一个槽,每次转动称之为一个tick。一个滴答的时间称为时间轮的槽间隔si(slot interval),它实际上就是心搏时间。时间轮共有N个槽,因此它运转一周的时间是N*si。每个槽指向一个定时器链表,每条原创 2017-02-06 21:32:24 · 814 阅读 · 0 评论 -
一个简单线程池的实现 --C语言
本文的代码实现了一个简单的线程池,并利用C/S模型将客户端所发送的数据进行简单的计算。一:什么是线程池 我是这么理解的,池是计算机科学中一种典型的机制,如STL里面的内存池,数据库连接池,还有进程池或线程池。这些池建立的目的都是为了避免频繁系统调用所带来的开销。我们这样想,如果我们事先转备好一大块所需要的内存,或者线程,以后我们要用到时就直接拿来用就好了。不够的话再执行其他解决方案。原创 2016-09-18 13:11:46 · 1785 阅读 · 0 评论 -
TCP_NODELAY和KEEP_ALIVE
TCP_NODELAY和Nagle算法有关,关系如下:TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许原创 2016-10-23 22:10:44 · 911 阅读 · 0 评论 -
google的protobuf用法
一:安装地址是:https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz,wget一下就可以了。然后就是安装三部曲:1. ./configure 2.make 3.make check 4.sudo make install (额,多了第三步)不过安装后可能会报错,pro原创 2016-10-25 19:06:29 · 729 阅读 · 0 评论 -
利用backtrace函数打印函数调用栈
我们一般打印函数调用栈可以选择GDB的backtrace命令,简写bt命令都可以。这里有一个新的方法,那就是利用backtrace函数打印,不过还要加上backtrace_symbols()函数。int backtrace(void **buffer, int size)该函数用于获取当前线程的调用堆栈,获取的信息将会被存放在buffer中,它是一个指针列表。参数 size 用来指原创 2016-10-24 13:05:17 · 4697 阅读 · 1 评论 -
配置TCP/IP网络
* Linux和UNIX系统一样,对TCP/IP协议有着良好的支持,并且支持最新的IPv6协议。对系统的配置可以通过命令来实现,也可以通过编辑配置文件实现。*用Linux命令手工配置TCP/IP网络IP相关在Linux系统下可以有多种配置TCP/IP网络的方法,其中最常用的是通过命令手工配置和直接修改配置文件。 在/etc/sysconfig/network-scripts目录下存原创 2016-05-10 22:23:04 · 1394 阅读 · 0 评论 -
Linux 关于用户和组的基本命令
useradd USERNAME groupadd GRPNAME用户管理: useradd, userdel, usermod, passwd, chsh, chfn, finger, id, chage组管理: groupadd, groupdel, groupmod, gpasswd权限管理: chown, chgrp, chmod, umask/etc/pas原创 2016-05-07 22:37:16 · 788 阅读 · 0 评论 -
高性能大并发服务器架构
一个典型的服务器结构主要由三部分组成网络I/O+服务器高性能编程技术+数据库一:网络I/O网络I/O方面,linux下面使用epoll,windows上面有IOCP,其他平台还有kqueue,dev/poll等机制。二:服务器及数据库的负载均衡1.数据库数据库可能会有以下几点需要解决:1.超出数据库连接数 假原创 2016-11-24 14:55:04 · 7014 阅读 · 0 评论 -
tcpdump的基本用法之选项
tcpdump基本用法需要在root用户下使用,非root用户可用sudo。tcpdump -i eth1 -nn -X port 8080 -c 1-i:i 是interface的含义,是指我们有义务告诉tcpdump希望它去监听哪一个网卡。用ifconfig可以看到,一般不是eth0就是eth1。-nn:是当tcpdump遇到协议号或端口号时,不要将这些号码转换成对原创 2016-11-25 13:34:32 · 4382 阅读 · 0 评论 -
C++使用jsoncpp解析json
jsoncpp的安装jsoncpp有依赖包,那就是scons。1.安装sconssudo apt-get install scons即可。2.安装jsoncpp 网址:http://sourceforge.net/projects/jsoncpp/files/步骤:tar -zxf jsoncpp-src-0.5.0.tar.gz cd jsoncpp-src-原创 2016-11-26 01:00:56 · 1070 阅读 · 0 评论 -
XML学习以及python解析xml笔记
一:什么是XMLXML是指可扩展标记语言(eXtensible Markup Language)。XML被设计用来传输和存储数据。XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它是无标记语言,即定义了用于定义其他与特定领域有关的,语义的,结构化的标记语言的句法语言。三个属性分别是:version:版本en原创 2016-11-25 23:43:07 · 603 阅读 · 0 评论 -
tcpdump的基本用法之过滤表达式
上篇博客写了tcpdump选项的用法, 这篇博客我们来看一下过滤表达式。过滤表达式的man手册:man pcap-filtertcpdump在使用过滤表达式时,如有用了shell的通配符,需要用单引号引起来。情形1:只抓udp的包#tcpdump -i eth0 -c 10 'udp'情形2:只想查看源机器和目的机器的包# tcpdump原创 2016-11-25 14:06:16 · 14028 阅读 · 0 评论 -
网络编程定时器三:使用最小堆
前面讨论的定时方案都是以固定频率调用心搏函数tick,并在其中一次检测到期的定时器,然后执行到期定时器上的回调函数。设计定时器的另一中思路是,将所有定器超时时间最小的一个定时器的超时值作为心搏间隔。这样,一旦心搏函数tick执行,超时时间最小的定时器必然到期。我们就可以从剩余定时器中选出超时时间最小的一个,并将这个时间设为下一次心搏间隔。如此反复,就实现了较为精确的定时。最小堆适合这种解决方案,下面原创 2017-02-06 21:59:58 · 1439 阅读 · 1 评论 -
IO多路复用 --select、poll、epoll模式
一:select模式头文件:#include #include #include #include #include #include #include #include #include #define MAX_LINE 1024#define MAX_SIZE 10#define IP_ADDR "127.0.0.1"#define PORT原创 2016-09-27 11:27:35 · 780 阅读 · 1 评论