【Linux网络编程】
文章平均质量分 68
Mike江
A goal is not always meant to be reached, it often serves simply as something to aim at. ──Bruce Lee
目标不一定是需要达到的,目标往往只是用来帮助你瞄准方向。──李小龙
展开
-
Linux 网络编程—— libpcap 详解
概述libpcap 是一个网络数据包捕获函数库,功能非常强大,Linux 下著名的 tcpdump 就是以它为基础的。libpcap主要的作用1)捕获各种数据包,列如:网络流量统计。2)过滤网络数据包,列如:过滤掉本地上的一些数据,类似防火墙。3)分析网络数据包,列如:分析网络协议,数据的采集。4)存储网络数据包,列如:保存捕获的数据以为将来进行分析。libpcap 的安装libpcap 的抓包框...原创 2015-04-02 19:32:04 · 66341 阅读 · 2 评论 -
Linux网络编程——绑定( bind )端口需要注意的问题
所谓绑定(bind)是指别人连接我只能通过我所绑定的端口,相当于,我买了一个手机,别人要想联系我,必须要知道我的手机号码,这时候,我需要怎么办呢?我需要给手机插上电话卡,固定一个电话号码,这样别人就能通过这个电话号码联系我。手机插上电话卡,固定一个电话号码,类似于绑定(bind)的过程,绑定(bind)为了固定一个端口号,别的网络程序就可以找到这个端口号,找到这个端口号就能找到这个端口号所对应的网...原创 2015-03-04 16:10:52 · 42051 阅读 · 4 评论 -
Linux 网络编程——UDP编程
概述UDP 是 User Datagram Protocol 的简称, 中文名是用户数据报协议,是一个简单的面向数据报的运输层协议,在网络中用于处理数据包,是一种无连接的协议。UDP 不提供可靠性的传输,它只是把应用程序传给 IP 层的数据报发送出去,但是并不能保证它们能到达目的地。由于 UDP 在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。UDP 有如...原创 2015-04-16 20:26:34 · 44733 阅读 · 2 评论 -
Linux 网络编程——网络字节序、地址转换
网络字节序故事的起源“endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,其中一个皇帝送了命,另一个丢了王位。我们一般将“endian”翻译成“字节序”,将 Big-Endian 和 Little-Endian 称作“大端格式”和“小端格式”。字节序字节序是指多字节数据的存储顺...原创 2015-04-14 19:42:51 · 18703 阅读 · 1 评论 -
浅谈 C/S 和 B/S 架构
概述在这个信息急剧膨胀的社会,我们不得不说人类正进入一个崭新的时代,那就是信息时代。信息时代的一个主要而显著的特征就是计算机网络的应用。计算机网络从最初的集中式计算,经过了Client/Server阶段(有两层C/S和三层C/S),已发展到目前最流行的 Browser/Server计算模式。其中颇具争论和影响力的是C/S以及B/S架构,C/S是一种历史悠久且技术非常成熟的架构,B/S是新生代架构,...转载 2015-04-15 19:38:07 · 74976 阅读 · 3 评论 -
Linux网络编程——无连接和面向连接协议的区别
网络编程中最基本的概念就是面向连接(connection-oriented)和无连接(connectionless)协议。尽管本质上来说,两者之间的区别并不难理解,但对那些刚刚开始进行网络编程的人来说,却是个很容易混淆的问题。这个问题与上下文有些关联:很显然,如果两台计算机要进行通信,就必须以某种形式“连接”起来,那“无连接通信”又是什么意思呢?答案是:面向连接和无连接指的都是协议。也就是说,这些...翻译 2015-03-19 15:26:25 · 15849 阅读 · 0 评论 -
因特网的IP协议是不可靠无连接的,那为什么当初不直接把它设计为可靠的?
因特网使用的IP协议是无连接的,因此其传输是不可靠的。这样容易使人们感到因特网很不可靠,那为什么当初不直接把它设计为可靠的?先打一个比方。邮局寄送的平信很像无连接的IP数据报。每封平信可能走不同的传送路径,同时平信也不保证不丢失。当我们发现收信人没有收到寄出的平信时,去找邮局索赔是没有用的。邮局会说:“平信不保证不丢失。怕丢失就请你寄挂号信”。但是大家并不会将所有的信件都用挂号方式邮寄,这是因为邮...转载 2015-03-19 12:00:52 · 34705 阅读 · 2 评论 -
TCP网络编程中connect()、listen()和accept()三者之间的关系
基于 TCP 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下:connect()函数对于客户端的 connect() 函数,该函数的功能为客户端主动连接服务器,建立连接是通过三次握手,而这个连接的过程是由内核完成,不是这个函数完成的,这个函数的作用仅仅是通知 Linux 内核,让 Linux 内核自动完成 TCP 三次握手连接(三次握手详情,请看《浅谈 TCP 三次握手》),最...原创 2015-05-10 18:34:45 · 119969 阅读 · 21 评论 -
Linux网络编程——网络协议入门
我们每天使用互联网,你是否想过,它是如何实现的?全世界几十亿台电脑,连接在一起,两两通信。北京的某一块网卡送出信号,深圳的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情吗?为了使各种不同的计算机之间可以互联,ARPANet指定了一套计算机通信协议,即TCP/IP协议( 族 ),它们对电脑如何连接和组网,做出了详尽的规定。理解了这些协议,就理解了网络的原理。因为...转载 2015-03-13 16:19:35 · 85975 阅读 · 9 评论 -
阻塞、非阻塞IO
阻塞与非阻塞是对于文件而言的,而不是指read、write等的属性。阻塞IO应用程序调用IO函数,导致应用程序阻塞,等待数据准备好。如果数据没有准备好,一直等待数据准备好了,从内核拷贝到用户空间,IO函数返回成功指示。读常规文件是不会阻塞的,不管读多少字节,read一定会在有限的时间内返回。一般网络、终端设备IO都是阻塞I/O。如果从终端输入的数据没有换行符,调用read读...原创 2017-11-14 20:06:22 · 6351 阅读 · 0 评论 -
Linux高级网络开发奇妙之旅
一、基础理论篇01、网络协议入门02、LAN、WAN、WLAN、VLAN 和 VPN 的区别03、IP 地址介绍04、广播地址介绍05、无连接和面向连接协议的区别06、因特网的IP协议是不可靠无连接的,那为何当初不直接把它设计为可靠?07、C/S和B/S架构的区别二、初级实践篇08、编程准备:字节序、地址转换09、套接字的介绍10、UDP编程11、绑定( bind )端口需要注意的问题12、UDP...原创 2015-04-14 17:07:15 · 205920 阅读 · 10 评论 -
Linux网络编程——广播
概述在生活中广播无处不在,像平时在大街上卖物品的商人,在进行推广产品的时候往往都是使用一个喇叭来进行吆喝:“十块钱买不了吃亏,十块钱买不了上当,走过路过千万不要错过”,这就是广播。那么在网络中的广播又是什么样子的呢?网络上的广播指:由一台主机向该主机所在子网内(同一个局域网)的所有主机发送数据的方式。如下图的 1 号主机广播给 2、3、4、5 号主机发送数据:实现广播,离不开广播地址,同一个子网(...原创 2015-05-08 18:58:16 · 26737 阅读 · 1 评论 -
Linux网络编程——多播
概述单播用于两个主机之间的端对端通信,广播用于一个主机对整个局域网上所有主机上的数据通信。单播和广播是两个极端,要么对一个主机进行通信,要么对整个局域网上的主机进行通信。实际情况下,经常需要对一组特定的主机进行通信,而不是整个局域网上的所有主机,这就是多播的用途。IP 多播(也称多址广播或组播)技术,是一种允许一台或多台主机(多播源)发送单一数据包到多台主机(一次的,同时的)的 TCP/IP 网络...原创 2015-03-20 20:30:38 · 19286 阅读 · 5 评论 -
Linux 网络编程——原始套接字实例:发送 UDP 数据包
以太网报文格式:详细的说明,请看《MAC 头部报文分析》。IP 报文格式:详细的说明,请看《IP 数据报格式详解》。UDP 报文格式:详细的说明,请看《UDP 数据报格式详解》。校验和函数:/*******************************************************功能: 校验和函数参数: buf: 需要校验数据的首地址 nword: 需要校验数据长度...原创 2015-04-08 16:57:13 · 77708 阅读 · 9 评论 -
Linux 网络编程——TCP 和 UDP 数据报格式详解
TCP 报文格式TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 报文段的报头有 10 个必需的字段和 1 个可选字段。报头至少为 20 字节。报头后面的数据是可选项。1)源端口(16位)标识发送报文的计算机端口或进程。一个 TCP 报文段必须包括源端口号,使目的主机知道应该向何处发送确认报文。2)目的端...原创 2015-04-08 15:35:15 · 28655 阅读 · 0 评论 -
Linux 网络编程——IP 数据报格式详解
IP 数据报首部TCP/IP 协议定义了一个在因特网上传输的包,称为 IP 数据报 (IP Datagram)。这是一个与硬件无关的虚拟包,由首部和数据两部分组成。首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。首都中的源地址和目的地址都是 IP 协议地址。IP 数据报首部的固定部分中的各字段:1)版本:占4位,指IP...原创 2015-04-07 20:52:14 · 47454 阅读 · 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 Protocol,地址解析协议),...原创 2015-04-07 19:28:47 · 43838 阅读 · 2 评论 -
Linux网络编程——原始套接字实例:MAC 头部报文分析
通过《Linux网络编程——原始套接字编程》得知,我们可以通过原始套接字以及 recvfrom( ) 可以获取链路层的数据包,那我们接收的链路层数据包到底长什么样的呢?MAC 头部(有线局域网)注意:CRC、PAD 在组包时可以忽略链路层数据包的其中一种情况:unsigned char msg[1024] = { //--------------组MAC--------14------ 0xb...原创 2015-03-30 20:26:48 · 53177 阅读 · 0 评论 -
Linux网络编程——原始套接字编程
原始套接字编程和之前的 UDP 编程差不多,无非就是创建一个套接字后,通过这个套接字接收数据或者发送数据。区别在于,原始套接字可以自行组装数据包(伪装本地 IP,本地 MAC),可以接收本机网卡上所有的数据帧(数据包)。另外,必须在管理员权限下才能使用原始套接字。原始套接字的创建int socket ( int family, int type, int protocol );参数:family:...原创 2015-03-27 17:47:16 · 53019 阅读 · 7 评论 -
Linux网络编程——原始套接字能干什么?
通常情况下程序员接所接触到的套接字(Socket)为两类:(1)流式套接字(SOCK_STREAM):一种面向连接的 Socket,针对于面向连接的TCP 服务应用;(2)数据报式套接字(SOCK_DGRAM):一种无连接的 Socket,对应于无连接的 UDP 服务应用。从用户的角度来看,SOCK_STREAM、SOCK_DGRAM 这两类套接字似乎的确涵盖了 TCP/IP 应用的全部,因为基于...原创 2015-03-26 20:36:04 · 26856 阅读 · 0 评论 -
Linux 网络编程——并发服务器的三种实现模型
服务器设计技术有很多,按使用的协议来分有 TCP 服务器和 UDP 服务器,按处理方式来分有循环服务器和并发服务器。循环服务器与并发服务器模型在网络程序里面,一般来说都是许多客户对应一个服务器(多对一),为了处理客户的请求,对服务端的程序就提出了特殊的要求。目前最常用的服务器模型有:·循环服务器:服务器在同一时刻只能响应一个客户端的请求·并发服务器:服务器在同一时刻可以响应多个客户端的请求UDP ...原创 2015-05-12 17:40:08 · 94477 阅读 · 9 评论 -
Linux网络编程——浅谈 TCP 三次握手和四次挥手
三次握手在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。 第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认; 第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态...原创 2015-05-10 17:27:45 · 54752 阅读 · 9 评论 -
Linux 网络编程——TCP编程
概述TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP 具有以下特点:1)电话系统服务模式的抽象2)每一次完整的数据传输都要经过建立连接、使用连接、终止连接的过程3)可靠、出错重传、且每收到一个数据都要给出相应的确认,保证数据传输的可靠性TCP 编程的 C/S 架构基于 TCP 的网络编程开发分为服务器端和...原创 2015-05-12 12:33:55 · 39233 阅读 · 6 评论 -
Windows Qt 解析网络数据出现ssl错误
在编译的时候,出现了如下错误:qt.network.ssl: QSslSocket: cannot call unresolved function TLSv1_1_client_method qt.network.ssl: QSslSocket: cannot call unresolved function SSL_CTX_new qt.network.ssl: QSslSocket:原创 2017-01-16 18:51:28 · 2014 阅读 · 1 评论 -
libnet 函数列表
libnet提供的接口函数按其作用可分为四类:* 内存管理(分配和释放)函数* 地址解析函数* 数据包构造函数* 数据包发送函数以下分别列出这些接口函数及其功能(其参数含义简单易懂,不再解释):★内存管理函数单数据包内存初始化:int libnet_init_packet(u_short packet_size, u_char **b原创 2015-04-08 19:43:09 · 2531 阅读 · 0 评论 -
如何理解HTTP协议的 “无连接,无状态” 特点?
HTTP 是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:1、支持客户/服务器模式;2、简单快速;3、灵活;4、无连接;5、无状态。无连接无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是 HTTP 协议产生于互联网,因此服务器需要处理同时面向全世界数原创 2015-03-23 16:00:28 · 30962 阅读 · 4 评论 -
Linux 网络编程—— libnet 使用指南
概述通过《原始套接字实例:发送 UDP 数据包》的学习,我们组 UDP 数据包时常考虑字节流顺序、校验和计算等问题,有时候会比较繁琐,那么,有没有一种更简单的方法呢?答案是:借助 libnet 函数库。libnet 是一个小型的接口函数库,主要用 C 语言写成,提供了低层网络数据包的构造、处理和发送功能。libnet 的开发目的是:建立一个简单统一的网络编程接口以屏原创 2015-04-12 20:23:31 · 36422 阅读 · 0 评论 -
IP 地址介绍
什么是 IP 地址IP 地址(Internet Protocol Address)也称为网间地址、网际地址。IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。IP 地址原创 2015-04-28 16:35:43 · 13632 阅读 · 2 评论 -
广播地址介绍
概述广播地址(Broadcast Address)是专门用于同时向网络中(通常指同一子网)所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机标识段host ID(简称主机 ID) 为全 1 的 IP 地址为广播地址,广播的分组传送给同一个子网的所有计算机。例如,对于10.1.1.0 (255.255.255.0 )网段,其广播地址为10.1.1.255 (255 即为 2转载 2015-05-07 20:54:25 · 36678 阅读 · 2 评论 -
iptables使用说明
一:前言防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。目前市面上比较常见的有3、4层的防火墙,叫网络层的防火墙,还有7层的防火墙,其实是代原创 2015-03-24 19:22:51 · 102430 阅读 · 0 评论 -
netfilter/iptables详解
防火墙的简介防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合,它能增强机构内部网络的安全性。它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可以访问内部服务。它可以根据网络传输的类型决定 IP 包是否可以传进或传出内部网。防火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规则的先后顺序进行一一比较,直到满足其中的一条规则为止,然后依原创 2015-03-24 20:11:58 · 4643 阅读 · 1 评论 -
内网和外网之间的通信
对于初学者而已,我们学习的网络编程(如TCP,UDP编程),我们通常都是在局域网内进行通信测试,有时候我们或者会想,我们现在写的内网网络数据和外网的网络数据有什么不同,我们内网的数据是如何走出外网的呢?再者,我们大多人都是使用宽带上网,结果发现,A 和 B 的局域网 IP 都是192.168.31.11,当他们都访问百度浏览网页时,百度服务器回复数据时,如何区分是给 A 还是给 B 呢原创 2015-04-26 11:46:40 · 67692 阅读 · 6 评论 -
TCP 通信过程中各步骤的状态
对于上面的图 N 多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻的认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解析一下,以便加强记忆!不过在这之前,先回顾一下 TCP 建立连接的三次握手过程,以及关闭连接的四次握手过程,详情请看《浅谈 TCP 三次握手和四次挥手》。原创 2015-05-11 19:25:06 · 22078 阅读 · 2 评论 -
IP 分片丢失重传
尽管 IP 分片看起来是是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报。为什么会发生这种情况呢?因为 IP 层本身没有超时重传的机制——由更高层来负责超时和重传( TCP 有超时和重传机制,但 UDP 没有。一些 UDP 应用程序本身也执行超时和重传)。当来自 TCP 报文段的某一片丢失后,TCP 在超时后重发整个 TCP 报文段,该报文段对应于一份 IP 数据原创 2015-04-08 16:02:18 · 3931 阅读 · 0 评论 -
杀毒软件和防火墙的区别
在许多人的思想中,特别是电脑的初学者,都对防火墙有一种错误的认识。即分不清什么是防火墙以及杀毒软件,认为杀毒软件就可以代替防火墙,所以就掉以轻心,成了网络的受害者。其实杀毒软件和防火墙有很大的不同。虽然两者的共同目标都是保护电脑的安全,都是杀“毒”,(相对于杀毒软件工作范围中的病毒来说,防火墙要把互联网中任何对 PC 有威胁的“毒”程序隔离,这也是一种“毒”),但是在工作区域和在保卫电原创 2015-03-24 16:17:24 · 68881 阅读 · 1 评论 -
关于URL编码
作者:阮一峰 本文转自:http://www.ruanyifeng.com/blog1. 问题的由来URL就是网址,只要上网,就一定会用到。 一般来说,URL只能使用英文字母、阿拉伯数字和某些标点符号,不能使用其他文字和符号。比如,世界上有英文字母的网址”http://www.abc.com“,但是没有希腊字母的网址”http://www.aβγ.com”(读作阿尔法-贝塔-伽玛.com)。这是转载 2017-01-07 17:52:24 · 4885 阅读 · 0 评论 -
HTTP协议浅析(下): 使用HTTP协议实现通信
1. 概述服务器的开发不容易,尤其是开发高性能、稳定性好服务器,更加不容易,因此人们尝试更好简单的方式来开发软件。在服务器方面,使用Web服务器,采用HTTP协议来代替底层的socket,是常见的选择。采用HTTP协议更加除了能得到稳定的服务器支持外,更加可以兼容各种客户端(手机、PC、浏览器)等等。这样实现了一个服务器之后,多个客户端可以通用。2.通信过程HTTP 协议采用请求/响应模型。客户端向原创 2016-12-28 16:18:23 · 13904 阅读 · 4 评论 -
HTTP协议浅析(上):简介
1. Web服务器WWW是 World Wide Web (环球信息网)的缩写,也可以简称为 Web,中文名字为“万维网”。Web服务器(也称WWW服务器)一般指网站服务器,主要功能是提供网上信息浏览服务。目前最主流的三个Web服务器是Apache、Nginx、IIS。一些使用C/C++开发的开源的http服务器列表在这里:http://www.oschina.net/project/tag/106原创 2016-12-28 11:04:55 · 1519 阅读 · 0 评论 -
HTTP协议浅析(中):请求报文和响应报文
GET:当客户端要从服务器中读取某个资源时,使用GET 方法。GET 方法要求服务器将URL 定位的资源放在响应报文的数据部分,回送给客户端,即向服务器请求某个资源。使用GET方法时,请求参数和对应的值附加在 URL 后面,利用一个问号(“?”)代表URL 的结尾与请求参数的开始,传递参数长度受限制,因此GET方法不适合用于上传数据。通过GET方法来获取网页时,参数会显示在浏览器地址栏上,因此保密性很差。原创 2016-12-28 11:55:58 · 16264 阅读 · 0 评论 -
Linux多播问题(No such device)解决方法
Linux多播问题(No such device)解决方法:这主要和当前的网络配置有关,因为多播IP地址没有加入到路由表中。解决方法:把需要用到的多播地址(如224.0.0.88)加入到路由表中,命令如下:sudo route add -net 224.0.0.88 netmask 255.255.255.255 eth0224.0.0.88:为当前使用的多播IP地址eth0:为当前使用的有效网卡其它辅助命令:sudo route del -net 224.0.0.88 netmask 25原创 2015-10-11 19:38:36 · 22028 阅读 · 3 评论