[关闭]
@natsumi 2017-01-13T03:11:35.000000Z 字数 5047 阅读 3881

Wireshark2.0.0对LTE协议的支持

LTE Wireshark


1. Wireshark支持的LTE协议

https://wiki.wireshark.org/LTEProtocolFamily

1.1 MAC-LTE

附以前的两篇笔记:

1.2 RLC-LTE

1.3 PDCP-LTE

关于报头压缩
摘自:http://baike.baidu.com/link?url=jFYUgmDIweLF8NARGUSeeifmn1R6-cvedTP7o4YAJSZo4HqbSZEumEh4qh4egNHYF3SbvET0nMu6fagSGxBVqq#2_2

在LTE系统中,规定PDCP子层支持由IETF(互联网工程任务组)定义的健壮性报头压缩协议(ROHC)来进行报头压缩。在LTE中,因其不支持通过电路交换域(CS)传输的语音业务,为了在分组交换域(PS)提供语音业务且接近常规电路交换域的效率,必须对IP/UDP/RTP报头进行压缩,这些报头通常用于VoIP业务。
典型的,对于一个含有32 B有效载荷的VoIP分组传输来说,IPv6报头增加60 B,IPv4报头增加40 B,即188%和125%的开销。
为了解决这个问题,在LTE系统中,设定在激活周期内PDCP子层采用ROHC报头压缩技术,在压缩实体初始化之后,这一开销可被压缩成4~6个字节,即12.5%~18.8%的相对开销,从而提高了信道的效率和分组数据的有效性。

IETF在“RFC 4995”中规定了一个框架,ROHC框架中有多种头压缩算法,称为Profile,每一个Profile与特定的网络层、传输层和更上层的协议相关,如TCP/IP和RTP/UDP/IP等。具体的报头压缩协议及属性如表1所示。
PDCP实体支持的报头压缩及其属性

报头压缩协议可以产生两种类型的输出包:
(1)压缩分组包,每一个压缩包都是由相应的PDCP SDU经过报头压缩产生的;总是与相应的PDCP SDU采用相同的PDCP SN和COUNT值
(2)与PDCP SDU不相关的独立包,即ROHC的反馈包。不是由PDCPSDU产生的,没有与之相关的PDCP SN,也不加密

1.4 LTE RRC

1.5 S1AP

1.6 X2AP

1.7 GTPv2

1.8 NAS-EPS

2 关于NAS

2.1 NAS是什么鬼?

参考资料:

【LTE基础知识】NAS层协议之AS模型与NAS模型概述:
http://www.mscbsc.com/viewnews-101815.html

NAS信令流程:
http://wenku.baidu.com/link?url=uqsOP9n3y1U76uxGnMMCQ0LmeYv6RuerDWXgyR0i7gPWo-dgoF8s1JCkQSUhOCRepSSmqPcB0RxmT3IUzqwxbXewB8tDVg8lPm3doC7G29m

NAS消息结构:
http://wenku.baidu.com/view/27f1e31cfc4ffe473368ab98.html?from=search

2.2 LTE NAS相关的协议

  • E-UTRAN & (GERAN | UTRAN),24301的NAS协议和24008的NAS协议的参数映射
  • E-UTRAN & (!3GPP接入网),使用基于双栈移动IPv6(24303)或MIPv4(24304)时,和PDN网关保持IP连接以及提供UE需要的参数的NAS过程

3 Wireshark-2.0.0/epan/dissectors/packet-nas_eps.c

解析器入口应该是dissect_nas_eps函数

3.1 根据长度判断并处理plain message

长度小于8字节或g_nas_eps_dissect_plain==true(应该是对应一个设置选项)时,调用dissect_nas_eps_plain函数,解析pd(Protocol discriminator)=2、7、15的信令
pd=7且security_header_type=12~15 ===> nas_emm_service_req
pd=2 ===> disect_nas_eps_esm_msg
pd=7 ===> dissect_nas_eps_emm_msg
pd=15 ===> call_dissector(gsm_a_dtap_handle,...)

3.2 根据security_header_type、pd判断并处理plain message

security_header_type=0且pd=7 ===> dissect_nas_eps_emm_msg
security_header_type=12~15 ===> nas_emm_service_req
24301 table 9.3.1

3.3 处理protected message(security_header_type=1~4)

3.3.1 加密信息不做解析

  1. /* If pd is in plaintext this message probably isn't ciphered */
  2. if ((pd != 7) && (pd != 15) &&
  3. (((pd&0x0f) != 2) || (((pd&0x0f) == 2) && ((pd&0xf0) > 0) && ((pd&0xf0) < 0x50)))) {
  4. proto_tree_add_text(nas_eps_tree, tvb, offset, len-6,"Ciphered message");
  5. return;
  6. }

3.3.2 其他情况作protected message处理

其他情况包括:
1. security_header_type=2或4且MAC(Message authentication code)!=0而且不满足((pd != 7) && (pd != 15) &&(((pd&0x0f) != 2) || (((pd&0x0f) == 2) && ((pd&0xf0) > 0) && ((pd&0xf0) < 0x50))))的
2. security_header_type=2或4且MAC(Message authentication code)=0
3. security_header_type=其他值(可以是1、3、5~11,都按protected处理,5~11是reserved)

以上情况继续向下读取sequence number以及protected message中封装的plain message的内层security_header_type和内层pd

根据内层pd解析
pd=2 ===> disect_nas_eps_esm_msg
pd=7 ===> dissect_nas_eps_emm_msg
pd=15 ===> call_dissector(gsm_a_dtap_handle,...)

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注