1. ftp非为主动和被动模式,被动模式
client--------------server
1. 主连接:server端的21端口为控制端口,数据端口为新的端口
client--------------------------->server
1------------>syn (seq=x)
syn+ack(seq=k, ack=x+1)<-------------------2
3----------------->ack (tcp三次握手结束) (ack=k+1)
三次握手结束后,为ftp用户秘钥传输文件格式大小等过程
response<----------------------4(新用户服务就绪)
5----------------------->request(command:user, arg:)
response<----------------------6(确认用户,需要密码)
7--------------------------->request(提供密码)
response<----------------------8(code:登录成功, arg)
9--------------------------->request(TYPE, I,使用二进制传输)
response<----------------------10(转为二进制)
11--------------------------->request(EPSV, 请求建立被动连接)
response<----------------------12(进入被动模式,返回新的数据端口)
2. 子连接(数据传输。新的端口)
1 2 3 前3个包为tcp三次握手
4--------------------------->request(请求数据大小)
response<----------------------5(返回SIZE)
6--------------------------->request(RETR:请求下载文件)
response<----------------------7(打开二进制文件)
response<----------------------8(传输数据FTP_DATA)
9--------------------------->request()
response<----------------------12(传输完成)
主动端, 被动端
断开tcp子连接(客户端发给服务端)
client----------------------------->server
1--------------------------->【ACK】 seq=x, ack=k
2--------------------------->【FIN,ACK】seq=x, ack=k
seq=k, ack=x+1【ACK】<----------------------3
断开主连接(服务端发给客户端)
server-------------------------------------->client
1--------------------------->【FIN,ACK】seq=x ,ack=k
seq=k, ack=x+1【ACK】<---------------------------2
seq=k, ack=x+1【FIN,ACK】<---------------------3
4--------------------------->【ACK】req=x+1, ack=k+1