iOS TUN之避免UDP包ip分片】的更多相关文章

iOS的NetworkExtension给应用暴露了一个虚拟网卡TUN设备,可以设置其MTU值.如果上层应用发送的IP包大于这个MTU就会被分片.(详见:http://blog.csdn.net/n5/article/details/60872890 ) * TUN转发UDP包时遇到分片的问题 使用iOS网络扩展开发时,往往需要在TUN中处理数据包,进行处理后重新发送出去.由于通过TUN拿到的是ip包,如果要进行udp处理,需要去掉ip头,再去掉udp头,得到udp的载荷数据,再进行处理,然后再…
一.引言  UDP是简单的面向数据报的运输层协议.UDP不提供可靠性:它负责把应用程序传给IP层的数据发送出去,不保证能导到目的地. 二.UDP首部  端口号表示发送进程和接受进程.由于IP层已经把IP数据报分配给了TCP和UDP,因此TCP和UDP端口号是相互独立的. UDP长度字段指的是UDP首部和UDP数据的自己长度. 三.IP分片 由于物理网络层一般要限制每次发送数据帧的最大长度,因此当IP数据报的长度大于MTU时,就会发送IP分片. 分片可以发生在原始发送端主机上,也可以发生在中间…
原文: http://useyourloaf.com/blog/2012/02/07/remote-packet-capture-for-ios-devices.html Remote Packet Capture for iOS Devices FEB 7TH, 2012 11:33 PM I previously posted about using the Network Link Conditioner to create realistic and “challenging” netw…
首先声明:TCP分片应该称为TCP分段 TCP/IP详解--TCP的分段和IP的分片 分组可以发生在运输层和网络层,运输层中的TCP会分段,网络层中的IP会分片.IP层的分片更多的是为运输层的UDP服务的,由于TCP自己会避免IP的分片,所以使用TCP传输在IP层都不会发生分片的现象. 我们在学习TCP/IP协议时都知道,TCP报文段如果很长的话,会在发送时发生分段,在接受时进行重组,  同样IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组. 我们先来看两个与TCP报文段分段和IP…
源:以太网数据包.IP包.TCP/UDP 包的结构 版本号(Version):长度4比特.标识目前采用的IP协议的版本号.一般的值为0100(IPv4),0110(IPv6). IP包头长度(Header Length):长度4比特.这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分.该部分占4个bit位,单位为32bit(4个字节),即本区域值 = IP头部长度(单位为bit)/ (8*4),因此,一个IP包头的长度最长为“1111”,即15*4=60个字节.IP包头最小…
1.UDP首部 2.UDP分片 在第二章,讲链路层是,提到过以太网.刨除数据帧帧头.最多传输的长度为1500.也就是说,假设一个ip数据报,长度大于1500,则须要分片. 分片方法: 在ip头中3位标志,13位片偏移,这俩东西就是用来分片的. 3位标志中:一个很多其他的片标识.除了最后一个分片,其他分片都要有这个标识,另一个不分片标识,假设置上.则即便IP数据报再长.也不分片.可是会将该IP数据报丢弃,并发送一个ICMP差错报文给发送端. 13位片偏移:用于表示相对于起始的偏移量,就是个offs…
这两点比较重要 1.IP+ICMP+DATA = 1500字节 2.ping size指定的是data的大小. 3,可以ping大包+不分片检测mtu(分片发生在出口,如果包尺寸大于接口ip mtu,则干脆不往出发包) 分片实验 我们都知道,在以太网中,如果源主机向目标主机发送的数据包大于网关MTU,则该数据包在传输过程中会被IP协议分片传输,具体的分片过程是怎样的呢?我们通过协议分析软件抓包来进行详细的查看(抓包软件使用科来网络分析系统). 因为以太网默认的MTU值为1500Byte,所以,为…
1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层…
Raw sockets 方式 raw socket 可通过参数  IPV6_HDRINCL 或 IP_HDRINCL 自定义IP头——伪造UDP报文源IP就全靠它了. 限制:从xp sp2之后的所有非服务器版本的windows,都不能发送TCP,并且也不能伪造UDP的源地址. 这里使用 dpkt 做 UDP/IP 包的组装: class SyslogSenderRawScoket: def __init__(self, dst, dport, src, sport = 10000): self.…
在接受到UDP包后,有时候我们需要根据所接收到得UDP包,获取它的路由目的IP地址和头标识目的地址. (一)主要的步骤: 在setsockopt中设置IP_PKTINFO,然后通过recvmsg来获取struct in_pktinfo(struct in_pktinfo是struct msghdr中msg_control的成员).in_pktinfo 结构体(如下所示),我们可以从in_pktinfo中获取路由目的地址(destination address of the packet).头标识…
IP分片是网络上传输IP报文的一种技术手段.IP协议在传输数据包时,将数据报文分为若干分片进行传输,并在目标系统中进行重组.不同的链路类型规定有不同最大长度的链路层数据帧,称为链路层MTU(最大传输单元).常见以太网的MTU为1500,若IP协议在传输数据包时,IP报文长度大于转发接口的MTU,则将数据报文分为若干分片进行传输,分片报文到达接收方时,由接收方完成重组.对于不同的传输层协议,在IP层上,需不需要进行分片是不同的:对于TCP来说,它是尽量避免分片的.因为当在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,另外简要的介…
1 IP协议简单介绍 就个人而言,网络中,抛开网络安全加密这些,就只单单讨论协议本身,比较难的有三个地方: IP分片与重组 TCP滑动窗口与TCP状态的改变 TCP定时器 其实协议本身根据<TCP/IP详解卷1>理解起来并不难,但是实现起来就很难:数据的操作,标志位的设置,网络状态的变换,中断多线程通讯等等: 在下图的七层网络协议参考模型中,IP层属于网络层,网络层最主要的作用就是:将指定IP的数据报传输到对应的主机. 下图是以太帧封装格式(RFC 894),RFC 894封装格式也是我们最常…
ZC: 由于 TCP中 MSS 的关系,TCP 不会造成 IP分片和TCP分段 ! 1.http://zhidao.baidu.com/link?url=YCnR8B-1EN4-cgauRtwa-iVqf6aMJlCJRiRd8IclA8CCQ8yYp5413usIU4aXuyy_wHgNJ3weeA1RItuis2jUse12T-Ri8Tf_5OystmpZWfS 2. IP分片和TCP分段的区别 1,MTU(Maximum Transmission Unit,MTU),最大传输单元 (1)以…
from http://blog.csdn.net/cumirror/article/details/5071234 前段时间要做一个关于网络嗅探的程序,里面要重组IP分片,TCP分片. 但做的时候忽视了一个很重要的东西:IP分片与TCP分片弄混淆了. 首先声明:TCP分片应该称为TCP分段. —————————————————————————————————————————————————————— 区别: 1.IP分片产生的原因是网络层的MTU:TCP分段产生原因是MSS. //ordina…
在TCP/IP分层中,数据链路层用MTU(Maximum Transmission Unit,最大传输单元)来限制所能传输的数据包大小,MTU是指一次传送的数据最大长度,不包括数据链路层数据帧的帧头,如以太网的MTU为1500字节,实际上数据帧的最大长度为1512字节,其中以太网数据帧的帧头为12字节. 当发送的IP数据报的大小超过了MTU时,IP层就需要对数据进行分片,否则数据将无法发送成功. IP分片的实现 IP分片发生在IP层,不仅源端主机会进行分片,中间的路由器也有可能分片,因为不同的网…
  每个udp包的最大大小是多少?    65507 约等于 64K 为什么最大是65507?    因为udp包头有2个byte用于记录包体长度. 2个byte可表示最大值为: 2^16-1=64K-1=65535    udp包头占8字节, ip包头占20字节, 65535-28 = 65507 如果要发送的udp报文大于65507怎么办?    需要在应用层由开发者自己分片发送. 分片的粒度最大65507字节. 系统的sendto函数是不支持大于65507字节的单包发送的. UDP包头格式…
IP分片和TCP分片 MTU和MSS(转) 访问原文:http://blog.csdn.net/keyouan2008/article/details/5843388 1,MTU(Maximum Transmission Unit,MTU),最大传输单元 (1)以太网和802.3对数据帧的长度都有一个限制,其最大 值分别是1500和1492个字节.链路层的这个特性称作MTU.不同类型的网络大多数都有一个上限.如果IP层有一个数据要传,且数据的长度比链路层的 MTU还大,那么IP层就要进行分片(f…
在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好?当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对像ICQ一类的发送聊天消息的情况作分析,对于其他情况,你或许也能得到一点帮助:首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,运输层,应用层.UDP属于运输层,下面我们由下至上一步一步来看:以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.这个1500字节被…
TCP .UDP .IP. ICMP协议报文格式分析 Tcp报文格式: Wireshark抓包如图: 源端口/目的端口(16bit): 在TCP报文中包涵了源端口/目的端口,源端口标识了发送进程,目的端口标识了接收方进程.由上图可以看出在此报文中我们的源端口号是54160, 目的端口是cichlid(1377). 序列号(32bit): Sequence Number这个是发送序列号,用来标识从源端向目的端发送的数据字节流,它表示在这个报文端中的第一个数据字节的顺序号,序列号是32位的无符号类型…
1.以太网帧 在以太网链路上的数据包称作以太帧,在802.3标准里,规定了一个以太帧的数据部分(Payload)的最大长度是1500个字节(MTU),再加上14字节链路头和4字节的FCS,所以以太网帧的最大长度为1518.另外,以太网帧的最小长度为64字节. [1]4字节的FCS是网卡处理的,所以抓到的包看不到这个字段(网卡驱动去掉了),组建包时也不用设置这个字段(由网卡驱动计算填充). [2]每个帧的前面有7字节的前导码和1字节的帧起始定界符,这8个字节是帧之外的数据,由接收器电路使用. [3…
    尽管IP分片看起来是是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报.为什么会发生这种情况呢?     因为IP层本身没有超时重传的机制--由更高层来负责超时和重传(TCP有超时和重传机制,但UDP没有.一些UDP应用程序本身也执行超时和重传).当来自TCP报文段的某一片丢失后,TCP在超时后重发整个TCP报文段,该报文段对应于一份IP 数据报.没有办法只重传数据报中的一个数据片.事实上,如果对数据分片的是中间路由器,而不是起始端系统,那么超始端系统就不无知道数据报…
从四层模型:链路层,网络层,传输层,应用层说 一 .以太网V2格式数据帧 : 链路层 Destination   Source  Type  DataAndPad  FCS 6              6          2      46~1500       4 二.IP: 网络层 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-…
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/mmc_maodun/article/details/30109789     我们在学习TCP/IP协议时都知道.TCP报文段假设非常长的话.会在发送时发生分段,在接受时进行重组,相同IP数据报在长度超过一定值时也会发生分片,在接收端再将分片重组.     我们先来看两个与TCP报文段分段和IP数据报分片密切相关的概念.     MYU(最大传输单元)     MTU前面已经说过了,是链路层中的网…
在进行UDP编程的时候,我们最容易想到的问题就是,一次发送多少bytes好?当然,这个没有唯一答案,相对于不同的系统,不同的要求,其得到的答案是不一样的,我这里仅对像ICQ一类的发送聊天消息的情况作分析,对于其他情况,你或许也能得到一点帮助:首先,我们知道,TCP/IP通常被认为是一个四层协议系统,包括链路层,网络层,运输层,应用层.UDP属于运输层,下面我们由下至上一步一步来看:以太网(Ethernet)数据帧的长度必须在46-1500字节之间,这是由以太网的物理特性决定的.这个1500字节被…
尽管IP分片看起来是是透明的,但有一点让人不想使用它:即使只丢失一片数据也要重传整个数据报.为什么会发生这种情况呢?     因为IP层本身没有超时重传的机制——由更高层来负责超时和重传(TCP有超时和重传机制,但UDP没有.一些UDP应用程序本身也执行超时和重传).当来自TCP报文段的某一片丢失后,TCP在超时后重发整个TCP报文段,该报文段对应于一份IP 数据报.没有办法只重传数据报中的一个数据片.事实上,如果对数据分片的是中间路由器,而不是起始端系统,那么超始端系统就不无知道数据报是如何被…
一.HTTP协议的主要特点: 1. CS模式 2. 简单快速:只需要传送请求方法和路径.(常用方法有GET,HEAD,POST) 3. 灵活:任意对象都可以,类型由Content-Type加以标记 4. 无连接.无状态 即每次连接只处理一个请求,对于事务处理没有记忆能力 http表示要通过HTTP协议来定位网络资源:host表示合法的Internet主机域名或者IP地址:port制定一个端口号,为空时使用缺省端口号80:abs_path指定请求资源的URI;如果URL中没有给出abs_path,…
物理网络层一般要限制每次发送数据帧的最大长度.任何时候IP层接受到一份要发送的IP数据报时,它要判断向本地哪个接口发送数据(选路),并查询该接口获得其MTU(最大传输单元:Maximum Transmission Unit,通常与通信接口有关,单位:字节).IP把MTU与数据报长度进行比较,如果需要则进行分配.分片可以发生在原始发送端主机上,也可以发生在中间路由器上. 把一份IP数据包分片以后,只有到达目的地才进行重新组装(这里的重新组装与其他网络协议不同,他们要求在下一站就进行重新组装,而不是…
为什么要分片 不同的链路类型能够支持的最大传输单元值(MTU: Maxitum Transmission Unit)主要是由相关RFC文档规定的,常见的以太网链路的MTU值为1500,如果需要转发的IP报文超出其转发接口的MTU值,则在转发该报文之前,需要将其分片,分为多个适合于该链路类型传输的报文,这些分片报文在到达接收方的时候,由接收方完成重组. 各种常见链路类型的MTU值如下图所示: 报文的分片和重组 我们先来看一下分片的过程,为了简单起见,我就用<TCPIP详解卷一>第11章<U…
原文: :https://www.jianshu.com/p/f9a5b07d99a2 ------------------------------------------------------------------------------------- 1.首先根据Ethernet II类型以太网帧格式可以得知,Ethernet II类型以太网帧的最小长度为64字节,最大长度为1518字节.(另外还有7字节前导同步吗+1字节帧开始定界符是所有类型的以太网帧格式必要的) 以太网帧格式有四种类…