自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

知秋一叶

这世界里的每一个人,每一个东西,包括高山大海,刀剑风云,其本质都是一串数字流。...

原创 Python学习前传 —— Python网络爬虫

     原来一直是Linux C 开发,现在开始学习另一门面向过程的语言 —— Python。     学习一门语言,重要的在于思想,现在就以Linux C 开发者的角度来学习Python。我们先不讲Python基础,我们直接来看一段网络爬虫代码,看一下Python语言的特点。那么什么是网络爬虫...

2018-03-11 23:14:14 3787 8

转载 Linux DBUS总线

D-Bus三层架构 D-Bus是一个为应用程序间通信的消息总线系统, 用于进程之间的通信。它是个3层架构的IPC 系统,包括: 1、函数库libdbus ,用于两个应用程序互相联系和交互消息。 2、一个基于libdbus构造的消息总线守护进程,可同时与多个应用程序相连,并能把来自...

2018-03-11 20:48:23 4174 0

原创 语音业务VOIP开发之SIP协议篇(三) —— SIP报文解析

下面深入了解SIP报文:      SIP是基于一个类似HTTP协议的请求应答的通讯模式。每一个通讯都包含对某个功能的请求,并且起码需要一个应答。在这个应答中,Alice的软电话发送一个含有Bbo的SIP URI抵制的INVITE通讯请求。INVITE是一个SIP请求的例子,表示请求方(Alic...

2018-03-11 20:45:43 7174 0

原创 语音业务VOIP开发之SIP协议篇(二) —— SIP报文浅析

一、SIP消息      SIP消息是SIP客户终端和服务器之间通信的的基本信息单元。SIP消息基于文本,采用UTF-8编码(RFC 2279)中的ISO 10646字符集。SIP协议借鉴了HTTP协议(RFC 2068)的设计思想,有很多消息格式与之相同。SIP协议支持UDP传输协议 ...

2018-03-11 20:22:51 7144 2

原创 语音业务VOIP开发之SIP协议篇(一) —— SIP基本场景分析

一、SIP业务基本知识 1、业务介绍      会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始、管理和终止网络中的语音和视频会话,具体地说就是用来生成、修改和终结一个或多个参与者之间的会话。SIP的业务模式是一个点对点协议,其中有两个要素——SI...

2018-03-11 20:10:44 22138 1

原创 Linux 网络协议栈开发基础篇(十三)——TCP/IP协议各报文头格式

一、TCP报文        TCP是TCP/IP体系中面向连接的运输层协议,提供全双工的和可靠交付的服务。TCP报文段的格式如下图所示 源端口和目的端口:各占2个字节,是运输层与应用层的服务接口。 序号:占4个字节。TCP连接传送的数据流中的每一个字节都被编上一...

2018-02-07 23:14:27 2133 1

原创 Linux 网络协议栈开发基础篇(十二)—— 使用wireshark分析TCP/IP协议中TCP包头的格式

摘要: 本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析。 一、概述 TCP是面向连接的可靠传输协议,两个进程互发数据之前需要建立连接,这里的连接只不过是端系统中分配的一些缓存和状态变量,...

2018-02-07 22:38:37 757 0

原创 Linux 网络协议栈之内核锁(九)—— RCU锁机制

一、 引言 众所周知,为了保护共享数据,需要一些同步机制,如自旋锁(spinlock),读写锁(rwlock),它们使用起来非常简单,而且是一种很有效的同步机制,在UNIX系统和Linux系统中得到了广泛的使用。但是随着计算机硬件的快速发展,获得这种锁的开销相对于CPU的速度在成倍地增加,原...

2018-02-07 22:34:16 925 0

原创 Linux 网络协议栈之内核锁(八)—— RCU锁

RCU的设计思想比较明确,通过新老指针替换的方式来实现免锁方式的共享保护。但是具体到代码的层面,理解起来多少还是会有些困难。在《深入Linux设备驱动程序内核机制》第4章中,已经非常明确地叙述了RCU背后所遵循的规则,这些规则是从一个比较高的视角来看,因为我觉得过多的代码分析反而容易让读者在细节上...

2018-02-05 23:18:39 535 0

原创 Linux 网络协议栈之内核锁(七)—— 读写自旋锁

读写自旋锁(rwlock)是一种比自旋锁粒度更小的自旋锁机制,它保留了“自旋”的概念。 但是在写操作方面,只能最多有一个写进程,在读方面,同时可拥有多个执行单元,当然读和写也不能同时进行。 一句话:防写不防读 读写自旋锁的实现原理,它其实是自旋锁的升级版。同样,我们先看看它能...

2018-02-05 23:14:29 567 3

原创 Linux 网络协议栈之内核锁(六)—— 互斥锁、读写锁 、 自旋锁和RCU锁简述

互斥锁 mutex: 在访问共享资源之前对进行加锁操作,在访问完成之后进行解锁操作。  加锁后,任何其他试图再次加锁的线程会被阻塞,直到当前进程解锁。  如果解锁时有一个以上的线程阻塞,那么所有该锁上的线程都被编程就绪状态,  第一个变为就绪状态的线程又执行加锁操作,那么其他的线程又会...

2018-02-05 23:09:29 532 0

原创 Linux 网络协议栈之内核锁(五)—— 自旋锁在抢占(非抢占)单核和多核中的作用

一、自旋锁的实现 linux上的自旋锁有三种实现: 1. 在单cpu,不可抢占内核中,自旋锁为空操作。 2. 在单cpu,可抢占内核中,自旋锁实现为“禁止内核抢占”,并不实现“自旋”。 3. 在多cpu,可抢占内核中,自旋锁实现为“禁止内核抢占” + “自旋”。 关于抢占式内核与非抢占式内核:...

2018-02-05 23:00:56 1045 0

原创 Linux 网络协议栈之内核锁(四)—— 进程上下文与中断上下文的理解

一.什么是内核态和用户态 内核态:在内核空间执行,通常是驱动程序,中断相关程序,内核调度程序,内存管理及其操作程序。 用户态:用户程序运行空间。 二.什么是进程上下文与中断上下文 1.进程上下文: (1)进程上文:其是指进程由用户态切换到内核态是需要保存用户态...

2018-02-05 23:00:29 747 0

原创 Linux 网络协议栈之内核锁(三)—— Linux内核抢占和进程调度总结

1 用户抢占 内核即将返回用户空间的时候,如果need resched标志被设置,会导致schedule()被调用,此时就会发生用户抢占。在内核返回用户空间的时候,它知道自己是安全的。所以,内核无论是在从中断处理程序还是在系统调用后返回,都会检查need resched标志。如果它被设置了,...

2018-02-05 22:40:19 528 0

原创 Linux 网络协议栈之内核锁(二)—— 内核抢占

一、内核抢占     早期的Linux核心是不可抢占的。它的调度方法是:一个进程可以通过schedule()函数自愿地启动一次调度。非自愿的强制性调度只能发生在每次从系统调用返回的前夕以及每次从中断或异常处理返回到用户空间的前夕。但是,如果在系统空间发生中断或异常是不会引起调度的。这种方式使内核...

2018-02-05 22:36:00 574 0

原创 Linux 网络协议栈之内核锁(一)—— 进程调度

学习内核锁之前,我们先了解一下关于内核的基础知识,以便更好的学习内核锁的使用!       下面我们先学习一下进程调度: 一、进程调度 调度什么时候发生?即:schedule()函数什么时候被调用? 调度的发生有两种方式: 1、主动式 在内核中直接调用schedule()。...

2018-02-05 22:11:13 885 0

原创 Linux 网络协议栈开发代码分析篇之数据收发(二) —— dev_queue_xmit()函数

当所有的信息都准备好了之后,例如,出口设备,下一跳的地址,以及链路层地址。就会调用dev.c文件中的dev_queue_xmin函数,该函数是设备驱动程序执行传输的接口。也就是所有的数据包在填充完成后,最终发送数据时,都会调用该函数。      Dev_queue_xmit函数只接收一个skb_...

2018-01-28 12:37:48 1747 0

原创 Linux 网络协议栈开发代码分析篇之数据收发(一) —— netif_receive_skb()函数

提到网络协议栈,数据的收发是核心,我们先来看下数据的接收函数 netif_receive_skb()      先统一介绍下数据收发            对于linux内核来说,网络报文由网络设备来进行接收。设备驱动程序从网络设备中读取报文,通过内核提供的网络接口函数,将报文传递到...

2018-01-28 12:19:37 5327 1

转载 Linux 网络协议栈开发代码分析篇之VLAN(三)—— VLAN收发处理

转自:http://blog.chinaunix.net/uid/28541347/year-201606-list-1.html VLAN报文格式    基于802.1Q的VLAN帧格式如下: Type:长度为2字节,取值为0x8100,表示此帧的类型为...

2018-01-28 11:30:49 3538 0

原创 Linux 网络协议栈开发代码分析篇之VLAN(二)—— Linux下VLAN功能的实现概述

1.Linux网络栈下两层实现 1.1简介     VLAN是网络栈的一个附加功能,且位于下两层。首先来学习Linux中网络栈下两层的实现,再去看如何把VLAN这个功能附加上去。下两层涉及到具体的硬件设备,日趋完善的Linux内核已经做到了很好的代码隔离,对网络...

2018-01-28 11:26:30 883 0

原创 Linux 网络协议栈开发代码分析篇之VLAN(一)—— vlan 功能模块分析

整理自:http://blog.csdn.net/lickylin/article/details/41832967 本文代码基于linux3.14       Vlan即虚拟局域网,一个vlan能够模拟一个常规的交换网络,实现了将一个物理的交换机划分成多个逻辑的交换网络。而不同的vlan...

2018-01-28 11:22:31 1136 0

原创 Linux 网络协议栈开发基础篇(十一)—— 组播IGMP Snooping理论知识详解

IGMP Snooping配置在二层组播设备上,通过对上游三层设备和下游用户之间的IGMP报文进行分析,建立和维护二层组播转发表,实现组播数据报文在数据链路层的按需分发。 IGMP Snooping (Internet Group Management Protocol Snooping)是一种...

2018-01-27 19:51:34 1372 0

原创 Linux 网络协议栈开发基础篇(十)—— 组播(Multicast)基础

一、组播(Multicast)传输        在发送者和每一接收者之间实现点对多点网络连接。        如果一台发送者同时给多个的接收者传输相同的数据,也只需复制一份的相同数据包。它提高了数据传送效率。减少了骨干网络出现拥塞的可能性。 单播(unicast): 是指封包在计算机网络的...

2018-01-27 19:49:28 2066 0

原创 Linux 网络协议栈开发基础篇(九)—— VID与PVID

一、PVID的作用及和VID的区别        PVID和VID经常出现于二、三层交换机里,由于PVID和VID的设置不合理,造成VLAN划分变得混乱。        PVID是交换机上的概念,说的是进入该端口的报文如果没有打vlan id就按PVID的值打上,VID是报文上的vlan ta...

2018-01-27 15:41:19 1553 0

原创 Linux 网络协议栈开发基础篇(八)—— VLAN原理概述

一、vlan的含义       局域网LAN的发展是VLAN产生的基础,因而先介绍一下局域网LAN       由Hub、网桥或交换机等网络设备连接同一网段内的所有节点形成局域网(LAN),通常是一个单独的广播域。处于同一个局域网LAN之内的网络节点之间可以直接通信,处于不同局域网段的设备之间...

2018-01-27 14:54:01 581 0

原创 Linux 网络协议栈开发基础篇(七)—— 网桥br0

一、桥接的概念       简单来说,桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发。      交换机就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。于是,与交换机相连的若干主机就能...

2018-01-27 14:19:03 1883 0

原创 Linux 网络协议栈开发基础篇(六)—— NAT原理介绍

介绍NAT之前,我们需要先理解下公有地址及私有地址的概念:         IP地址分为两部分,网络号和主机号,这种分法应用在私有和公有IP地址上。一个局域网中,为了该局域网的安全,我们应用了私有IP地址,为了和Internet中的其他主机进行通信,我们用的私有IP地址必须为: A级:10.0....

2018-01-25 21:51:27 1025 0

原创 Linux 网络协议栈开发基础篇(五)—— 数据链路层协议PPP

PPP协议 PPP协议是二层(数据链路层)协议,常用于拨号上网时客户端向服务器获取IP地址。PPP支持在各种物理类型的点对点串行线路上传输上层协议报文。它具有很多特性,比如支持多协议、提供可选的身份认证服务、以各种方式压缩数据、支持动态地址协商、支持多链路捆绑等等。 PPP协议帧格式 P...

2018-01-25 21:24:39 435 0

原创 Linux 网络协议栈开发基础篇(四)—— IP协议补充协议ARP

1.学习ARP前要了解的内容 建立TCP连接与ARP的关系 应用接受用户提交的数据,触发TCP建立连接,TCP的第一个SYN报文通过connect函数到达IP层,IP层通过查询路由表:   如果目的IP和自己在同一个网段:   当IP层的ARP高速缓存表中存在目的IP对应的MAC地址时,则...

2018-01-25 21:21:42 446 0

原创 Linux 网络协议栈开发基础篇(三)—— TCP对比UDP

TCP与UDP基本区别   1.基于连接与无连接   2.TCP要求系统资源较多,UDP较少;    3.UDP程序结构较简单    4.流模式(TCP)与数据报模式(UDP);    5.TCP保证数据正确性,UDP可能丢包    6.TCP保证数据顺序,UDP不保证     UDP应用场景: ...

2018-01-25 21:10:38 399 0

原创 Linux 网络协议栈开发基础篇(二)—— TCP协议浅析

一、TCP 协议的作用 互联网由一整套协议构成。TCP 只是其中的一层,有着自己的分工。 (图片说明:TCP 是以太网协议和 IP 协议的上层协议,也是应用层协议的下层协议。) 最底层的以太网协议(Ethernet)规定了电子信号如何组成数据包(packet),解决了子网内部的点对点通信...

2018-01-25 21:02:52 437 0

原创 Linux 网络协议栈开发基础篇(一)—— TCP/IP协议报文格式解析

一、传输层报文 1、TCP数据包的头 typedef struct _TCP_HEADER { USHORT nSourPort ; // 源端口号16bit USHORT nDestPort ; // 目的端口号16bit UINT nSequNum ; // 序...

2018-01-25 20:57:31 2820 0

原创 Linux 网络协议栈开发番外篇(八)—— 策略路由

一、linux系统中路由表table       linux最多可以支持255张路由表,每张路由表有一个table id和table name。其中有4张表是linux系统内置的: 1)table id = 0      系统保留。 2)table id = 255      本地路由表,表名为l...

2018-01-25 20:35:31 488 0

原创 Linux 网络协议栈开发番外篇(七)—— Linux下路由配置

先说一些关于路由的基础知识: 1)路由概念 路由:   跨越从源主机到目标主机的一个互联网络来转发数据包的过程 路由器:能够将数据包转发到正确的目的地,并在转发过程中选择最佳路径的设备 路由表:在路由器中维护的路由条目,路由器根据路由表做路径选择 直连路由:当在路由器上配置了接口的IP地...

2018-01-25 19:54:06 852 0

原创 Linux 网络协议栈开发番外篇(六)—— Windows路由表详解

一、查看Windows路由表   路由表是Windows的TCP/IP协议栈的一个重要的部分。但是,路由表不是Windows操作系统向普通用户显示的东西。如果你要看到这个路由表,你必须要打开一个命令提示符对话框,然后输入“ROUTE PRINT”命令。结果如下: 路由详解: ...

2018-01-25 19:47:19 295 0

原创 Linux 网络协议栈开发番外篇(五)—— Linux路由表详解

linux 路由表维护 查看 Linux 内核路由表 使用下面的 route 命令可以查看 Linux 内核路由表。 # route Destination Gateway Genmask Flags Metric Ref...

2018-01-25 18:48:30 420 0

原创 Linux 网络协议栈开发番外篇(四)—— Wireshark-ICMP数据报分析

ICMP是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。    ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议,属于网络层协议。    ICMP报文是在IP数据报内被传输的。在...

2018-01-24 23:17:42 292 0

原创 Linux 网络协议栈开发番外篇(三)—— ping命令执行过程详解

先看拓朴图:  在这里讲ping的两情况:一种是同一网段内,一种是跨网段的ping。 一、同一网段内 首先,如果主机A,要去ping主机B,那么主机A,就要封装二层报文,他会先查自己的MAC地址表,如...

2018-01-24 21:37:01 615 0

原创 Linux 网络协议栈开发番外篇(二)—— list_head 学习

在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通用接口很容易实现代码的重用,有点类似于C++的继承机制(希望有机会写篇文章研究...

2018-01-18 22:28:07 401 0

转载 Linux 网络协议栈开发番外篇(一)—— hlist 详解

http://blog.csdn.net/hs794502825/article/details/24597773 在Linux内核中,hlist(哈希链表)使用非常广泛。本文将对其数据结构和核心函数进行分析。 和hlist相关的数据结构有两个:hlist_head 和 hlist_nod...

2018-01-16 21:44:25 339 0

提示
确定要删除当前文章?
取消 删除