随笔分类 -  网络编程

网络编程知识
摘要:1、前言 今天需要实现一个Pyhton的http服务,与Web的JS进行交换。 2、实例代码 支持HEAD、GET、POST方法,将参数转换为JSON格式,返回结果以JSON字符串返回。 使用NodeJS默认测试如下: 阅读全文
posted @ 2017-06-27 17:24 Rabbit_Dale 阅读(8008) 评论(0) 推荐(0) 编辑
摘要:1、前言 昨天总结了一下Linux下网络编程“惊群”现象,给出Nginx处理惊群的方法,使用互斥锁。为例发挥多核的优势,目前常见的网络编程模型就是多进程或多线程,根据accpet的位置,分为如下场景: (1)单进程或线程创建socket,并进行listen和accept,接收到连接后创建进程和线程处 阅读全文
posted @ 2017-06-25 12:46 Rabbit_Dale 阅读(26351) 评论(1) 推荐(7) 编辑
摘要:1、前言 网络编程分为客户端和服务端,服务器通常分为迭代服务器和并发服务器。并发服务器可以根据多进程或多线程进行细分,给每个连接创建一个独立的进程或线程,或者预先分配好多个进程或线程等待连接的请求。今天探讨三种设计范式 (1)迭代服务器 (2)并发服务器,为每个客户请求创建一个进程或线程 (3)预先 阅读全文
posted @ 2017-06-25 00:34 Rabbit_Dale 阅读(2088) 评论(1) 推荐(2) 编辑
摘要:1、前言 我从事Linux系统下网络开发将近4年了,经常还是遇到一些问题,只是知其然而不知其所以然,有时候和其他人交流,搞得非常尴尬。如今计算机都是多核了,网络编程框架也逐步丰富多了,我所知道的有多进程、多线程、异步事件驱动常用的三种模型。最经典的模型就是Nginx中所用的Master-Worker 阅读全文
posted @ 2017-06-24 12:18 Rabbit_Dale 阅读(21853) 评论(18) 推荐(16) 编辑
摘要:1、前言 最近在写一个测试工具,要求快速的高效率的扫描出各个服务器开放了哪些端口。当时想了一下,ping只能检测ip,判断服务器的网络是连通的,而不能判断是否开放了端口。我们知道端口属于网络的传输层,因此需要用ip和端口来探测,这个时候就可以用connect来探测一下,针对TCP协议,connect 阅读全文
posted @ 2017-02-18 17:19 Rabbit_Dale 阅读(19555) 评论(7) 推荐(3) 编辑
摘要:一、TCP与UDP的区别 基于连接与无连接 对系统资源的要求(TCP较多,UDP少) UDP程序结构较简单 流模式与数据报模式 TCP保证数据正确性,UDP可能丢包 TCP保证数据顺序,UDP不保证 部分满足以下几点要求时,应该采用UDP 面向数据报方式 网络数据大多为短消息 拥有大量Client 阅读全文
posted @ 2016-12-22 13:26 Rabbit_Dale 阅读(6312) 评论(0) 推荐(1) 编辑
摘要:1、前言 最近在项目中用nginx做反向代理,需要动态生成nginx的配置。大概流程是用户在页面上新增域名、http或https协议以及端口信息,后台会根据域名自动生成一个nginx的server配置,在nginx.conf配置文件中使用include将所有的server配置加载进来。遇到一个问题就 阅读全文
posted @ 2016-11-29 00:19 Rabbit_Dale 阅读(22633) 评论(5) 推荐(1) 编辑
摘要:1、前言 最近在看大型网站架构的书籍,书中介绍了大型网站支持扩展性。大概意思就是当服务器出现性能的不足的时,如何调整服务器,用来满足更多的请求。之前对这个扩展概念不是很清楚,仔细看了一下扩展分为水平扩展和垂直扩展两种。今天总结一下服务扩展性的知识点。主要内容为(1)服务器扩展性是什么?为什么需要扩展 阅读全文
posted @ 2016-11-26 00:12 Rabbit_Dale 阅读(1233) 评论(2) 推荐(1) 编辑
摘要:1、前言 最近在倒腾SSL方面的项目,之前只是虽然对SSL了解过,但是不够深入,正好有机会,认真学习一下。开始了解SSL的是从https开始的,自从百度支持https以后,如今全站https的趋势越来越强烈,互联网对安全的认识越来越深入。本文根据自己的实际情况,对SSL链接建立做个总结。SSL相关的 阅读全文
posted @ 2016-11-20 19:36 Rabbit_Dale 阅读(21212) 评论(0) 推荐(5) 编辑
摘要:1、前言 最近工作中用到反向代理,发现网络代理的玩法还真不少,网络背后有很多需要去学习。而在此之前仅仅使用了过代理软件,曾经为了访问google,使用了代理软件,需要在浏览器中配置代理的地址。我只知道有代理这个概念,并不清楚代理还有正向和反向之分,于是赶紧学习一下,补充一下知识。首先弄清楚什么是正向 阅读全文
posted @ 2016-11-12 13:02 Rabbit_Dale 阅读(173349) 评论(48) 推荐(114) 编辑
摘要:1、前言 最近工作涉及到https,需要修改nginx的openssl模块,引入keyless方案。关于keyless可以参考CloudFlare的官方博客: https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-det 阅读全文
posted @ 2016-11-01 00:31 Rabbit_Dale 阅读(29205) 评论(7) 推荐(7) 编辑
摘要:1、前言 前一段时间出去面试,被问到同步、异步与阻塞、非阻塞的区别。我一时半会没有想出来,作为一个工作三年的人来说,实在很惭愧。我当时理解同步、异步属于两个进程中间的协作关系,例如使用浏览器访问一个网站,需要多次请求服务端,才能加载完整个页面的内容。同步的操作如下:浏览器首先发送第一个请求,等待服务 阅读全文
posted @ 2016-10-15 23:40 Rabbit_Dale 阅读(55566) 评论(18) 推荐(17) 编辑
摘要:1、前沿 万物联网的时代即将到来,物联网也由当初的概念开始进一步落实。随着无线网络技术飞速发展,各种设备都可以连接网络,实现远程控制。例如智能家居最近非常火爆,智能插座、智能LED灯、智能摄像头等。在互联网时代,HTTP协议负责建立网络连接,而到了物联网时代,由于智能硬件的差异,相比互联网终端,硬件 阅读全文
posted @ 2016-04-04 22:43 Rabbit_Dale 阅读(10812) 评论(0) 推荐(0) 编辑
摘要:1、前言 说来惭愧,我是学软件出生的,误打误撞去了一家搞网络设备的公司。本来对网络不熟悉,只知道一些基础的知识。虽然在公司主要是搞应用层开发,但是毕竟是网络公司,不懂网络肯定是不行的。为此要很下心来学习一些网络知识,从最基本的开始。网络设备最重要的是对报文转发和控制。高性能搞并发的转发报文需要很强... 阅读全文
posted @ 2014-10-19 00:08 Rabbit_Dale 阅读(25842) 评论(0) 推荐(3) 编辑
摘要:select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读写,异步I/O的实现会负责把数据从内核拷贝到用户空间。关于这三种IO多路复用的用法,前面三篇总结写的很清楚,并用服务器回射echo程序进行了测试。连接如下所示:select:http://www.cnblogs.com/Anker/archi.. 阅读全文
posted @ 2013-08-17 20:16 Rabbit_Dale 阅读(381117) 评论(26) 推荐(102) 编辑
摘要:1、基本知识 epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。2、epoll接口 epoll操作过程需要三个接口,分别如下:#include int epoll_create(int size);int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);int epoll_wai.. 阅读全文
posted @ 2013-08-17 01:41 Rabbit_Dale 阅读(155242) 评论(33) 推荐(33) 编辑
摘要:1、基本知识 poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数量的限制。poll和select同样存在一个缺点就是,包含大量文件描述符的数组被整体复制于用户态和内核的地址空间之间,而不论这些文件描述符是否就绪,它的开销随着文件描述符数量的增加而线性增大。2、poll函数 函数格式如下所示:# include int poll ( struct pollfd * fds, unsigned int nfds, int timeout);pollfd结构体定义如下:structpollf.. 阅读全文
posted @ 2013-08-15 22:16 Rabbit_Dale 阅读(79735) 评论(18) 推荐(8) 编辑
摘要:1、基本概念 IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合: (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。 (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。 (3)如果一个TC 阅读全文
posted @ 2013-08-14 23:07 Rabbit_Dale 阅读(159240) 评论(30) 推荐(45) 编辑
摘要:1、前言 在网络编程中,阻塞、非阻塞、同步、异步经常被提到。unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解。网上有详细的分析:http://blog.csdn.net/historyasamirror/article/details/5778378。我结合网上博客和书总结一下,加以区别,加深理解。2、数据流向 网络IO操作实际过程涉及到内核和调用这个IO操作的进程。以read为例,read的具体操作分为以下两个部分: (1)内核等待数据可读 (2)将内核读到的数据拷贝到进程详细过程如下图所示:3、网络I... 阅读全文
posted @ 2013-08-12 23:47 Rabbit_Dale 阅读(70167) 评论(18) 推荐(34) 编辑
摘要:1、概述 System V IPC共有三种类型:System V消息队列、System V 信号量、System V 共享内存区。 System V IPC操作函数如下:2、key_t键和ftok函数 三种类型的IPC使用key_t值作为他们的名字,头文件<sys/types.h>把key_t定义为一个整数,通常是一个至少32位的整数,由ftok函数赋予的。函数ftok把一个已存的路径和一个整数标识符转换成一个key_t值,称为IPC键。函数原型如下:#include <sys/types.h>#include <sys/ipc.h>key_t ftok(c 阅读全文
posted @ 2013-01-07 09:19 Rabbit_Dale 阅读(4066) 评论(0) 推荐(0) 编辑