Skip to content

logici/MiniFtp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MiniFtp

目的是学习融汇贯通socket网络编程和整个问题设计分析过程记录

from:https://www.cnblogs.com/webor2006/p/4312539.html

需求分析:

  • 1.建立连接(网络:tcp/ip,模式:客户端/服务器模式,采用socket编程)
  • 2.解析命令格式及其相应的动作
  • 3.向客户端回应相对的应答

1.建立连接

- 1.socket,listen,bind,connect,accept,
- 2.封装好读写模板
- 3.epoll(select)并发
- 4.传输文件的格式
- 5.适配不同的系统(文件编码格式解析不同)

例如:

win上的换行字符为\r\n,在linux上是\n。

2.工作模式

ftp它有两个连接,一个是命令连接,另一个是数据连接。命令连接是由客户端发出命令请求,服务端对命令做出应答;数据连接是有两种模式的,一个是服务端发送数据给客户端,另一个则是相反。分别称为主动模式(服务器向客户端发起连接请求而建立起的数据传输通道),被动模式(客户端向服务器发起的),而且他们之间个通信通道是独立互不干扰的,也就是互相发送都是可以的。

首先,无论哪一种模式,都是客户端发送控制请求,建立连接,假设此时client的ip为ip1,端口为port1,而server端的ip为ip2,端口为port=21(为什么?),建立一条tcp通道,可以进行命令控制的通信。而数据通道需要另外建一条通道,如果要建立另外一条通道则需要知道client的另外一个port2,那么在控制通道中就要发送相关的信息给server,以便server能够主动连接client。

流程为:

  • 主动模式

1.Client----------------------------》Server

发送请求连接,建立链路

2.Client向Server发送PORT命令,设定主动模式(主动模式)

发送之后,Client做了以下动作:

C创建套接字

C绑定一个临时端口Port

开启监听,等待S的连接

将自己的ip端口格式化为h1,h2,h3,h4,p1,p2发送给S端

3.Server端响应号200

Sever解析客户端发送过来的地址(ip端口)包,保存起来

4.Client发送LIST命令给Server端

Server端接收到LIST命令,做出以下动作:

检测是否收到过选择模式的命令(PORT、PASV)

如果没有接收过模式命令,则回应号425 Use PORT or PASV first,重新发送模式命令

如果有接收了并且为PORT,则Server端开始创建套接字,bind20端口,主动connectClient,从而建立了数据链路。

5.做好上述动作后,发送号150应答给Client,表示准备好了,可以进行数据传输了

6.数据传输

7.数据发送结束后,发送226应答给Client,以表示数据传输结束。

  • 被动模式

1.同上

2.Client发送模式命令PASV给Server

3.Server接收到命令后,做出以下动作

发送回应号227

创建监听套接字

绑定一个临时端口

在套接字上监听

将ip端口等信息格式化为h1,h2,h3,h4,p1,p2响应给Client

4.收到回应之后,发送LIST命令给Server

检测之前Client有没有收到模式命令,同主动模式,最后调用accept等待Client的连接,从而建立数据连接

5.服务端发送150回应,表示准备好了,可以进行传输了

6.传输

7.Server发送226应答给客户端,表示结束了传输

  • 那为什么要有这两种模式呢?这实际上是跟NAT或防火墙对主被动模式有关系

NAT的产生是为了解决IP地址不足的问题,内部网络(多个私有ip)可以通过一个公网ip来访问全球ip,将有助于减缓可用ip地址的枯竭。并且还能够有效避免来自网络外部的攻击,隐藏并保护网络内部的计算机。主要的功能:

1.宽带分享:这是NAT主机的最大的功能

2.安全防护:NAT之内的PC联机到Internet上面时,他所显示的IP是NAT主机的公共IP,所以Client端的PC当然就具有一定程度的安全了,外界在进行portscan(端口扫描)的时候,就侦测不到源Client端的PC了。

具体原理有待查 NAT 防火墙

/*

小知识点:

ftp

sftp

vsftp

vsftpd

scp

ssh

openssh

*/

About

learn for network with coding ftp

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages