菜鸟大kimmking() 13:02:32
ftp是传输文件最高效的方式之一。
为毛呢
1、基于tcp
2、足够简单
3、功能强大
先说第一点,直接基于tcp,省去了很多不必要的开销。
菜鸟大kimmking() 13:03:48
足够简单,大概只有20几个命令。
和几十个状态嘛
这两点结合起来,就是高性能的基础
菜鸟大kimmking() 13:04:48
一个ftp传输的过程,
先是client和server握手
client发出helo命令,server响应220成功或331之类的需要登录
然后client传递用户名密码,过去
菜鸟大kimmking() 13:06:05
如果验证通过,client就可以发命令对server进行操作了。
常见的操作,list put get mput mget 之类的
天之痕丶() 13:06:44
ftp是最低层的传输协议么?
菜鸟大kimmking() 13:06:55
说过了。
还有delete
这几个都是ftp的数据操作命令。
这里要引入一个ftp非常nb的设计。
命令与数据传输的分离。
菜鸟大kimmking() 13:08:12
client与server端建立一个socket连接后,
老男孩²º¹²() 13:08:26
ftp基于tcp, 这是应用层的协议
菜鸟大kimmking() 13:08:33
这个连接,仅仅负责传输client发出的命令,
以及返回server端的响应状态。
天之痕丶() 13:10:18
ftp和socket的区别在哪啊
菜鸟大kimmking() 13:11:19
ftp基于tcp,tcp基于socket
list put get mput mget 之类的命令
都是要上传和下载数据的。
有个细节可能大家不知道。
list 返回服务器端当前路径下的所有文件信息
菜鸟大kimmking() 13:12:21
就是 windows下的 dir
linux下的ls
但是这些信息,不是通过命令的这个tcp连接发过来的
跟文件传输一样
走额外的socket通道。
菜鸟大kimmking() 13:13:27
这里,ftp又引入几个新概念
主动模式和被动模式。
老男孩²º¹²() 13:13:50
ftp是协议, socket是端口句柄, 是对tcp的封装应用, 两者不是一类东西
天之痕丶() 13:14:04
可以理解ftp集成很多socket吗?
飞走了() 13:14:19
socket不是推送吗
菜鸟大kimmking() 13:14:20
所有的网络通信,基本上都是socket
老男孩²º¹²() 13:14:23
不能
菜鸟大kimmking() 13:14:27
comet是推送
飞走了() 13:14:48
老男孩²º¹²(283137706) 13:14:50
socket是种使用ftp/tcp之类网络协议的方式, 不能和协议来比较
菜鸟大kimmking() 13:15:24
例如,当一个机器在防火墙内被保护
飞走了(77606365) 13:15:27
我们最近好像要做一个东西,用socket推送东西
菜鸟大kimmking() 13:15:40
他可能不能创建一个监听的端口
老男孩²º¹²(283137706) 13:15:48
好比, ftp就像规定了一种电线的规格, socket就是插头,有了插头才能用电线
菜鸟大kimmking() 13:15:55
只能主动的去连接别人
这几句,能听得懂吧
小怪兽() 13:16:24
哈哈
说得好
我喜欢插头插座
菜鸟大kimmking() 13:16:53
tcp连接,总是一个先listenning,另外一个来connecting
小怪兽(997585659) 13:16:54
*,,,太有感觉了
菜鸟大kimmking() 13:17:18
拿上面的比喻就是,
小怪兽(997585659) 13:17:26
应该说tcp一直在端口监听
菜鸟大kimmking() 13:17:35
得先有一个插座,
client就是插头
小怪兽() 13:17:43
也对
菜鸟大kimmking() 13:17:58
哪个插头都能来插
client-server模式
ftp的主被动模式就是
由谁来创建一个listenning的端口
让对方来connecting
菜鸟大kimmking() 13:20:10
对于没有防火墙的情况,这两个模式差别不大。
其实 tcp连接一旦建立,通话双方基本是对等的。
菜鸟大kimmking() 13:21:34
ftp通过主连接传输命令和响应,通过额外的连接来传输数据。
就像是坐飞机,
人就是命令。
数据是托运的行李。
菜鸟大kimmking() 13:22:56
另外,引入了几个常见文件模式
ascii和binary
二进制模式下,文件的内容被直接发送到对方
不会做任何处理。
菜鸟大kimmking() 13:23:58
ascii的文本模式下,一般按行读取,可能会有编码问题。
好了,这些文件传输的基本功能ok了。
如果ftp只有这些基本功能,不会应用的这么广泛。
菜鸟大kimmking() 13:25:11
ftp用来处理大文件,还有一个巨大的优势是支持断点续传
这包括上传和下载的断点续传
飞走了() 13:25:27
ssh传文件,敲指令用的是这个吗
菜鸟大kimmking() 13:25:38
ps: http只支持下载的续传
老男孩²º¹²(283137706) 13:25:43
ssh是另外一个协议
菜鸟大kimmking() 13:25:46
ssh传文件的方式有好多种
老男孩²º¹²(283137706) 13:26:05
应该是个协议组 SSH
菜鸟大kimmking() 13:26:08
包括rz sftp
飞走了() 13:26:11
记得之前用SSH也能选二进制或者什么的
菜鸟大kimmking() 13:26:42
说实话,我觉得本群里知道http支持下载的断点续传的人,
应该不多
甚至,几乎没有
这是另外一个话题
飞走了() 13:27:06
我一直以为http不支持断点续传。。
菜鸟大kimmking() 13:27:18
回来ftp的上传下载断点续传上来。
老男孩²º¹²() 13:27:20
...这个还是很明显的吧, Chrome下载可以暂停...
飞走了() 13:27:34
但是ie不行啊
菜鸟大kimmking() 13:28:10
http协议头里有个range命令,可以告诉服务器,从文件的什么位置开始传输。
飞走了() 13:28:15
而且可能过一段时间chrome下载也会失败
菜鸟大kimmking() 13:28:38
如果服务器端的文件是动态生成的,什么端点续传功能都失效
飞走了() 13:28:49
哦哦
菜鸟大kimmking() 13:28:57
菜鸟大kimmking() 13:27:17
回来ftp的上传下载断点续传上来。
ftp创造了端点续传这个功能
大概的流程是,
菜鸟大kimmking() 13:30:37
1、先告诉server,你要从文件的哪个位置,第几个字节开始
2、请求此文件的数据
上传也大概一样。
很简单吧。
别小看这个简单的流程。
我们可以在自己实现的上传下载工具里改进一下。
菜鸟大kimmking() 13:31:42
1、主线程,拿到文件的大小。
老男孩²º¹²() 13:31:52
IE废柴不是一天两天了, 它的断点续传需要一些小技巧才能用
据说IE9开始有断点续传了, 没试过
菜鸟大kimmking() 13:32:16
2、把文件大小除以10,计算每一片的起始文字。
飞走了(77606365) 13:32:27
起始文字
菜鸟大kimmking() 13:32:55
3、起10个线程,每个线程从指定的位置请求此文件指定的数据量。
10个线程一起跑,拿到数据后,再合并成一个完整的文件。
这样,一个多线程的上传下载工具,就出来了。
飞走了(77606365) 13:33:47
你说的额这个好像flashget的样子
菜鸟大kimmking() 13:33:48
这才是ftp的nb之处。
ftp工具,都支持这个功能。
飞走了() 13:34:04
快车会显示一个点阵图,好像
很形象
不过好像有的网站把这种功能屏蔽了
菜鸟大kimmking() 13:34:47
ftp是计算机古代,很简洁而优美的设计。
虽然现在也能设计出更多更好的文件操作协议。
菜鸟大kimmking() 13:35:52
但想再做到ftp的这种简介优美,以及被广泛支持,
都是不太可能了。
over
飞走了() 13:36:32
完了?
菜鸟大kimmking() 13:36:45
没啦
命令自己看去
rest retr stor
我为什么知道这些东西呢
因为,我大学的时候自己做过ftp传输工具
菜鸟大kimmking() 13:37:52
基于tcp,自己实现的ftp协议
刚毕业的时候,正好把它用到项目里。
基于c++,做成activex,嵌入ie
菜鸟大kimmking() 13:38:55
实现ftp、http的上传下载的端点续传
http的上传,在server端做了一些手脚
因为它本身不支持
飞走了() 13:39:26
server端做手脚
?
菜鸟大kimmking() 13:39:44
实现的效果是,http的上传,可以达到10M/s
菜鸟大kimmking() 13:41:15
我学ftp是10年前的事儿了
我用到项目里,也是06-07年的事儿
所以说,真正掌握的知识,
是不会忘记的
如果忘记了,说明你根本没掌握
一千年以后
server端坐手脚?
菜鸟大kimmking() 13:41:59
根本没想清楚,搞明白
工作QQ() 13:42:02
ftp?
不是有专门的工具
菜鸟
菜鸟大kimmking() 13:42:15
http只支持下载的断点续传
工作QQ(827809326) 13:42:17
你咋做的
菜鸟大kimmking() 13:42:20
上传的话,
需要自己做个servlet
client端多线程发送一片片的文件
servlet拿到以后,
飞走了(77606365) 13:42:53
那其实就相当于反向的下载
菜鸟大kimmking() 13:42:58
合并成一个完整的文件。
yes
一千年以后
这个有实际的用途吗
飞走了(77606365) 13:43:39
你如果有自己的主站就有用
一千年以后
是使上传加速吗
飞走了() 13:43:53
上传资源文件,如果特别多特别大就很费劲了
工作QQ() 13:44:15
tcp吧
飞走了() 13:44:44
现在就记得好像是8个层了
八月() 13:45:58
K神,有开发的有什么框架吗?
老男孩²º¹²() 13:46:40
八层...
老男孩²º¹²() 13:48:16
OSI 是7层 , TCP/IP 是4层, 哪来的八层
五毒|小兵() 13:48:47
啥时候能讲讲
系统调优不
标准自己很难界定,
又不知道行业里面的通常标准是什么,
一个正常的系统里面压力测试是多少人, 并发是多少人, 吞吐量是多少, 响应时间多少算是合适的啊
猪猪狭--哎呀A呀<> 13:48:56
网络好像是7层协议?
OSI包括 TCP/IP 4层?
我也很迷茫() 13:49:40
K神的讲座,有人在整理吗
老男孩²º¹²() 13:50:36
OSI 和 TCP/IP 是两个不同的网络分层模型
猪猪狭--哎呀A呀
我记得网络7层就包括TCP/IP的四层