• ftp主动模式与被动模式交互过程分析


    1.相关介绍

    1.1主动模式和被动模式

    主动模式:服务端通过指定的数据传输端口(默认20),主动连接客户端提交的端口,向客户端发送数据。

    被动模式:服务端采用客户端建议使用被动模式,开启数据传输端口的监听,被动等待客户端的连接然后向客户端发送数据。

    一言以蔽之,服务端主动连接客户端就是主动模式,服务端被动等待客户端连接(客户端主动连接服务端)就是被动模式。

    ftp有主动模式被动模式而ssh等其他协议没有这种说法的根源是:ftp要使用别的端口来传输数据。

    1.2本文环境

    192.168.220.128--centos 6.5,作为服务端,通过yum安装的vsftpd,使用默认配置

    192.168.220.130--windows 7,作为客户端。

    windows cmd中的ftp只支持主动模式我们以之来演示主动模式的交互过程,一般的ftp客户端都优先采用被动模式这里我们以FileZilla Client来演示被动模式的交互过程。

    2.主被动交互过程数据包分析

    2.1主动模式交互过程分析

    在cmd中登录后,执行ls -l,以下是ls -l执行的交互数据包

     

    4--客户端(52667) 请求服务端(21)连接本机192.168.220.128:52670

    5--服务端(21)向客户端(52667)表示可以,不过下次最好用被动模式

    6--客户端(52667)请求服务端(21)执行:ls -l

    7--握手包1,服务端默认数据连接端口(20),主动连接客户端给过来的端口(52670)

    8--握手包2,客户端(52670)向服务端(20)表示同意连接

    9--握手包3,服务端(20)确认与客户端(52670)建立连接

    10--服务端(21)向客户端(52667)表示以下是命令执行返回结果

    11--返回结果数据包1

    12--返回结果数据包2

    13--挥手包1,服务端(20)向客户端(52670)表示数据已完成传输

    14--挥手包2,客户端(52670)回复服务端(20)己方也准备处理完成

    15--服务端(21)向客户端(52667)表示数据已传输完成

    16--客户端(52667)向服务端(21)表示好的

    17--挥手包3,客户端(52670)向服务端(20)表示可断开连接

    18--挥手包4,客服端(20)向客户端(52670)确认断开连接

    2.2被动模式交互过程分析

    在FileZilla Client中登录后,点击列出根目录,以下是点击列出根目录后的交互数据包

    21--客户端52550请求服务端执行:cd /

    22--服务端(21)回复客户端:250 Directory successfully changed.

    23--客户52550请求服务端执行:pwd

    24--服务端(21)回复客户端:257 "/"

    25--户端(52550)请求下一操作使用被动模式

    26--服务端(21)同意采取被动模式,并返回自己将要监听的地址192.168.220.128:64758

    27--客户端(52550)请求执行:ls

    28--握手包1,客户端52552请求连接64758

    29--握手包2,服务端64758回复同意连接请求

    30--握手包3,客户端52552回复服务端64758确认建立数据传输链路连接

    31--服务端表示将要发回命令执行结果

    35--返回结果数据包1(64758端口到52552端口)

    36--返回结果数据包2(64758端口到52552端口)

    37--挥手包1,服务端(64758)表示自己数据已完全传输

    38--挥手包2,客户端(52552)表示自己数据也将完成传输

    39--服务端(21)向客户端(52550)表示执行结果已完全返回

    40--客户端(52550)向服务端(21)表示好的

    41--挥手包3,客户端(52552)向服务端(64758)表示可断开数据传输链路

    42--挥手包4,服务端(64758)回复客户(52552)端确认断开

    3.关于NAT下的ftp等几个问题的讨论

    3.1在被动模式中,服务端数据传输的端口由客户端指定吗

    答案是否定的。在一些资料中可以看到客户端决定服务端端口的说法,但在2.2交互过程中我们已可以清楚地看到,客户端只是决定使用被动模式,服务端应允后就传回了自己监听的端口。

    3.2nat环境下ftp存在问题的根本原因是什么

    在实践中我们会发现,网络nat环境下不论是主动模式还是被动模式,当执行ls等需要建立数据传输链路的文件时,都会出现超时报错(ftp:connect: Connection timed out.)。

    根本的原因是ftp传输数据要使用别的端口,直接的原因是要么是客户端在应用层中指出自己的ip:port(主动模式)要么是服务端在应用层中指出自己的ip:port

    在主动模式中,服务端主动连接客户端的ip:port,所以(从原理上讲)只要将服务端的数据传输端口(默认20)也做映射使该端口也能访问客户端网络即可。(但实际遇到的情况中,即便做了映射也还是不行,暂未明其原因)

    在被动模式中,服务端指出自己的ip:port,比如我们这里假设服务端真实ip为10.10.220.128,映射ip为192.168,.220.128,服务端将要监听的地址10.10.220.128:64758,发给客户端(192。168.220.130),客户端(192.168.220.130)就向10.10.220.128:64758发起连接请求。但实际上客户端只有到达其映射地址(192.168.220.128)的路由,并没有直接到10.10.220.128的路由,所以连接请求必然是没有回应的。

    3.3为什么我们可以ftp服务器

    众所周知,上网时个人一般都只能分配到一个私网地址,从这角度来说我们要ftp到服务器,使用主动模式肯定会出问题,但在实际操作中可以看到一般都可以成功ftp。推测可能是nat设备拦载了ftp指定ip:port的数据包,将其修改为了映射出去的ip:port。

  • 相关阅读:
    大数据量业务订制和解决方案思考
    gc内存回收机制
    HashMap的扩容机制, ConcurrentHashMap和Hashtable主要区别
    开源工作流引擎内核主要关心的是什么?
    mysql查询计划
    mysql 存储引擎MYSIAM和INNODB特性比较
    任意输入字符,对字符匹配进行判断
    java 对list中对象按属性排序
    mysql 写数据操作几次硬盘?
    win7_64位+U盘制作centos6.3+安装centos
  • 原文地址:https://www.cnblogs.com/lsdb/p/8038433.html
Copyright © 2020-2023  润新知