Linux-网络编程
郑亚帅
热爱编程,热爱生活。
展开
-
Linux网络编程01——网络协议入门
为了使各种不同的计算机之间可以互联,ARPANet指定了一套计算机通信协议,即TCP/IP协议( 族 ),它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了网络的原理。因为这些协议实在太复杂、太庞大,这里只是整理一个简洁的框架,帮助大家从总体上把握它们。一、概述1.1 模型为了减少协议设计的复杂性,大多数网络模型转载 2017-01-13 18:00:21 · 264 阅读 · 0 评论 -
Linux epoll模型
定义: epoll是Linux内核为处理大批句柄而作改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著的减少程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。因为它会复用文件描述符集合来传递结果而不是迫使开发者每次等待事件之前都必须重新准备要被侦听的文件描述符集合,另一个原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被转载 2017-01-20 16:56:49 · 188 阅读 · 0 评论 -
Linux网络编程16——I/O复用之epoll详解
一、epoll概述epoll 是在 2.6 内核中提出的,是之前的 select() 和 poll() 的增强版本。相对于 select() 和 poll() 来说,epoll 更加灵活,没有描述符限制。epoll 使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的 copy 只需一次。二、epoll操作过程需转载 2017-01-14 17:21:24 · 301 阅读 · 0 评论 -
Linux网络编程15——I/O复用之poll详解
一、回顾前面的selectselect优点:目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点select缺点:1.每次调用 select(),都需要把 fd 集合从用户态拷贝到内核态,这个开销在 fd 很多时会很大,同时每次调用 select() 都需要在内核遍历传递进来的所有 fd,这个开销在 fd 很多时也很大。2转载 2017-01-14 17:19:55 · 314 阅读 · 0 评论 -
Linux网络编程14——I/O复用之select详解
一、I/O复用概述I/O复用概念:解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调I/O复用使用的场合:1.当客户处理多个描述符(通常是交互式输入、网络套接字)时,必须使用I/O复用。2.tcp服务器既要处理监听套接字,又要处理已连接套接字,一般要使用I/O复用。3.如果一个服务器既要处转载 2017-01-14 14:30:14 · 267 阅读 · 0 评论 -
Linux网络编程13——connect()、listen()和accept()三者之间的关系
一、tcp编程的核心步骤二、connect()函数分析对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用仅仅是通知 Linux 内核,让 Linux 内核自动完成 TCP 三次握手连接(三次握手详情,请看《浅谈 TCP 三次握手》),转载 2017-01-14 14:29:23 · 250 阅读 · 0 评论 -
Linux网络编程12——浅谈 TCP 三次握手和四次挥手
一、tcp协议格式二、三次握手在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送 syn 包(tcp协议中syn位置1,序号为J)到服务器,并进入 SYN_SEND 状态,等待服务器确认; 第二次握转载 2017-01-14 11:45:33 · 238 阅读 · 0 评论 -
Linux网络编程11——tcp、udp迭代服务器
一、迭代与并发服务器概述服务器设计技术有很多,按使用的协议来分有 TCP 服务器和 UDP 服务器,按处理方式来分有迭代服务器(循环服务器)和并发服务器。在网络程序里面,一般来说都是许多客户对应一个服务器(多对一),为了处理客户的请求,对服务端的程序就提出了特殊的要求。目前最常用的服务器模型有:迭代服务器:服务器在同一时刻只能响应一个客户端的转载 2017-01-14 12:12:04 · 341 阅读 · 0 评论 -
Linux网络编程10——TCP编程之服务器
一、做为 TCP 服务器需要具备的条件呢?1.具备一个可以确知的地址( bind() ):相当于我们要明确知道移动客服的号码,才能给他们电话;2.让操作系统知道是一个服务器,而不是客户端( listen() ):相当于移动的客服,他们主要的职责是被动接听用户电话,而不是主动打电话骚扰用户;3.等待连接的到来( accept() ):移动客服时刻等待着,来一个客户接听一个转载 2017-01-14 12:10:56 · 250 阅读 · 0 评论 -
Linux网络编程09——TCP编程之客户端
一、TCP概述TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 具有以下特点:1)电话系统服务模式的抽象2)每一次完整的数据传输都要经过建立连接、使用连接、终止连接的过程3)可靠、出错重传、且每收到一个数据都要给出相应的确认,保证数据传输的可靠性转载 2017-01-14 12:09:29 · 237 阅读 · 0 评论 -
Linux网络编程08——多播
转自:http://blog.csdn.net/tennysonsky/article/details/44493407一、概述单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用转载 2017-01-14 12:02:24 · 215 阅读 · 0 评论 -
Linux网络编程07——广播
概述在生活中广播无处不在,像平时在大街上卖物品的商人,在进行推广产品的时候往往都是使用一个喇叭来进行吆喝:“十块钱买不了吃亏,十块钱买不了上当,走过路过千万不要错过”,这就是广播。那么在网络中的广播又是什么样子的呢?网络上的广播指:由一台主机向该主机所在子网内(同一个局域网)的所有主机发送数据的方式。如下图的 1 号主机广播给 2、3、4、5转载 2017-01-14 11:52:02 · 237 阅读 · 0 评论 -
Linux网络编程06——UDP协议编程
一、概述UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是一个简单的面向数据报的运输层协议,在网络中用于处理数据包,是一种无连接的协议。UDP 不提供可靠性的传输,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速转载 2017-01-14 11:50:36 · 177 阅读 · 0 评论 -
Linux网络编程05——C/S与B/S架构的区别
一、概述在这个信息急剧膨胀的社会,我们不得不说人类正进入一个崭新的时代,那就是信息时代。信息时代的一个主要而显著的特征就是计算机网络的应用。计算机网络从最初的集中式计算,经过了Client/Server阶段(有两层C/S和三层C/S),已发展到目前最流行的 Browser/Server计算模式。其中颇具争论和影响力的是C/S以及B/S架构,C/S是一种历史悠久且技术非常成熟的架构,转载 2017-01-14 11:49:45 · 434 阅读 · 0 评论 -
Linux网络编程04——套接字
一、套接字概述套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信。我们可以用套接字中的相关函数来完成通信过程。套接字的特性有三个属性确定,它们是:域(domain),类型(type),和协议(protocol)。二、套接字的域域指定套接字通信中使用的网络介质。最常见的套接字域是 AF_I转载 2017-01-13 18:03:52 · 267 阅读 · 0 评论 -
Linux网络编程03——字节序和地址转换
一、字节序的概念字节序是指多字节数据的存储顺序,在设计计算机系统的时候,有两种处理内存中数据的方法:大端格式、小端格式。小端格式(Little-Endian):将低位字节数据存储在低地址。大端格式(Big-Endian):将高位字节数据存储在低地址。举个简单的例子,对于整形 0x12345678,它在大端格式和转载 2017-01-13 18:02:29 · 283 阅读 · 0 评论 -
Linux网络编程02——无连接和面向连接的区别
网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个问题与上下文有些关联:很显然,如果两台计算机要进行通信,就必须以某种形式“连接”起来,那“无连接通信”又是什么意思呢?答案是:面向连接和无连接指的都是转载 2017-01-13 18:01:13 · 245 阅读 · 0 评论 -
一个并发10k的简易群聊天室(使用epoll)
local.h点击(此处)折叠或打开#include sys/socket.h>#include sys/epoll.h>#include netinet/in.h>#include arpa/inet.h>#include fcntl.h>#include unistd.h>#include stdio.转载 2017-01-20 19:09:18 · 725 阅读 · 0 评论