FTP交互流程与开发思考
2018-02-08 11:47
176 查看
分析的是被动模式。
打开8uftp,用wireshark抓包如下(图1):
根据卷1的第27章,
FTP客户和服务器有两个独立的连接:控制连接和数据连接
(1)控制连接由命令和应答构成。命令和应答成对出现。命令由3或4个字节的大写ASCII字符构成。应答由ASCII形式的3个数字构成,并根有报文选项。软件系统根据数字来决定如何应答,而报文选项时给人看的。
一些典型的应答,如下:
----------------------------------------------
这个卷1可能太久远了。只讲解了PORT模式,没有讲解被动模式。
================
这篇文章我觉得写得不错粘贴出来,http://blog.csdn.net/longyc2010/article/details/43113173,写到:
“为了解决服务器发起到客户的连接问题,有了另一种FTP连接方式,即被动方式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。被动模式下,当开启一个FTP连接时,客户端打开两个任意的本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,提交PASV命令。然后服务器会开启一个任意的端口(P > 1024),返回如227 entering passive mode (h1,h2,h3,h4,p1,p2)。它返回了227开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘 256再加上最后一个数字,这就是FTP服务器开放的用来进行数据传输的端口。
如得到227 entering passive mode(h1,h2,h3,h4,p1,p2),那么端口号是p1*256+p2,ip地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后,会通过N+1号端口连接服 务器的端口P,然后在两个端口之间进行数据传输。”
博主推测一下这段话的意思:
客户端的两个端口N和N+1分别用来控制连接和数据连接。
服务器的两个端口21和P分别用来控制连接和数据连接。
先看一下命令PASV,如下:
再看一下应答227,如下:
有了上面的知识储备,基本就能看懂图1了。不过LIST指令感觉有点复杂。因为上文提到连接管理的第3条就是目录列表。因此LIST需要打开数据连接,就需要三次握手和四次挥手。
图1的NO17和NO19是控制连接。NO17是命令,NO19是应答。
NO18.20.21是打开数据连接的三次握手。
根据http://blog.csdn.net/yanxi252515237/article/details/51955675得知“
NO25.26.27.28是四次挥手。
NO22看了一下里面,应该是目录的名字权限日期等信息。
NO23和NO24看起来是从控制和连接两个角度对NO22做出回应(这个是估计的,因为我现在对seq、ACK理解的还是糊涂状态)。
============================================================
然后把seq和ACK的绝对数值贴出来如下:
既然对SEQ和ACK不大懂,那么就了解一下,根据酷壳文章:
Sequence Number是包的序号,用来解决网络包乱序(reordering)问题。
Acknowledgement Number就是ACK——用于确认收到,用来解决不丢包的问题。
SeqNum的增加是和传输的字节数相关的。
看了上面这几段话,再把这个图复制一遍,如下:
可以看出有两个连接
Client<------->Server
7684<-------->21
7685<-------->4099
而seq和ack是针对单个连接来说的。
就拿7685<-------->4099这个连接来说吧,从图中单独提取出来,如下图:
仔仔细细看看上图,
这是个数据连接,其中
1、2、3是握手,由Client发起
4是传送目录列表,方向:Client<----Server
5是确认,方向:Client---->Server
6、7、8、9是挥手,由Server发起
嗯。到这里了,感觉SEQ和ACK的值还是没太弄明白,再贴个图:
=============================================================
FTP开发思考:分而治之。
打开8uftp,用wireshark抓包如下(图1):
根据卷1的第27章,
FTP客户和服务器有两个独立的连接:控制连接和数据连接
(1)控制连接由命令和应答构成。命令和应答成对出现。命令由3或4个字节的大写ASCII字符构成。应答由ASCII形式的3个数字构成,并根有报文选项。软件系统根据数字来决定如何应答,而报文选项时给人看的。
一些典型的应答,如下:
----------------------------------------------
这个卷1可能太久远了。只讲解了PORT模式,没有讲解被动模式。
================
这篇文章我觉得写得不错粘贴出来,http://blog.csdn.net/longyc2010/article/details/43113173,写到:
“为了解决服务器发起到客户的连接问题,有了另一种FTP连接方式,即被动方式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。被动模式下,当开启一个FTP连接时,客户端打开两个任意的本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,提交PASV命令。然后服务器会开启一个任意的端口(P > 1024),返回如227 entering passive mode (h1,h2,h3,h4,p1,p2)。它返回了227开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘 256再加上最后一个数字,这就是FTP服务器开放的用来进行数据传输的端口。
如得到227 entering passive mode(h1,h2,h3,h4,p1,p2),那么端口号是p1*256+p2,ip地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后,会通过N+1号端口连接服 务器的端口P,然后在两个端口之间进行数据传输。”
博主推测一下这段话的意思:
客户端的两个端口N和N+1分别用来控制连接和数据连接。
服务器的两个端口21和P分别用来控制连接和数据连接。
先看一下命令PASV,如下:
再看一下应答227,如下:
有了上面的知识储备,基本就能看懂图1了。不过LIST指令感觉有点复杂。因为上文提到连接管理的第3条就是目录列表。因此LIST需要打开数据连接,就需要三次握手和四次挥手。
图1的NO17和NO19是控制连接。NO17是命令,NO19是应答。
NO18.20.21是打开数据连接的三次握手。
根据http://blog.csdn.net/yanxi252515237/article/details/51955675得知“
NO25.26.27.28是四次挥手。
NO22看了一下里面,应该是目录的名字权限日期等信息。
NO23和NO24看起来是从控制和连接两个角度对NO22做出回应(这个是估计的,因为我现在对seq、ACK理解的还是糊涂状态)。
============================================================
然后把seq和ACK的绝对数值贴出来如下:
既然对SEQ和ACK不大懂,那么就了解一下,根据酷壳文章:
Sequence Number是包的序号,用来解决网络包乱序(reordering)问题。
Acknowledgement Number就是ACK——用于确认收到,用来解决不丢包的问题。
SeqNum的增加是和传输的字节数相关的。
TCP重传机制
TCP要保证所有的数据包都可以到达,所以,必需要有重传机制。注意,接收端给发送端的Ack确认只会确认最后一个连续的包,比如,发送端发了1,2,3,4,5一共五份数据,接收端收到了1,2,于是回ack 3,然后收到了4(注意此时3没收到),此时的TCP会怎么办?我们要知道,因为正如前面所说的,SeqNum和Ack是以字节数为单位,所以ack的时候,不能跳着确认,只能确认最大的连续收到的包,不然,发送端就以为之前的都收到了。看了上面这几段话,再把这个图复制一遍,如下:
可以看出有两个连接
Client<------->Server
7684<-------->21
7685<-------->4099
而seq和ack是针对单个连接来说的。
就拿7685<-------->4099这个连接来说吧,从图中单独提取出来,如下图:
仔仔细细看看上图,
这是个数据连接,其中
1、2、3是握手,由Client发起
4是传送目录列表,方向:Client<----Server
5是确认,方向:Client---->Server
6、7、8、9是挥手,由Server发起
嗯。到这里了,感觉SEQ和ACK的值还是没太弄明白,再贴个图:
=============================================================
FTP开发思考:分而治之。
相关文章推荐
- FTP交互流程与开发思考[3]
- FTP交互流程与开发思考[2]
- 视频交互、视频会议、语音对讲、IM、开户等软件的基本流程和开发指南
- 软件项目开发流程的一点个人理解和思考
- 软件开发流程的一些思考
- (和硬件交互的)APP开发流程
- 关于高校内软件开发流程的思考
- web工作流管理系统开发之十一 流程数据与业务数据的交互
- 工作流管理系统开发之十一 流程数据与业务数据的交互
- 我在阿里这仨月 前端开发流程 前端进阶的思考 延伸学习的方式很简单:google 一个关键词你能看到十几篇优秀的博文,再这些博文中寻找新的关键字,直到整个大知识点得到突破
- 对项目开发流程的思考和小结
- 开发流程---产品评审细节思考
- Kinect 开发 —— 用户交互设计的若干思考
- 对页端开发高性能(交互/动画) Mobile WebApp 的一些思考
- Unity—Android通用SDK(交互)开发流程
- Go游戏服务器开发的一些思考(二十九):登录流程(二)
- 关于区域医疗流程开发的思考
- 微信公众号开发2——消息交互流程
- 《程序员的呐喊》:一个熟悉多种语言的老程序员对编程语言、开发流程、google的战略等的思考,比较有趣。 五星推荐
- 对Java开发的思考(代码组织、设计模式、开发流程)