ddup

rench's blog

last update:

理解ip分片

ip数据包在经过每一个链路的时候, 如果ip数据包的大小大于链路的MTU就会进行分片. 如果该ip数据包有don’t fragment的标记, 则链路设备会丢弃该过大的ip数据包. ip数据包在进行分片后, 目的主机需要以下信息进行包重组: 1. Fragment ID —所有属于同一个原始ip数据包的分片拥有一个同样的值. 2. Place & Offset —标识分片在原始ip数据包中的位置. 3. Length —分片的长度 4. MF flag —指示该分片包是否可以继续分片. 假设有一个4000个字节的icmp数据包(包含20个字节的ip头部, 8个字节的icmp协议头, 3972个字节的应用数据). 该数据包在经过MTU为1500的链路时, 会进行分片, 分片后如下图: tcpdump抓包显示如下: > client.com > server.com: icmp: echo request (frag 21233 : 1472@0+) > client.com > server.com: icmp: echo request (frag 21233 : 1480@1472+) > client.com > server.com: icmp: echo request (frag 21233 : 1020@2952) 其中21233表示Fragment ID, 1472@0+表示从0个字节开始的1472个字节. ip分片如果有一个分片丢包则会造成整个ip数据包重传, 因此分片会影响性能, 要尽量避免分片.

Dns Srv Record

srv record srv record是用于发现网络上指定服务的dns record, 比如网络电话使用srv record指定SIP服务的地址. srv record里面的域名通常定义了一个符号名和传输协议, srv record里面还包含优先级, 权重, 端口, 服务目的地址. 以下是两条srv记录的例子: > _sip._tcp.example.com. 3600 IN SRV 10 60 5060 bigbox.example.com. > _sip._tcp.example.com. 3600 IN SRV 10 20 5060 smallbox1.example.com. _sip是符号名, _tcp是传输协议, 符号名和传输协议通常以下划线开头. 两条记录的优先级都是10, 第一条记录的权重是60, 第二条记录的权重是20. 优先级和权重决定了选择策略. 最后的两个字段定义了端口和服务地址.

Nat设备的类型

假设有一个客户端(位于nat设备之后), 两个公网服务端。他们对应的地址分别为: 客户端私网地址(192.168.1.99) 客户端nat公网地址(1.1.1.1) 服务器A公网地址(2.2.2.2) 服务器B公网地址(3.3.3.3) 1. 全纺锤型(Full cone NAT) 设客户端往服务器A发送数据包 192.168.1.99:11111 => 2.2.2.2:22222 nat设备中会记录类似如下的映射关系: 192.168.1.99:11111 <=> 1.1.1.1:11112 nat设备同时纪录类似如下的入向过滤列表: (1.1.1.1, 11112, *, *) 入包只要是发往1.1.1.1:11112, nat设备就会为其转发(不论入包的源地址和端口是啥). 2. 地址受限型(Restricted Cone NAT) 同全纺锤型的例子, 只是nat设备记录的入向过滤列表为: (1.1.1.1, 11112, 2.2.2.2, *) 入包被放行的条件是入包的目的地址端口是1.1.1.1:11112且入包的源地址是2.2.2.2 3. 地址端口受限型(Port Restricted Cone NAT) 同全纺锤型的例子, 只是nat设备记录的入向过滤列表为 (1.1.1.1, 11112, 2.2.2.2, 22222) 入包被放行的条件是入包的目的地址端口是1.1.1.1:11112且源地址是2.2.2.2, 源端口是22222 假设此时客户端使用同样的地址端口对向服务器B发数据包 192.168.1.99:11111 => 3.3.3.3:33333 nat设备中会记录类似如下的映射关系: 192.168.1.99:11111 <=> 1.1.1.1:11112 这个特点是,当源客户主机使用相同的IP、端口号时,NAT通常也会使用相同的IP、端口号予以映射, 入向过滤列表为: (1.1.1.1, 11112, 2.2.2.2, 22222) (1.1.1.1, 11112, 3.3.3.3, 33333) 4. 对称型(Symmetric NAT) 同地址端口受限型的例子, 只是当客户端使用同样的地址端口对向服务器B发数据包时

翻译原文地址 这篇文档讨论isp怎么分配ip地址给ue, ip地址分配可以分为动态ip地址分配和静态ip地址分配,这篇文档会讨论这两种地址分配的机制以及它们的的异同. 内容 介绍 ip地址分配的类型 动态ip地址分配 静态ip地址分配 1.介绍 lte网络都是基于ip的网络, 用户的数据包都是通过ip数据包来传送的. 当ue加入lte网络的时候,一个PDN(Packet Data Network)地址(该地址仅在该pdn里面使用)会分配给ue, 同时该ue会建立一个默认的承载(ue和pgw之间), 该默认承载和ip地址会一直保持有效, 直到ue从lte网络detach.(这里可以理解为ip地址属于默认承载的一部分?). ue可能会同时有多个apn, 每个apn会建立一个默认承载和分配一个ip地址, ip地址可以分为ipv4, ipv6, ipv4/ipv6. 2.ip地址分配的类型 当ue初始附着lte网络时,会请求一个pdn连接. pgw会为ue分配一个ip地址, 通过这个ip地址, ue可以使用pdn提供的数据服务. pgw分配ip地址有两种方式(静态ip地址分配和动态ip地址分配). 动态ip地址分配是在ue接入网络的时候, pgw自动分配一个ip地址给ue(每次分配的不一样). 静态ip地址分配的时候, pgw会根据ue选择指定的ip地址分配(每次分配的相同). 图1比较了这两种不同的类型. 图1. IP Address Allocation Schemes 在动态ip地址分配的情况下, ue每次附着都会获取到不同的ip地址. pgw有一个ip地址池, ue每次附着的时候都会自动选一个地址分配出去. 在静态ip地址分配的情况下, ue的ip地址已经写入了hss, 所以每次分配的都是同一个ip地址. 3.动态ip地址分配 动态ip地址分配会保留一个地址池, 在ue初始附着的时候动态分配一个地址给ue.如图2. 图2. Procedure for Dynamic IP Address Allocation 在pgw里面, ip地址池以及dns服务器地址都已经配置好了. PGW IP Pool: 1.1.0.0/16 (1.1.1.1 ~ 1.1.255.254) DNS server IP address: Primary DNS: 10.

lte tunnel

从ue发出的ip数据包, 无论其目的地址是什么, 该ip数据包都要封装在gtp tunnel里面, 然后由eNB发往pgw, 如下面的图(a) 1. UE to eNB 假设ue往google服务器74.125.71.104发包, 该数据包先通过radio link发往eNB,从ue发出的原始数据包如下所示: 2. eNB to S-GW eNB收到从ue发来的数据包后, 往该数据包ip header前面添加一个gtp tunnel header, 该gtp tunnel header包含3个独立的头部(gtp header, udp header, ip header for GTP tunneling). 从eNB到S-GW的数据包如下所示: 由于前面gtp tunnel header的存在, 路由就能根据外部的ip头部把包发往指定的sgw 3. S-GW to PGW S-GW收到eNB的数据包后, 修改外部的gtp tunnel header, 修改后的数据包如下所示: 4. P-GW to PDN (www.google.com) P-GW收到数据包后, 剥离外部的gtp tunnel header, 把数据包发往internet, 如下所示: gtp tunnel header中teid的解释 由于同时会有很多个ue与sgw和pgw建立联系, 那么就会同时存在很多个gtp tunnel(每个ue可以有多个tunnel), teid就是用于标识这个tunnel是属于哪个ue的. 如图b里面标识的, 关于某个ue的从eNB到sgw的uplink tunnel通过TEID = UL S1-TEID (ex.

在用libpcap capture packet时, os会分配一个’os buffer’来保存接收的包, 该’os buffer’是由固定大小的slot组成的. 该’os buffer’的默认大小是2M, 如果将snapshot length的大小设置为65535, 则slot的大小就是32(65535 * 32 = 2M). 如果包到达速度非常快, 而包处理函数比较慢, 就会造成slot占满, 就会造成丢包. 将snapshot length的大小调小, 就会有更多的slot, 能缓存更多的包.