求教关于FTP的问题,高手解答,在线等。

客户端连上ftp服务器,从ftp下载数据,假设数据下载结束后,TCP的释放应该首先是由客户端向服务器发FIN结束TCP释放,还是首先由服务器向客户端发FIN,然后再继续四... 客户端连上ftp服务器,从ftp下载数据,假设数据下载结束后,TCP的释放应该首先是由客户端向服务器发FIN结束TCP释放,还是首先由服务器向客户端发FIN,然后再继续四次挥手后的其他3次?
我的理解是,若是下载,则由客户端发起,因为客户端知道数据已经完整接受了,所以主动发起FIN结束TCP。上传的话应该是服务器发起的fin。不知道对不对。 当然FTP有两个TCP连接,我这里指的是数据面的tcp连接,控制面的TCP连接释放不知道由谁先发起。
展开
 我来答
liang54358
2011-12-07 · TA获得超过1668个赞
知道大有可为答主
回答量:502
采纳率:0%
帮助的人:443万
展开全部
1 断开连接其实不区分客户端和服务器端,任何一方都可以调用close(or closesocket)之类
的函数开始主动终止一个连接。
2 当调用close函数断开一个连接时,主动断开的一方发送FIN报文给对方。当被动关闭的一方收到FIN报文时,它会发送ACK确认报文。因为TCP是双工的,也就是说,你可以想象一对TCP连接上有两条数据通路。当发送FIN报文时,意思是说,发送FIN的一端就不能发送数据,也就是关闭了其中一条数据通路。被动关闭的一端发送了ACK后,应用层通常就会检测到这个连接即将断开,然后被动断开的应用层调用close关闭连接。
3 一旦当你调用close(or closesocket),这一端就会发送FIN报文。也就是说,现在被动
关闭的一端也发送FIN给主动关闭端。有时候,被动关闭端会将ACK和FIN两个报文合在一起发送。主动关闭端收到FIN后也发送ACK,然后整个连接关闭。
4 你的补充应该是合理的,不过这只是程序的实现方式,你找一个ftp源码看看就知道了。
更多追问追答
追问
我知道都可以调用close关闭tcp连接。不过上传和下载肯定是有一方先发起的FIN。至于四次挥手或者三次挥手俺是知道的,呵呵。还是谢谢了。没时间看ftp源码啊,只是分析下log,正好遇到ftp这个应用层的协议,不是太了解。
追答
刚刚查了一下,这里面还有不少内容呢,我理解是:
下载 客户端close
主动模式上传 客户端close
被动模式上传 服务器close
可以参考一下http://www.ibm.com/developerworks/cn/linux/l-cn-socketftp/index.html?ca=drs-
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式