- 1 -
中国科技论文在线
移动传输层控制协议及实现#
袁问非,李长银*
基金项目:教育部博士点基金(20060614018);国家自然科学基金(60672045)
作者简介:袁问非(1985-),男,电子科技大学在读研究生,主要研究方向:移动传输层控制协议. E-mail:
(电子科技大学通信与信息工程学院,成都 611731)
摘要:随着移动技术的飞速发展,网络节点的移动性需要更好的支持,现有的移动 IP 协议5
在对移动节点提供移动性支持的同时也在 IP 头增加了不少开销。项目组提出了一种在传输
层实现移动性管理的解决方案,在传输层引入源和目的的永久地址,从而实现移动终端地址
和身份的分离,避免了传统 IP 的双重含义。论文介绍了项目组方案的移动传输控制协议
MTCP协议原理,并给出了一种基于原始套接字编程(Raw socket)的MTCP协议实现方法。
关键词:移动 IP,移动传输层控制协议,移动用户报协议,原始套接字编程。 10
中图分类号:
Implementation of Mobile Transport Control Protocol
YUAN Wenfei, LI Changyin
(School of Communication and Information Engineering, University of Electronic Science and 15
Technology of China, Chengdu 611731)
Abstract: With the great development of the mobile mobile technology,the network nodes need more
support for their mobile IP protocols increased overhead of IP header when
supporting mobility of the mobile nodes. Our project team proposed a solution which achieves mobility
management in transport layer. The solution can separate address and identity of mobile terminals to 20
avoid the double meaning of the traditional IP protocol by introducing the permanent address of source
and destination in transport layer. This paper introduced the mobile transmission control
protocol(MTCP) and given a implementation of MTCP which based on Raw Socket.
Key words: Mobile IP, Mobile Transmission Control Protocol, Mobile User Datagram Protocol,Raw
Socket 25
0 引言
当今信息领域中,Internet 已经渐渐成为人们日常活动中不可或缺的部分。然而随着
Internet 的普及和发展,手机、笔记本电脑等便携式移动设备的大量应用,网络已经不再是
由单纯的由有线固定网构成,无线网络越来越多的占据了大家的生活。移动无线环境有着一30
些迫切需要解决的问题,比如通信的延时大、链路误码率高等一些问题。而原有的 IP 协议
对网络节点的移动性支持不够,不能在节点移动的同时保持通信会话的连续,特别是在当前
的 TCP/IP 框架下,面向连接的协议的 TCP 协议不能在节点移动过程中保持会话。移动 IP
协议在 IP 协议基础上增加了新的网元和协议以实现对节点移动的支持。但是移动 IP 协议在
网络开销、网络延时、节点成本等方面也有很多不足。论文所在课题组前期提出了一种 MTCP35
协议框架,同移动 IP 类似引入了两种地址,永久地址和临时地址分别用于表示移动节点的
身份和位置。但移动 IP 中两种地址均是网络地址,只是通过 IP 隧道的方式将永久地址对应
的数据报进行再次封装,并在隧道的两端(移动代理)才释放给目的终端,MTCP 协议中,永
久地址则被直接嵌入在传输层,从而使得网络层和传输层耦合度大大降低,并避免了 IP 隧
道封装机制,极大地节约了开销,且在许多情况下可以避免使用移动代理。本文将对 MTCP40
- 2 -
中国科技论文在线
原理做简单介绍,并给出一种通过原始套接字编程方法实现 MTCP 的基本原理并进行验证。
1 移动 IP 和移动 TCP 对照以及 TCP 协议原理
众所周知,原有 TCP/IP 协议框架具有“不可移动性”,既移动终端一旦改变接入点后,
将断开原有的传输层会话,特别是 TCP 会话(UDP 过程也因为终端 IP 地址的改变而断开)。
而传统 TCP/IP 协议[1] “不可移动”的根本原因,在于 IP 地址的双重身份,它既被用于标识网45
络地址,又用于标识会话,这在静态网络下没有问题,但由于网络接入点的改变导致网络地
址的改变,从而导致原有会话标识不可用。
为此,IETF 推出了一种移动 IP 协议,以实现移动终端在地址改变后,原有会话不被因
此断开的目的,其原理是,利用 IETF 标准中已有的 IP 隧道封装技术和新引入的 IP 永久地
址注册和临时地址通知机制,在原有 IP 协议栈中引入一个夹层对原 IP 数据报进行隧道封装,50
在疏导两端通过代理机制隐藏地址改变的事实以实现会话保持[2]。
但由于隧道机制引入过多的开销,所以目前应用不多。为此,我们前期提出了一种 MTCP
原理框架,并提交了 IETF 草案,其目标与移动 IP(MIP)一致,实现的基本思路也是剥离传
统协议栈中 IP 地址的双重身份,但与移动 IP 不同的是,我们不采用移动 IP 中的隧道机制,
而是在传输层引入永久 IP 地址,并用于传输层会话标识,从而使得网络层 IP 地址的改变不55
对传输层造成任何影响。这一方案相比 MIP 而言既降低了开销,另一方面可以允许在传输
层和网络层使用不同类型的 IP 地址,如在网络层为 IPv4 的情况下,传输层可以采用 IPv6
地址,甚至其他任意类型的唯一地址(URL)。
因此,移动 TCP 框架包含两个方面:
1.改变现有传输层封装机制,使之包含永久地址; 60
2.引入类似移动 IP 的地址改变通告以及永久地址与临时地址绑定的机制方法。
MTCP 协议[3]的具体方案为:
M-TCP 定义成了一种新的协议,它与 TCP 共存,其中源永久地址和目的永久地址作为
必不可少的元素包括在 M-TCP 报头里。和 TCP 相似,这两个地址都是可以缺省的,但是地
址长度必须存在并被设置为 0,这种情况下,接收端需要从网络层获得相应的地址。但是在65
校验和方面,在 M-TCP 报头中已经存在的地址并不使用 TCP 的伪首部。
此外,当 NAI 地址(包括源地址或者目的地址)使用时,要在地址中通过增加合适长
度的填充使其达到 32-bit 的长度,虽然填充字节并不包括在地址长度计算中。
新定义的 MTCP 报头格式如下图 1:
70
图 1 MTCP 报头格式
MTCP 在 IP 报文字段 Protocol(协议)中的定义为 99
相比传统的 TCP 的报头格式,新定义的 MTCP 报头格式在增加了传输层会话源地址类
- 3 -
中国科技论文在线
型、传输层会话源地址长度、传输层会话目的地址类型、传输层会话目的地址长度、传输层75
会话源地址和传输层会话目的地址六个字段。其中传输层会话源地址和传输层会话目的地址
分别为源永久地址和目的永久地址,它们仅作为源端与目的端的唯一标识,通信过程中的源
地址与目的地址封装在 IP 层,这就避免了传统 IP 的双重含义。
2 MTCP 协议的实现
SOCK_RAW 简介: 80
套接字(Socket)分为三类:流式套接字(SOCK_STREAM)、数据报式套接字
(SOCK_DGRAM)与原始套接字(SOCK_RAW)。
从用户的角度来看,SOCK_STREAM、SOCK_DGRAM 这两类套接字似乎的确涵盖了
TCP/IP 应用的全部,因为基于 TCP/IP 的应用,从协议栈的层次上讲,在传输层的确只可能
建立于 TCP 或 UDP 协议之上(图 2),而 SOCK_STREAM、SOCK_DGRAM 又分别对应85
于 TCP 和 UDP,所以几乎所有的应用都可以用这两类套接字实现。
图 2 TCP/IP 协议栈
原始套接字(Raw Socket)广泛应用于高级网络编程,也是一种广泛的黑客手段。著名90
的网络 sniffer、拒绝服务攻击(DOS)、IP 欺骗等都可以以 Raw Socket 实现。
Raw Socket 与标准套接字(SOCK_STREAM、SOCK_DGRAM)的区别在于前者直接
置"根"于操作系统网络核心(Network Core),而 SOCK_STREAM、SOCK_DGRAM 则"悬
浮"于 TCP 和 UDP 协议的外围,如图 3 所示:
- 4 -
中国科技论文在线
Application Program
Standard
Socket Raw Socket
Application
System
95
图 3 套接字与操作系统的层次关系
当我们使用 Raw Socket 的时候,可以完全自定义 IP 包,一切形式的包都可以"制造"出
来。
Raw socket 实现移动 TCP(MTCP) 100
实现方案
鉴于 TCP/IP 协议栈的软件包目前通常是系统内核的一部分,直接修改比较困难,目前
采用变通方法进行,具体思路是通过 RAW IP 协议编程,模拟这一新提出的协议。虽然可以
通过 NS2 等方法进行模拟仿真,但软件开发工作量大,且不能模拟和验证真实网络环境,
到最后实施还是必须放在系统中,因此,这里基于 Windows 的 Socket 编程中的 RAW Socket105
技术,实现移动传输层协议(Mobile TCP),编制两个程序。一个程序作为其中的家乡代理和
临时网络地址维护系统,另一个程序将在两个计算机终端上运行,用于模拟 Mobile TCP 的
会话建立、维护等过程。
MTCP 协议的实现
MTCP 的三次握手及在移动中保持连接(分节点发生可预知和不可预知移动两种情况),110
如下图:
Seq:1200, ack:-
报文段1:SYN
Seq:1201, ack:4801
报文段3:ACK
时
间
时
间
发送端 接收端
1
3
2
图 4 MTCP 三次握手过程
- 5 -
中国科技论文在线
将即将移动到的子网的
TA通过ICMP重定向报
文发送至A
若B没
移动,
发送不
成功,
超时后
重新按
照以前
的TA发
送
若B已移动,A与B
继续正常收发报文
按照
新的
TA
发送
数据
报
移动前的
主机B 主机A
移动后的主
机B
图 5 移动节点发生可预知的移动而保持连接 115
图 6 移动节点发生不可预知的移动而保持连接
验证:实现 MTCP 报文的收发
定义符合本方案的 MTCP 协议头:
typedef struct _MTCP{ 120
} MTCP;
定义符合 RFC791 的 IP 协议头
typedef struct tagIPHDR
{
}IPHDR,*PIPHDR; 125
(1) 发送端实现:
1、创建一个原始套接字,并设置 IP 头选项。
SOCKET sock;
sock = socket(AF_INET,SOCK_RAW,IPPROTO_IP);
这 里,我们设置了 SOCK_RAW 标志,表示我们声明的是一个原始套接字类型。创建130
原始套接字后,IP 头就会包含在接收的数据中,如果我们设定 IP_HDRINCL 选项,那么,
就需要自己来构造 IP 头。
- 6 -
中国科技论文在线
setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char *)&blnFlag, sizeof(blnFlag);
2、构造 IP 头和 MTCP 头
注意,构造 IP 头的时候,IP 协议字段 Protocol=IPPROTO_MTCP(99); 135
3、计算校验和
与普通报文校验和的计算相似,这里不再详细说明。
4 发送原始套接字数据报
sendto(s, (LPSTR)&mtcpReq, sizeof(mtcpReq), 0, (LPSOCKADDR)lpstToAddr,
sizeof(SOCKADDR_IN)); 140
(2) 接收端实现:
1 创建原始套接字
SOCKET sock;
sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag)) 145
2、把原始套接字 sock 绑定到本地网卡地址上
bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in))
3、 设置 SOCK_RAW 为 SIO_RCVALL,以便接收所有的 IP 包。其中 SIO_RCVALL
的定义为: #define SIO_RCVALL _WSAIOW(IOC_VENDOR,1)
ioctlsocket(sock, SIO_RCVALL, &dwValue) 150
4、接收原始数据包信息存储于 RecvBuf 中
recv(sock, RecvBuf, BUFFER_SIZE, 0);
并根据 的判断并显示 MTCP 报文。
155
图 7 MTCP 报文发送
- 7 -
中国科技论文在线
图 8 MTCP 报文接收
由上图可知,已经实现 MTCP 报文(协议号 99)的收发 MTCP 协议的相关实现(握手160
机制、窗口机制、移动 IP 机制等)由于篇幅所限,将作为以后介绍。
3 结论
MTCP 协议是基于移动传输层提供移动支持功能的协议,协议框架不仅可以和现有
TCP/IP 共存,且可以采用非 IP 格式的地址进行移动终端标识,从而可以更好地提供移动应
用。该协议框架将比 Mobile IP 具有更清晰的层次结构,便于系统优化和移动性管理。本文165
已实现了 RAW Socket 编程的基本模块,能够实现自定义传输层协议(99)的数据包发送,并
实现了所有数据包的 Sniffer 程序,在 Sniffer 中添加对该协议的过滤和进一步的处理机制即
可实现发送方和接收方的互动,从而对 MTCP 和 MUDP 进行模拟。
170
- 8 -
中国科技论文在线
[参考文献] (References) 175
[1] Behrouz ,Sophia Chung Fegan. TCP/IP 协议族[M]. 谢希仁. 清华大学出版社,2005,7.
[2] 孙利民,阚志刚,郑健平,等. 移动 IP 技术[M]. 北京:电子工业出版社,2003,8.
[3] 邝育军.Mobile Transmission Control Protocol for Mobility Management over IP networks[R].中国:重庆邮电
大学,RFC40065,2004
[4] 苏爱国,张光昭. 无线移动 TCP 性能的研究[J]. 新技术新业务,2001,31 (8):47-51. 180
[5] 张筱,张光昭,庄宏成. 一种移动 TCP 协议_ACKP 协议[J]. 技术应用,2001,31 (2):46-48.
[6] 隆益民.移动 IP 的实现结构[J].恩施职业技术学院学报,2006,18 (3):50-52.