//调用路径:ip_defrag->ip_evictor // 分片重组时,可使用内存上下限: // 1.sysctl_ipfrag_high_thresh 可用内存上限 // 2.sysctl_ipfrag_low_thresh 内存超过上限后,需要释放内存到此限 1.1 static void ip_evictor(void) { struct ipq *qp; struct list_head *tmp; int work; //计算需要释放的内存 work = atomic_read(&am…
//为分片确定正确的ipq结构 // 定位5元组 // 1.<id, 源ip, 目的ip, l4协议> 可通过ip报文获取 // 2.user 通过ip_defrag给出,指出重组是由谁发起的,最常见的时IP_DEFRAG_LOCAL_DELIVER,当重组的入口分包要传递给本地时 // ipq中所有分片最迟完成重组的时间为30HZ 1.1 static inline struct ipq *ip_find(struct iphdr *iph, u32 user) { //定位4元组 __u1…
//ip分片加入到正确的ipq结构 //调用路径:ip_defrag->ip_frag_queue // 处理过程: // 1.正在被释放的ipq,不处理新加入的分片(ipq正在被释放由last_in设置COMPLETE指出) // 2.处理分片的合法性 // 2.1当该封包为最后一个分片时 // 2.1.1如果之前没有接收到最后一个分片,则该分片在总有效载荷中的结尾位置需要大于等于以推测出的最大长度 // 2.1.2如果之前已经接收到最后一个分片,则该分片在总有效载荷中的结尾位置需要等于之前接…
//向协议栈注册l3处理函数 1.1 void dev_add_pack(struct packet_type *pt) { int hash; //ptype_all ptype_base共用一把锁 ptype_lock spin_lock_bh(&ptype_lock); if (pt->type == htons(ETH_P_ALL)) {//ETH_P_ALL类型的l3协议,从外接收到的数据帧,和从本地发送的数据帧,都会向ptype_all链表中的l3协议,传递一份 netdev_n…
//ip协议与l4协议接口,l4通过此接口向下l3传递数据帧 //函数主要任务: // 1.通过路由子系统路由封包 // 2.填充l3报头 // 3.ip分片 // 4.计算校验和 // 5.衔接邻居子系统,向下层传送封包. 1.1 int ip_queue_xmit(struct sk_buff *skb, int ipfragok) { struct sock *sk = skb->sk; struct inet_sock *inet = inet_sk(sk); struct ip_opt…
//ip报头tos字段,一个字节 // 二进制位:[0 1 2] [3] [4] [5] [6] [7] // 1.[0 1 2] 表示优先级: // 000 路由 // 001 优先级 // 010 立即 // 011 火速 // 100 火速覆盖 // 101 紧急 // 110 互联网控制 // 111 网络控制 // 2.[3] 表示时延 // 0 普通 // 1 最小 // 3.[4] 吞吐量 // 0 普通 // 1 最大 // 4.[5] 可靠性 // 0 普通 // 1.最大 /…
//调用路径ip_rcv->ip_rcv_finish->dst_input->(skb->dst->input) //ip_forward以回调函数的形式,保存在skb->dst->input,input在通过ip_route_input路由封包时被设置 //函数的主要任务: // 1.更新ttl // 2.如果路由被重定向,则向发送方发送icmp重定向报文 // 2.如果有选项,通过ip_forward_options处理在转发时需要更新的选项 // 3.通过…
Linux 网络设备驱动之网络协议接口层介绍. 网络协议接口层最主要的功能是给上层协议提供透明的数据包发送和接收接口. 当上层ARP或IP需要发送数据包时,它将调用网络协议接口层的dev_queue_xmit 函数发送该数据包, 同时还需要传递给改函数一个 struct sk_buff 数据结构的指针. dev_queue_xmit() 函数的原型为: int dev_queue_xmit(struct sk_buff *skb); 同样的,上层对数据包的接收也通过向 netif_rx() 函数…
内核版本:linux-2.6.11 本文对Linux网络子系统的收发包的流程进行一个大致梳理,以流水账的形式记录从应用层write一个socket开始到这些数据被应用层read出来的这个过程中linux的网络子系统怎么运作的. PS:不能保证所有内容都是正确的,同时欢迎指出问题. 发包流程 1)用户进程对一个网络套接字执行write或者send后,该进程通过系统调用进入内核态. 2)在socket这层最终会通过调用sendmsg这个函数将数据传给传输层(这里涉及到使用一个多态的手法来实现不同协议…
翻译:飞哥 (http://hi.baidu.com/imlidapeng) 版权所有,尊重他人劳动成果,转载时请注明作者和原始出处及本声明. 原文名称:<Linux Performance and Tuning Guidelines> 原文地址:http://www.redbooks.ibm.com/abstracts/redp4285.html -------------------------------------------------------------------------…
再Linux的世界里,万物皆文件,通过虚拟文件系统VFS,程序可以用标准的Linux系统调用对不同的文件系统,甚至不同介质上的文件系统进行读写操作.下面我们揭示Linux网络子系统的秘密 sockfs 在Linux上,和读写文件保持同一套接口是通过套接口伪文件系统sockfs来实现的. sockfs实现了VFS中的4种主要对象:超级块super block.索引节点inode.目录项对象dentry和文件对象file,当执行文件IO系统调用时,VFS就将请求转发给sockfs,而sockfs就调…
在ip_local_deliver中,如果检测到是分片包,则需要将报文进行重组.其所有的分片被重新组合后才能提交到上层协议,每一个被重新组合的数据包文用ipq结构实例来表示 struct ipq { struct inet_frag_queue q; u32 user;//分片来源 __be32 saddr;//原地址 __be32 daddr;//目的地址 __be16 id;//ip报文序列号 u8 protocol;//上层协议号 //这四个字段来自ip首部是为了确定来自哪个ip数据报文…
IP分片重组的分析和常见碎片攻击 v0.2http://www.nsfocus.net/index.php?act=magazine&do=view&mid=584 作者:yawl (mailto:yawl@nsfocus.com)主页:http://www.nsfocus.com日期:2000-09-12 一 前言 本文对linux的IP组装算法进行了分析,因为IP碎片经常用于DOS等攻击,在文章后面我结合 了一些攻击方法进行了更进一步的说明.内核主要参考版本是2.2.16,另外简要的介…
原文:Linux内核分析(四)----进程管理|网络子系统|虚拟文件系统|驱动简介 Linux内核分析(四) 两天没有更新了,上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理子系统.网络子系统.虚拟文件系统在这个阶段进行分析的,但是为了让大家对内核有个整体的把握,今天还是简单的介绍一下剩余的几个子系统,我们对这几个子系统的分析,只要了解其作用和部分内容即可,不必深究,等我们写上几个驱动,到时候按照驱动再来分析这几个子系统我们就清晰多了. 在http://www.cnbl…
在ip_local_deliver中,如果检测到是分片包,则需要进行分片重组: ip_local_deliver |-->ip_is_fragment //判断是否为分片包 |-->ip_defrag //分片缓存&重组 |-->ip_find //查找ipq |-->ip_frag_find //查找frag_queue |-->ip_defrag_queue //分片接收组合 |-->ip_frag_reasm //接收完整的分片组成新的ip包 /* * D…
今天记录一下Linux网络子系统相关的东西. 因为感觉对这一块还是有一个很大的空白,这件事情太可怕了. 摘抄多份博客进行总结一下Linux网络子系统的相关东西. 一. Linux网络子系统体系结构 Linux 网络体系结构由如下图抽象的形容一下 1 . 用户空间:-----> 应用层 2 . 内核空间:-----> 系统调用接口: 主要指socket 系统调用 -----> 协议无关接口: 实现一组基于socket的通用函数访问各种不同的协议 -----> 网络协议: udp, t…
1.选择路由 若要将数据包发至PC2,则linux系统通过查询路由表可知168.1.1.10(目的地址)的网关地址为192.168.1.1,此时linux系统选择网卡1发送数据包. 2.邻居子系统(通过arp协议建立起邻居的信息) 选择网卡1发送数据时,首先将数据包发给邻居(网关),再由邻居转发至后面,若要发送给邻居,则必须知道邻居的MAC地址,若不知道邻居的MAC地址,则需要通过arp请求包获取邻居的MAC地址. Linux网络体系结构由以下五个部分组成 1)系统调用接口 2)协议无关接口 3…
atitit.网络文件访问协议.unc smb nfs ftp http的区别 1. 网络文件访问协议1 2. NETBios协议  2 3. SMB(Server Message Block)2 3.1. Win访问smb2 3.2. Java访问smb2 3.2.1. jcifs/jcifs-1.3.8.jar.zip( 366 k)2 3.2.2. Jftp也可以了3 4. Unc路径3 4.1. Win访问Unc4 4.2. Java访问Unc4 5. NFS协议4 5.1. Win访问…
技术扫盲:新一代基于UDP的低延时网络传输层协议——QUIC详解    http://www.52im.net/thread-1309-1-1.html   本文来自腾讯资深研发工程师罗成的技术分享,主要介绍 QUIC 协议产生的背景和核心特性等. 1.写在前面 如果你的 App,在不需要任何修改的情况下就能提升 15% 以上的访问速度.特别是弱网络的时候能够提升 20% 以上的访问速度. 如果你的 App,在频繁切换 4G 和 WIFI 网络的情况下,不会断线,不需要重连,用户无任何感知.如果…
Atitit.软件开发概念(11)--网络子系统--url编码 空格问题URLEncoder java js php 1. RFC2396标准 including HTML 4.01 section 17.13.4, and also RFC 1866 (which is supercededby the W3C HTML recommendations). 在form的ContextType是[x-www-form-urlencoded]的时候会对form中的键/值对进行编码,空格被转义成+,…
参考: http://blog.csdn.net/sunyc1990/article/details/50773014 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编程是比较复杂的系统工程,需要了解很多和网络相关的基础知识,其实这些都不是很必需的.首先来问一个问题:你 会打手机吗?很多人可能说肯定会啊,不就是按按电话号码,拨打电话嘛,很简单的事情啊!其实…
iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP 超文本传输协议,访问的是远程的网络资源,格式是http:// http协议是在网络开发中最常用的协议 (2)file 访问的是本地计算机上的资源,…
iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) 通过1个URL,能找到互联网上唯一的1个资源 URL就是资源的地址.位置,互联网上的每个资源都有一个唯一的URL 2.URL中常见的协议 (1)HTTP 超文本传输协议,访问的是远程的网络资源,格式是http:// http协议是在网络开发中最常用的协议 (2)file 访问的是本地计算机上的资源,…
NS2仿真实验报告2 实验名称:两个移动节点网络连接及协议性能分析 实验日期:2015年3月9日~2015年3月14日 实验报告日期:2015年3月15日 一.实验环境(网络平台,操作系统,网络拓扑图) 运行平台:虚拟机VMwareWorkstation11.0 操作系统:Linux/CentOS6.5仿真分析工具:NS2.35中的仿真软件ns,图形界面nam,编译工具awk,图表编辑器xgraph 网络拓扑图: 二.  实验目的 使用NS仿真软件模拟简单移动节点的网络传输模型,掌握无线网络传输…
网络编程TCP协议-聊天室(客户端与服务端的交互); <span style="font-size:18px;">1.客户端发数据到服务端.</span> <span style="font-size:18px;">2.</span><span style="font-size: 18px; font-family: Arial, Helvetica, sans-serif;">服务端接…
Kafka 协议实现中的内存优化 Kafka 协议实现中的内存优化   Jusfr 原创,转载请注明来自博客园 Request 与 Response 的响应格式 Request 与 Response 都是以 长度+内容 形式描述, 见于 A Guide To The Kafka Protocol Request 除了 Size+ApiKey+ApiVersion+CorrelationId+ClientId 这些固定字段, 额外的 RequestMessage 包含了具体请求数据: Reques…
第24章     RL-TCPnet之网络控制报文协议ICMP 本章节为大家讲解ICMP(Internet Control Message Protocol,网络控制报文协议),通过前面章节对TCP和UDP的学习,需要大家对ICMP也有个基础的认识. (本章的知识点主要整理自网络) 24.1  初学者重要提示 24.2  ICMP基础知识参考资料 24.3  ICMP基础知识点 24.4  ICMP函数 24.5  总结 24.1  初学者重要提示 通过前面几个章节对TCP和UDP的学习,需要初…
因为部门新进了一台价值百万的网络测试设备,所以有太大的必要了解有关网络相关的基础知识了. 网络七层协议OSI(open system interconnection)从上到下依次为:应用层.表示层.会话层.传输层.网络层.数据链路层.物理层. 重新探索一条超级捷径,高能效地学习并理解这网络分层的含义. 应用层:与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的.例如,一个没有通信功能的字处理程序就不能执行通信的代码,从事字处理工作的程序员也不关心OSI的第7层.但是,如果添加了一个传输…
Kafka 协议实现中的内存优化   Jusfr 原创,转载请注明来自博客园 Request 与 Response 的响应格式 Request 与 Response 都是以 长度+内容 形式描述, 见于 A Guide To The Kafka Protocol Request 除了 Size+ApiKey+ApiVersion+CorrelationId+ClientId 这些固定字段, 额外的 RequestMessage 包含了具体请求数据: Request => Size ApiKey…
Protocol Informatics[基于网络轨迹的协议逆向工程文献学习]by tsy 声明: 1)本报告由博客园bitpeach撰写,版权所有,免费转载,请注明出处,并请勿作商业用途.恕作者著作权限制,本页面仅上传图片版本的文献学习文稿. 2)若本文档内有侵权文字或图片等内容,请联系作者bitpeach删除相应部分. 3)本文档内容涉及Protocol Informatics论文主题,该论文为协议逆向工程的入门经典之作,非常值得基于网络轨迹的协议逆向工程的学习. 论文标题为<Network…