![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux_高级网络编程
文章平均质量分 88
lianghe_work
热爱linux
展开
-
Linux 网络编程—— libpcap 详解
概述libpcap 是一个网络数据包捕获函数库,功能非常强大,Linux 下著名的 tcpdump 就是以它为基础的。 libpcap主要的作用1)捕获各种数据包,列如:网络流量统计。2)过滤网络数据包,列如:过滤掉本地上的一些数据,类似防火墙。3)分析网络数据包,列如:分析网络协议,数据的采集。4)存储网络数据包,列如:保存捕获的数原创 2015-04-21 17:22:24 · 14899 阅读 · 4 评论 -
Linux网络编程——I/O复用函数之epoll
一、epoll概述epoll 是在 2.6 内核中提出的,是之前的 select() 和 poll() 的增强版本。相对于 select() 和 poll() 来说,epoll 更加灵活,没有描述符限制。epoll 使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的 copy 只需一次。二、epoll操作过程需原创 2015-06-18 10:01:00 · 3348 阅读 · 1 评论 -
Linux网络编程——tcp并发服务器(poll实现)
想详细彻底地了解poll或看懂下面的代码请参考《Linux网络编程——I/O复用之poll函数》代码:#include #include #include #include #include #include #include #include #include #include #include #define OPEN_MAX 100int main(int原创 2015-06-17 17:13:27 · 6059 阅读 · 0 评论 -
Linux高级网络编程系列教程
一、网络应用层编程1、Linux网络编程01——网络协议入门2、Linux网络编程02——无连接和面向连接的区别3、Linux网络编程03——字节序和地址转换4、Linux网络编程04——套接字5、Linux网络编程05——C/S与B/S架构的区别6、Linux网络编程06——UDP协议编程7、Linux网络编程07——广播(即将更新)8、Linux网络编程08原创 2015-04-22 10:01:21 · 14944 阅读 · 0 评论 -
Linux网络编程——tcp并发服务器(epoll实现)
通过epoll实现tcp并发回执服务器(客户端给服务器发啥,服务器就给客户端回啥)代码如下:#include #include #include #include #include #include #include #include #include #include #include #define OPEN_MAX 100int main(int arg原创 2015-06-18 20:26:13 · 19842 阅读 · 9 评论 -
Linux网络编程——I/O复用之select详解
一、I/O复用概述I/O复用概念:解决进程或线程阻塞到某个 I/O 系统调用而出现的技术,使进程不阻塞于某个特定的 I/O 系统调I/O复用使用的场合:1.当客户处理多个描述符(通常是交互式输入、网络套接字)时,必须使用I/O复用。2.tcp服务器既要处理监听套接字,又要处理已连接套接字,一般要使用I/O复用。3.如果一个服务器既要处原创 2015-06-15 17:46:49 · 5857 阅读 · 3 评论 -
Linux网络编程——I/O复用之poll函数
一、回顾前面的selectselect优点:目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点select缺点:1.每次调用 select(),都需要把 fd 集合从用户态拷贝到内核态,这个开销在 fd 很多时会很大,同时每次调用 select() 都需要在内核遍历传递进来的所有 fd,这个开销在 fd 很多时也很大。2原创 2015-06-17 15:09:04 · 19548 阅读 · 3 评论 -
Linux网络编程——tcp并发服务器(I/O复用之select)
与多线程、多进程相比,I/O复用最大的优势是系统开销小,系统不需要建立新的进程或者线程,也不必维护这些线程和进程。原创 2015-06-16 16:10:51 · 5576 阅读 · 1 评论 -
Linux网络编程——广播
概述在生活中广播无处不在,像平时在大街上卖物品的商人,在进行推广产品的时候往往都是使用一个喇叭来进行吆喝:“十块钱买不了吃亏,十块钱买不了上当,走过路过千万不要错过”,这就是广播。那么在网络中的广播又是什么样子的呢?网络上的广播指:由一台主机向该主机所在子网内(同一个局域网)的所有主机发送数据的方式。如下图的 1 号主机广播给 2、3、4、5原创 2015-05-16 09:14:09 · 8130 阅读 · 1 评论 -
Linux网络编程——浅谈 TCP 三次握手和四次挥手
三次握手在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认; 第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此原创 2015-06-11 16:12:58 · 7976 阅读 · 5 评论 -
Linux 网络编程——TCP编程之客户端
一、TCP概述TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 具有以下特点:1)电话系统服务模式的抽象2)每一次完整的数据传输都要经过建立连接、使用连接、终止连接的过程3)可靠、出错重传、且每收到一个数据都要给出相应的确认,保证数据传输的可靠性原创 2015-06-08 14:05:15 · 5024 阅读 · 1 评论 -
Linux网络编程——tcp并发服务器(多进程)
一、tcp并发服务器概述一个好的服务器,一般都是并发服务器(同一时刻可以响应多个客户端的请求)。并发服务器设计技术一般有:多进程服务器、多线程服务器、I/O复用服务器等。二、多进程并发服务器在 Linux 环境下多进程的应用很多,其中最主要的就是网络/客户服务器。多进程服务器是当客户有请求时,服务器用一个子进程来处理客户请求。父进程继续等待其它客户的请求。这种方法的原创 2015-06-15 15:02:24 · 12518 阅读 · 3 评论 -
Linux网络编程——tcp并发服务器(多线程)
tcp多线程并发服务器多线程服务器是对多进程服务器的改进,由于多进程服务器在创建进程时要消耗较大的系统资源,所以用线程来取代进程,这样服务处理程序可以较快的创建。据统计,创建线程与创建进程要快 10100 倍,所以又把线程称为“轻量级”进程。线程与进程不同的是:一个进程内的所有线程共享相同的全局内存、全局变量等信息,这种机制又带来了同步问题。tcp多线程并发服务原创 2015-06-15 15:27:04 · 22404 阅读 · 5 评论 -
Linux网络编程14——tcp、udp迭代服务器
服务器设计技术有很多,按使用的协议来分有 TCP 服务器和 UDP 服务器,按处理方式来分有循环服务器和并发服务器。循环服务器与并发服务器模型在网络程序里面,一般来说都是许多客户对应一个服务器(多对一),为了处理客户的请求,对服务端的程序就提出了特殊的要求。目前最常用的服务器模型有:·循环服务器:服务器在同一时刻只能响应一个客户端的请求·并发服务器:服务器在同一原创 2015-06-15 10:26:30 · 3227 阅读 · 0 评论 -
因特网的IP协议是不可靠无连接的,那为什么当初不直接把它设计为可靠的?
因特网使用的IP协议是无连接的,因此其传输是不可靠的。这样容易使人们感到因特网很不可靠,那为什么当初不直接把它设计为可靠的?先打一个比方。邮局寄送的平信很像无连接的IP数据报。每封平信可能走不同的传送路径,同时平信也不保证不丢失。当我们发现收信人没有收到寄出的平信时,去找邮局索赔是没有用的。邮局会说:“平信不保证不丢失。怕丢失就请你寄挂号信”。但是大家并不会将所有的信件都用挂号转载 2015-06-13 09:24:02 · 2960 阅读 · 2 评论 -
TCP 通信过程中各步骤的状态
状态图 1状态图 2对于上面的图 N 多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻的认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解析一下,以便加强记忆!不过在这之前,先回顾一下 TCP 建立连接的三次握手过程,以及关闭连接的四次握手过程,详情请看《浅转载 2015-06-11 17:57:16 · 6205 阅读 · 0 评论 -
TCP网络编程中connect()、listen()和accept()三者之间的关系
一、tcp编程的核心步骤原创 2015-06-10 16:39:46 · 6265 阅读 · 4 评论 -
Linux网络编程--tcp服务器
一、做为 TCP 服务器需要具备的条件呢?具备一个可以确知的地址( bind() ):相当于我们要明确知道移动客服的号码,才能给他们电话;让操作系统知道是一个服务器,而不是客户端( listen() ):相当于移动的客服,他们主要的职责是被动接听用户电话,而不是主动打电话骚扰用户;等待连接的到来( accept() ):移动客服时刻等待着,来一个客户接听一个。接收端使用 bind(原创 2015-06-12 09:48:39 · 4276 阅读 · 1 评论 -
IP 地址介绍
什么是 IP 地址IP 地址(Internet Protocol Address)也称为网间地址、网际地址。IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。IP 地址原创 2015-05-14 15:44:52 · 946 阅读 · 0 评论 -
Linux网络编程——绑定( bind )端口需要注意的问题
所谓绑定(bind)是指别人连接我只能通过我所绑定的端口,相当于,我买了一个手机,别人要想联系我,必须要知道我的手机号码,这时候,我需要怎么办呢?我需要给手机插上电话卡,固定一个电话号码,这样别人就能通过这个电话号码联系我。手机插上电话卡,固定一个电话号码,类似于绑定(bind)的过程,绑定(bind)为了固定一个端口号,别的网络程序就可以找到这个端口号,找到这个端口号就能找到这个端口号所对应的网原创 2015-05-06 20:29:09 · 5232 阅读 · 1 评论 -
Linux 网络编程——网络字节序、地址转换
一、字节序的概念字节序是指多字节数据的存储顺序,在设计计算机系统的时候,有两种处理内存中数据的方法:大端格式、小端格式。小端格式(Little-Endian):将低位字节数据存储在低地址。大端格式(Big-Endian):将高位字节数据存储在低地址。举个简单的例子,对于整形 0x12345678,它在大端格式和原创 2015-04-21 14:43:22 · 6231 阅读 · 0 评论 -
Linux网络编程——无连接和面向连接协议的区别
网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个问题与上下文有些关联:很显然,如果两台计算机要进行通信,就必须以某种形式“连接”起来,那“无连接通信”又是什么意思呢?答案是:面向连接和无连接指的都是转载 2015-04-21 14:37:53 · 3981 阅读 · 0 评论 -
Linux网络编程——网络协议入门
我们每天使用互联网,你是否想过,它是如何实现的?全世界几十亿台电脑,连接在一起,两两通信。北京的某一块网卡送出信号,深圳的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?为了使各种不同的计算机之间可以互联,ARPANet指定了一套计算机通信协议,即TCP/IP协议( 族 ),它们对电脑如何连接和组网,做出了详尽的规定。理解原创 2015-04-21 14:11:40 · 8735 阅读 · 8 评论 -
Linux 网络编程——TCP 和 UDP 数据报格式详解
TCP 报文格式TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 报文段的报头有 10 个必需的字段和 1 个可选字段。报头至少为 20 字节。报头后面的数据是可选项。1)源端口(16位)标识发送报文的原创 2015-04-22 10:00:23 · 1943 阅读 · 0 评论 -
Linux 网络编程—— libnet 使用指南
概述通过《原始套接字实例:发送 UDP 数据包》的学习,我们组 UDP 数据包时常考虑字节流顺序、校验和计算等问题,有时候会比较繁琐,那么,有没有一种更简单的方法呢?答案是:借助 libnet 函数库。libnet 是一个小型的接口函数库,主要用 C 语言写成,提供了低层网络数据包的构造、处理和发送功能。libnet 的开发目的是:建立一个简单统原创 2015-04-22 09:20:09 · 7962 阅读 · 0 评论 -
Linux网络应用编程之VLAN(Packet Tracer仿真)
VLAN一、VLAN概述VLAN(虚拟局域网):将多个设备和用户在逻辑上联网在一起,这些设备和用户不受物理位置的限制(物理设备可以在不同的地方),但是他们的通信就好像在同一网段中一样,这就叫VLAN(虚拟局域网)。二、VLAN的优点(1)、安全:通过VLAN划分成一个个逻辑上独立的网络,他们之间相互隔离,降低泄密的几率。(2)、成本低(3)、减小网络上不必要的流量(4)原创 2015-03-30 09:32:12 · 2287 阅读 · 0 评论 -
Linux网络应用编程之Packet Tracer安装及界面介绍
Packet Tracer入门一,Packet Tracer介绍packet tracer 是由Cisco公司发布的一个辅助学习工具,为学习思科网络课程的初学者去设计、配置、排除网络故障提供了网络模拟环境。用户可以在软件的图形用户界面上 直接使用拖曳方法建立网络拓扑,并可提供数据包在网络中行进的详细处理过程,观察网络实时运行情况二,软件安装介绍该软件在百度一搜,一大把都是,安装也很原创 2015-03-24 19:06:21 · 2275 阅读 · 0 评论 -
Linux网络应用编程之交换机概述
交换机概况、交换机原理、二三四层交换机的区别原创 2015-03-25 19:23:46 · 1528 阅读 · 0 评论 -
Linux 网络编程——套接字的介绍
一、套接字概述套接字是一种通信机制(通信的两方的一种约定),凭借这种机制,不同主机之间的进程可以进行通信。我们可以用套接字中的相关函数来完成通信过程。套接字的特性有三个属性确定,它们是:域(domain),类型(type),和协议(protocol)。二、套接字的域域指定套接字通信中使用的网络介质。最常见的套接字域是 AF_I转载 2015-04-21 14:50:39 · 4555 阅读 · 4 评论 -
浅谈 C/S 和 B/S 架构
一、概述在这个信息急剧膨胀的社会,我们不得不说人类正进入一个崭新的时代,那就是信息时代。信息时代的一个主要而显著的特征就是计算机网络的应用。计算机网络从最初的集中式计算,经过了Client/Server阶段(有两层C/S和三层C/S),已发展到目前最流行的 Browser/Server计算模式。其中颇具争论和影响力的是C/S以及B/S架构,C/S是一种历史悠久且技术非常成熟的架构,B/原创 2015-04-21 14:56:21 · 10763 阅读 · 0 评论 -
Linux 网络编程——原始套接字实例:发送 UDP 数据包
以太网报文格式:详细的说明,请看《MAC 头部报文分析》。IP 报文格式:详细的说明,请看《IP 数据报格式详解》。UDP 报文格式:详细的说明,请看《UDP 数据报格式详解》。校验和函数:[objc] view p原创 2015-04-21 16:37:05 · 4462 阅读 · 0 评论 -
Linux 网络编程——IP 数据报格式详解
一、IP 数据报首部TCP/IP 协议定义了一个在因特网上传输的包,称为 IP 数据报 (IP Datagram)。这是一个与硬件无关的虚拟包,由首部和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首都中的源地址和目的地址都是 IP原创 2015-04-21 16:31:50 · 1593 阅读 · 0 评论 -
Linux 网络编程——原始套接字实例:MAC 地址扫描器
如果 A (192.168.1.1 )向 B (192.168.1.2 )发送一个数据包,那么需要的条件有 ip、port、使用的协议(TCP/UDP)之外还需要 MAC 地址,因为在以太网数据包中 MAC 地址是必须要有的。那么怎样才能知道对方的 MAC 地址?答案是:它通过 ARP 协议来获取对方的 MAC 地址。ARP(Address Resolution Protoco原创 2015-04-21 16:19:57 · 3314 阅读 · 1 评论 -
Linux网络编程——多播
转自:http://blog.csdn.net/tennysonsky/article/details/44493407一、概述单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用原创 2015-04-21 15:36:27 · 5585 阅读 · 3 评论 -
Linux网络编程——原始套接字实例:MAC 头部报文分析
一、前导通过《Linux网络编程——原始套接字编程》得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢?二、链路层封包格式三、MAC 头部(有线局域网)注意:CRC、PAD 在组包时可以忽略四、链路层数据包的其中一种情况:[原创 2015-04-21 16:09:19 · 3286 阅读 · 0 评论 -
Linux网络编程——原始套接字编程
转自:http://blog.csdn.net/tennysonsky/article/details/44676377一、套接字概述原始套接字编程和之前的 UDP 编程差不多,无非就是创建一个套接字后,通过这个套接字接收数据或者发送数据。区别在于,原始套接字可以自行组装数据包(伪装本地 IP,本地 MAC),可以接收本机网卡上所有的数据帧(数据包)。另外,必须在管理员权限下才能使转载 2015-04-21 16:03:34 · 2030 阅读 · 0 评论 -
Linux网络编程——原始套接字能干什么?
一、知识回顾:通常情况下程序员接所接触到的套接字(Socket)为两类:(1)流式套接字(SOCK_STREAM):一种面向连接的 Socket,针对于面向连接的TCP 服务应用;(2)数据报式套接字(SOCK_DGRAM):一种无连接的 Socket,对应于无连接的 UDP 服务应用。从用户的角度来看,SOCK_STREAM、SOCK_DGRAM 这两类套转载 2015-04-21 15:50:17 · 2724 阅读 · 0 评论 -
Linux 网络编程——UDP编程
一、概述UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是一个简单的面向数据报的运输层协议,在网络中用于处理数据包,是一种无连接的协议。UDP 不提供可靠性的传输,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速原创 2015-04-21 15:10:33 · 6234 阅读 · 0 评论 -
Linux网络应用编程之集线器(Packet Tracer仿真)
一,集线器概况对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。工作于OSI(开放式系统互联参考模型)的最底层(物理层)。二,集线器分类无源集线器:不对信号做任何的处理,对介质的传输距离没有扩展。该Hub会将它收到的信号广播给所有连接它的设备。有源集线器:与无源集线器最大的区别就是,它能够对信号进行整形放大,这样能够提原创 2015-03-23 21:45:51 · 2248 阅读 · 0 评论