Net Working
文章平均质量分 90
dolphin98629
这个作者很懒,什么都没留下…
展开
-
Linux网络编程:原始套接字 SOCK_RAW, IPV6 rawsocket
https://stackoverflow.com/questions/31419727/how-to-send-modified-ipv6-packet-through-raw-socket比较新的内核才支持 1234567 socket(fd, SOCK_RAW, IPPROTO_UDP); // 指定 TCP/UDP/ICMPint val = 1;ret = setsockopt(test->state.sockfd, IPPROTO转载 2021-06-04 15:19:55 · 2100 阅读 · 1 评论 -
Windows Socket I/O模型 以及 Linux Epoll模型
本文简单介绍了当前Windows支持的各种Socket I/O模型,如果你发现其中存在什么错误请务必赐教。 一:select模型 二:WSAAsyncSelect模型 三:WSAEventSelect模型 四:Overlapped I/O 事件通知模型 五:Overlapped I/O 完成例程模型 六:IOCP模型 老陈有一个在外地工作的女儿,不能经常回来,老陈和她通过信件联系。他们的信转载 2010-01-14 12:38:00 · 965 阅读 · 1 评论 -
数据报的接收过程详解---从网卡到L3层(非NAPI,即接收数据采用中断方式)
刚来实验室的时候主要看的就是数据报在协议栈的具体传输过程,当时有过记录,但是很凌乱,最近又回头看了看相关知识和内核源代码,算是理清了思路,特整理在此.本篇笔记写的是2.4中数据报的接收过程,从网卡到网络层的具体路线,2.4中大部分网卡采用的是中断的方式接收数据(好像是从2.5以后开始支持 NAPI的,不太确定),本篇笔记总结的是非NAPI,即采用中断接受数据的路线.ok,开始进入主题.当网卡接收到转载 2010-01-14 11:58:00 · 908 阅读 · 0 评论 -
封包擷取 -- tcpdump
tcpdump說實在的,對於 tcpdump 這個軟體來說,你甚至可以說這個軟體其實就是個駭客軟體, 因為他不但可以分析封包的流向,連封包的內容也可以進行『監聽』, 如果你使用的傳輸資料是明碼的話,不得了,在 router 上面就可能被人家監聽走了! 很可怕吶!所以,我們也要來瞭解一下這個軟體啊!(註:這個 tcpdump 必須使用 root 的身份執行)[root@lin转载 2010-03-04 12:09:00 · 794 阅读 · 0 评论 -
网络基础 - 常見的通訊協定 IP/TCP/UDP/ICMP
IP 封包的表頭現在我們知道 IP 這個資料封包 (packet) 是需要放置在 MAC 訊框裡面的,所以當然不能比 MAC 所能容許的最大資料量還大!但是 IP 封包其實可以到 65535 bytes 那麼大的吶! 那麼 IP 封包除了資料之外,他的表頭資料 (head) 是長怎樣呢? 在圖三的 MAC 訊框表頭裡面最重要的莫過於那個網路卡硬體位址, 那麼在 IP 表頭裡面當然就以來源與目標转载 2010-03-04 13:45:00 · 1668 阅读 · 0 评论 -
网络基础 - OSI / IP
OSI 七層協定目前我們的主機只要能夠取得正確的 IP 與相關參數設定時,你就可以連上 Internet 了, 根本不管你的網路硬體是乙太網路還是光纖網路。而且,你主機的作業系統是啥, Internet 也是不管的! 這是為什麼呢?因為網路的傳輸是有分層架構的,每個分層 (layer) 是可以獨立的。 同時每個分層都有獨自的標準可供依循,例如在網路媒體的硬體部分就可以參考 IEEE 的 802转载 2010-03-04 13:30:00 · 584 阅读 · 0 评论 -
Linux网络设备驱动结构概述
网络设备驱动相比字符型设备的驱动要复杂一些,除了总体上驱动的框架有一些相似外,有很多地方都是不同,但网络设备驱动有一个很大的特点就是有固定的框架可以遵循,具体的框架会在后边详细的叙述,这里主要分析网络设备驱动的结构,和整个tcp/ip网络结构一样,整个网络设备驱动也是一个分层的结构。具体如下: 1.网络协议接口层 在网络协议接口层,只提供了两个抽象函数dev_queue_xmit转载 2010-01-14 12:05:00 · 1063 阅读 · 0 评论 -
Linux I/O 模型---I/O复用:Select和Poll函数
在前一章中,我们遇到一个问题就是,客户端阻塞在了从标准输入中读取数据,与此同时,服务器由于某种原因要求关闭连接给客户端发送了一个FIN,而客户端只有从标准输入读到数据返回后才能知道连接已关闭。在这一章中介绍的I/O复用可以很好的解决这个问题。1.I/O模型a. Unix下共有五种I/O模型阻塞I/O非阻塞I/OI/O复用(select和poll)信号驱动I/O(SIGI转载 2010-01-14 12:31:00 · 1567 阅读 · 0 评论 -
Linux2.6内核epoll 网络编程
(1)导言: 首 先,我强烈建议大家阅读Richard Stevens著作《TCP/IP Illustracted Volume 1,2,3》和《UNIX Network Programming Volume 1,2》。虽然他离开我们大家已经5年多了,但是他的书依然是进入网络编程的最直接的道路。其中的3卷的《TCP/IP Illustracted》卷1是必读-如果你不了解tcp协议各个选项的详细定转载 2010-03-26 10:47:00 · 474 阅读 · 0 评论 -
sk_buff完全注释(skbuff.c)
/* * sk_buff 完全注释 * 金伟注释 blog -- http://jinweidavid.cublog.cn 转载请注明 *//* * 本文件取自linux 2.6.13内核的skbuff.c *//* * Routines having to do with the 'struct sk_buff' memory handlers. *转载 2013-11-19 12:27:54 · 2398 阅读 · 0 评论 -
不同情况下构造skb数据包的实现
在我这个网络接口的程序中(can0),其实难点就是怎样组包。怎样在原来数据包的基础加上自己的数据,怎样构造ip头,怎样构造udp头。调试了两个星期,终于是调通了,在这个过程中,通过看内核源代码和自己组包的尝试,大概对组包的方法有了些了解,记录在此,留做备忘,也希望能给需要这方面信息的朋友一点帮助吧。1,正常网卡收到数据包后的情况:她的工作就是剥离mac头,然后给一些字段赋值,最后调用n转载 2013-11-19 12:29:18 · 1205 阅读 · 0 评论 -
IP XFRM配置:利用linux kernel自带的IPSec实现,手动配置IPSec
1、拓扑192.168.18.101 192.168.18.1022、配置192.168.18.101ip xfrm state add src 192.168.18.101 dst 192.168.18.102 proto esp spi 0x00000301 mode tunnel auth md5 0x96358c90783bbfa3d7b196ceabe053转载 2013-11-08 16:23:09 · 2927 阅读 · 1 评论 -
IP数据包的输入与输出
IP层主要函数之间的调用关系如下图所示:上面的图主要是拷贝的《Linux内核源码剖析----TCP/IP实现上册》中的图11.3,原图中有部分错误,所以这里重新绘制了一下,并且去掉了一些冗余的部分。下面简述一下数据包传递的大致过程:一、IP数据包的输入ip_rcv()是网络层(IPv4,以下同)接收数据包的入口函数,链路层在接收到数据包后调用netif_receiv转载 2013-11-08 10:09:16 · 1943 阅读 · 0 评论 -
Linux如何做到将外来数据包DNAT到Loopback
前面写了篇文章《使用iptables为何不能将外部进入的包NAT到127.0.0.1》,牵扯到了很多知识,最终的结论就是不能那么做。这个结论让人有些不舒服,说了半天就是阐述它为何做不到,如果我非要将包NAT到loopback呢。比如为了不将端口以及地址暴露给外部,我就是想让代理服务侦听127.0.0.1这个地址,有没有什么办法做到呢? 因为你用的是Linux,答案无疑是肯定的,所转载 2013-12-14 17:17:47 · 840 阅读 · 0 评论 -
虚拟网卡 TUN/TAP 驱动程序设计原理
简介虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装。本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路。tun/tap驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用tun/tap驱动转载 2013-12-17 14:11:05 · 747 阅读 · 0 评论 -
网络虚拟化技术: TUN/TAP MACVLAN MACVTAP
TUN 设备TUN 设备是一种虚拟网络设备,通过此设备,程序可以方便得模拟网络行为。先来看看物理设备是如何工作的:所有物理网卡收到的包会交给内核的 Network Stack 处理,然后通过 Socket API 通知给用户程序。下面看看 TUN 的工作方式:普通的网卡通过网线收发数据包,但是 TUN 设备通过一个文件收发数据包。所有对这个文件的写操作会通过 TUN转载 2013-12-17 14:07:37 · 1660 阅读 · 0 评论 -
Linux内核中的IPSEC实现(3)
Java代码 5. 安全策略(xfrm_policy)处理 本节所介绍的函数都在net/xfrm/xfrm_policy.c中定义。 5.1 策略分配 策略分配函数为xfrm_policy_alloc(), 该函数被pfkey_spdadd()函数调用 struct xfrm_policy *xfrm_policy_allo转载 2013-12-31 13:42:43 · 1624 阅读 · 0 评论 -
Linux内核中的IPSEC实现(6)
Java代码 8. 安全协议 与IPSEC相关的安全协议是AH(51)和ESP(50), IPSEC使用这两个协议对普通数据包进行封装, AH只认证不加密, ESP既加密又认证, 当ESP和AH同时使用时, 一般都是先进行ESP封装, 再进行AH封装, 因为AH是对整个IP包进行验证的, 而ESP只验证负载部分. 在IPV4下的AH和ESP的协议实现在转载 2013-12-31 13:46:14 · 1514 阅读 · 0 评论 -
内核网络子系统的实现
1 内核中分层模型的实现 由于内核网络子系统处理大量特定于协议的细节和微妙地方,只有分层[每层功能单一]并通过层层之间的大量的标准化的函数指针这种架构方式实现,才能尽可能的简洁高效,但也使得代码路径变得不不清晰自顶向下分层:用户空间 应用程序+c标准库内核应用层 struct socket[面向用户]转载 2014-01-01 10:17:40 · 735 阅读 · 0 评论 -
主机到网络层的内核实现-1 [内核为分组接收:NAPI框架和传统框架]
本文探讨3点: 硬件抽象视图[由各种网卡驱动程序提供的、由网络实现代码使用的接口] 主机到网络层-->network层 network层 -->主机到网络层0 网络信息流:-A驱动程序 --A 硬件 B特定硬件[以太网适配器] -- B特定硬件驱动程序 -- 通用网络设备结构 -- 内核IP层-注:内核提供两个驱动程序框架(isa-skeleton.c和pc转载 2014-01-01 10:19:24 · 1096 阅读 · 0 评论 -
Linux内核中的IPSEC实现(1)
Java代码 1. 前言 在Linux2.6内核中自带了IPSEC的实现,这样就不用象2.4那样打补丁来实现了。该实现包括以下几个部分: PF_KEY类型套接口, 用来提供和用户层空间进行PF_KEY通信,代码在net/key目录下,前面已经介绍过;安全联盟SA和安全策略SP管理,是使用xfrm库来实现的,代码在net/xfrm/目录下定义;ESP,AH等协议实现,转载 2013-12-31 13:37:40 · 4770 阅读 · 0 评论 -
主机到网络层的内核实现-2 [内核为分组接收:NAPI框架和传统框架]
1 内核为分组实现的传统框架实现过程详解1.1 内核初始化网络时对每个cpu的分组接收队列初始化初始化每cpu softnet_data结构 以及 初始化传统框架对应的伪网络设备/* * Initialize the DEV module. At boot time this walks the device list and * unhooks any devices t转载 2014-01-01 10:21:17 · 744 阅读 · 0 评论 -
Linux内核中的IPSEC实现(7)
9. IPSEC封装流程 IPSEC 数据包的封装过程是在数据包发出前完成的, 是和路由选择密切相关的, 根据前面的发出分析可知封装是通过对数据设置安全路由链表来实现的, 因此对数据包的IPSEC封装流程可以简单描述如下: 1) 对于进入的数据包, 进行路由选择, 如果是转发的, 进入路由输入, 然后查找安全策略检查是否需要IPSEC封装, 如果需要封装, 就查找和创建相关的安全路由, 进入路由输转载 2013-12-31 13:48:14 · 1842 阅读 · 0 评论 -
Linux内核中的IPSEC实现(4)
Java代码 6. XFRM的其他操作 6.1 HASH处理 关于HASH值的计算方法主要在net/xfrm/xfrm_hash.h中定义: // IPV4地址HASH static inline unsigned int __xfrm4_addr_hash(xfrm_address_t *addr) { // 就是地址本身转载 2013-12-31 13:40:09 · 1553 阅读 · 0 评论 -
Linux内核中的IPSEC实现(5)
Java代码 7. IPV4下的xfrm支持处理 在xfrm中各种和地址相关的操作是和协议族相关的, 因此这部分的具体实现就放在相关的协议族实现中, 然后通过状态和策略信息结构来指引到实际的操作中,完成对普通数据包的IPSEC包装或对IPSEC包的解封装。 7.1 IPV4下的xfrm策略 IPV4下的xfrm策略在net/ipv4/xf转载 2013-12-31 13:45:12 · 1672 阅读 · 0 评论 -
互联网络层的内核实现[内核中的路由机制]
1 网络层简介网络层与网络适配器的硬件性质的关系体现在:该层负责在互不连接的系统间转发和路由[显然分组会通过很多中间节点]分组,查找最佳路由并选择向适当的网络设备发送分组,也涉及对底层地址族的处理,还有主机到网络层任务的指派,比如为了满足不同网卡硬件的传输需求[不同网卡硬件其传输协议规定的最大传输单元长度不一致],ip层必须将较大的分组划分为较小的单位,有接收方重新组合2 IP协议首部主要转载 2014-01-01 10:22:25 · 1429 阅读 · 0 评论 -
Linux 内核IP和UDP检验和计算
· IP checksuma. 接收报文struct iphdr *iph = ip_hdr(skb);if (unlikely(ip_fast_csum((u8 *)iph, iph->ihl)))goto checksum_error; b. 发送报文ip_send_check(iph);{转载 2013-12-26 17:01:28 · 1182 阅读 · 0 评论 -
linux下tcp选项TCP_DEFER_ACCEPT详解
TCP_DEFER_ACCEPT这个选项可能大家都知道,不过我这里会从源码和数据包来详细的分析这个选项。要注意,这里我所使用的内核版本是3.0.首先看man手册中的介绍(man 7 tcp):TCP_DEFER_ACCEPT (since Linux 2.4)Allow a listener to be awakened only when data arrives on转载 2014-01-15 12:40:09 · 3896 阅读 · 0 评论 -
VRF技术-原理简介
VRF技术白皮书1 原理简介近年来网络VPN技术方兴未艾,日益成为业界关注的焦点。根据VPN实现的技术特点,可以把VPN技术分为以下三类:传统VPN:FR和ATMCPE-based VPN:L2TP和IPSec等Provider Provisioned VPNs ( PP-VPN ):MPLS L2VPN和MPLS L3VPN。本文转载 2014-02-18 14:38:36 · 63412 阅读 · 0 评论 -
arp_announce和arp_ignore 详细解说
arp_announce和arp_ignore 详细解说版本V1.0时间2012-06-16版权GPL作者itnihao说明,本文档来自网络整理和个人理解综合整理原文地址http://itnihao.blog.51cto.com/1741976/75247 lvs在DR模式下需要关闭arp,设置参数的意思可以参考下文arp_announce和arp_igno转载 2014-03-28 12:26:19 · 1369 阅读 · 0 评论 -
Linux服务器集群系统(一)
LVS项目介绍章文嵩 (wensong@linux-vs.org)2002 年 3 月本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目的产生背景和目标,并描述了LVS服务器集群框架及目前提供的软件,列举LVS集群系统的特点和一些实际应用,最后,本文谈论了LVS项目的开发进展和开发感触。1. 背景当今计算机技术已进入以网络为中心的计算时转载 2014-03-28 12:45:15 · 533 阅读 · 0 评论 -
Linux服务器集群系统(三)
LVS集群中的IP负载均衡技术章文嵩 (wensong@linux-vs.org) 2002 年 4 月本文在分析服务器集群实现虚拟网络服务的相关技术上,详细描述了LVS集群中实现的三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)的工作原理,以及它们的优缺点。1.前言在 前面文章中,讲述了可伸缩网络服务的几种结构,它们都需要一个前端的负载调度器(或者多个进行主从备转载 2014-03-28 12:46:30 · 715 阅读 · 0 评论 -
dst_entry,neighbour,和hh_cache之间的关系
由ip_finish_output2处理./* *ip_finish_output2:把做为参数传进来的skb传到链路层.此时的skb没有L2 header,但是需要的路由信息已经知道. * 如果可以找到dst_entry对应的hh_cache.则把路由需要的L2头加到skb中.然后调用相关函数hh->hh_output. * 如果找不到对应的hh_cache,转载 2014-03-28 14:29:30 · 2177 阅读 · 0 评论 -
how to catch the NIC interrupt(up/down) event?
User Space:open a netlink socket and listen to the RTMGRP_LINK (network interface create/delete/up/down events) multicast groupsKernel Space:Look in , specifically the stuff abou原创 2014-03-28 14:45:21 · 1154 阅读 · 0 评论 -
Linux服务器集群系统(二)
LVS集群的体系结构章文嵩 (wensong@linux-vs.org) 2002 年 4 月本文主要介绍了LVS集群的体系结构。先给出LVS集群的通用体系结构,并讨论了其的设计原则和相应的特点;最后将LVS集群应用于建立可伸缩的Web、Media、Cache和Mail等网络服务。1.引言 在过去的十几年中,Internet从几个研究机构相连为信息共享的网络发展成为拥有大量应用转载 2014-03-28 12:45:59 · 551 阅读 · 0 评论 -
Linux服务器集群系统(四)
LVS集群的负载调度章文嵩 (wensong@linux-vs.org) 2002 年 5 月本文主要讲述了LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法。针对请求的服务时间变化很大,给出一个动态反馈负载均衡算法,它结合内核中的加权连接调度算法,根据动态反馈回来的负载信息来调整服务器的权值,来进一步避免服务器间的负载不平衡。1. 前言 在上一篇文章中,我们主转载 2014-03-28 12:47:13 · 515 阅读 · 0 评论 -
Linux 上的基础网络设备详解
抽象网络设备的原理及使用网络虚拟化是 Cloud 中的一个重要部分。作为基础知识,本文详细讲述 Linux 抽象出来的各种网络设备的原理、用法、数据流向。您通过此文,能够知道如何使用 Linux 的基础网络设备进行配置以达到特定的目的,分析出 Linux 可能的网络故障原因。转载 2014-04-10 17:03:10 · 703 阅读 · 0 评论 -
ip命令及Linux下的策略路由
一、ip命令基础 # rpm -qf $(which ip) iproute-2.6.18-9.el5 帮助:ip help链路层: # ip link # ip link help Usage: ip link set DEVICE { up | down | #启用停用网卡 arp { on | off } |转载 2014-05-22 15:59:37 · 1051 阅读 · 0 评论 -
简析开源协议栈
开源协议栈的内容,是我们这次将要讲解的内容,其中包含了BSD TCP/IP协议栈、uC/IP、LwIP、uIP、TinyTcp等开源协议栈的讲解。希望下面的资料对大家有所帮助。在开源系统中,可能一些协议栈的使用会稍许不同,那么下面我们就讲解了几个常用的开源协议栈,来为大家详细讲解和对比一下。具体内容,还请大家从下文来了解吧,首先让我们看看BSD TCP/IP协议栈。1、转载 2014-05-23 17:14:31 · 1560 阅读 · 0 评论 -
TCP FAQ
什么是MSS(Maximum Segment Size)?TCP用MSS选项允许接收方指定它可以接收的最大段长度。传输的双方通过这个选项协 商出一个上方都接受的最大段长。这个值太大或太小都不好。太小使得每次传输的净 荷数据太少,带宽使用率不高。太大会使得IP帧太大。这样的帧碰到具有较小的MTU的 网络时不得不分片。这些片段中只要有一个超时都会导致整个帧重传。重传的概率随 片段的增加而增加。MS转载 2014-05-26 15:42:42 · 897 阅读 · 0 评论