2004年11月27日

  NS是一个离散事件模拟器,是一种常用的系统模拟模型。就是说,时间决定了系统状态的改变,状态的修改是在事件发生的时候进行的,典型的事件包括分组到达、时钟超时等。
  NS本身已有大量的构件库,这些构件库是由两种面向对象的语言编写的:C++和Otcl。Otcl就是ObjectTCL,即面向对象的TCL(Toolkit Command Language)。Otcl就是在TCL中加入了类的概念。
  NS的模拟步骤一般如下:
  (1)编写TCL脚本。配置网络的拓扑结构。
  (2)建立协议代理,包括端设备的协议绑定和通信业务量模型的建立。
  (3)配置业务量模型参数。
  (4)设置trace对象。trace就是把模拟过程中发生的特定事件记录在trace文件中,我们就是通过trace文件来分析研究。
  (5)配置其他过程。
  (6)用NS解释执行TCL脚本。
  (7)分析trace文件。
  (8)调整配置业务量模型重新进行模拟。



一个trace文件的结构:
event time from_node to_node pkt_type pkt_size flage fid arc_addr dst_addr seq_num pkt_id
event:事件,包括如下几种:
 r:receive(at to_node)
 +:enqueue(at queue)
 -:dequeue(at queue)
 d:drop  (at queue)
time:事件发生时间(单位:秒)
from_node:源地址
to_node:目的地址
pkt_type:分组类型
pkt_size:分组大小
flage:标志位
fid:IPV6定义的流标识符
src_addr:分组源地址
dst_addr:分组目的地址
seq_num:序列号
pkt_id:分组唯一标识符

FTP 是一种数据传输协议 (File Transfer Protocol),它的连接模式有两种: 主动模式( active )和被动模式( passive )。


以下说明FTP的连接是怎样建立的:


在 active 模式下 (一般预设的模式):


FTP client 开启一个随机选择的TCP port 呼叫 FTP server 的 port 21请求建立连接。当完成 Three-Way Handshake 之后,连接就成功建立,但这仅是命令通道的建立。
当两端需要传送数据资料的時候,client 透过命令通道用一个 port command 告诉 server ,client可以用另一个TCP port 做数据通道。
然后 server 用 port 20 和刚才client 所告知的 TCP port 建立数据连接。注意:连接方向是从server 到 client 的,TCP 分组中会有一个 SYN flag。
然后 client 会返回一个带 ACK flag的确认分组﹐并完成另一次的 Three-Way Handshake 过程。这時候,数据连接才能成功建立。开始数据传送。
 
在 passive 模式下:


FTP client 开启一个随机选择的TCP port 呼叫 FTP server 的 port 21请求建立连接,完成命令通道的建立。
当两端需要传送数据的時候,client 通过命令通道发送一个 PASV command 給server,要求进入 passive 传输模式。
然后 server 像上述的正常模式之第 2 步驟那樣,挑一個TCP port ,並用命令通道告訴 client。
然后 client 用另一个TCP port 呼叫刚才 server 告知的 TCP port 来建立数据通道。此时分组中带有 SYN flag。
server 确认后回送一个 ACK 分组。并完成所有握手过程﹑成功建立数据通道。
开始数据传送。 在实际使用中, active mode 用来登入一些架设在主机上没有安装防火墙的 FTP server,或是架设在 client side 的 FTP server! Passive mode (简称 PASV)用来登陆一些架设于防火墙保护下而又是开设于主机上的 FTP server!