kimmking 的讲座【TCPIP】


 

菜鸟大kimmking()  13:02:32

 

ftp是传输文件最高效的方式之一。

 

为毛呢

 

1、基于tcp

 

2、足够简单

 

3、功能强大

 

先说第一点,直接基于tcp,省去了很多不必要的开销。

 

菜鸟大kimmking()  13:03:48

 

足够简单,大概只有20几个命令。

 

和几十个状态嘛

 

这两点结合起来,就是高性能的基础

 

菜鸟大kimmking()  13:04:48

 

一个ftp传输的过程,

 

先是clientserver握手

 

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

 

clientserver端建立一个socket连接后,

 

老男孩²º¹²()  13:08:26

 

ftp基于tcp, 这是应用层的协议

 

菜鸟大kimmking()  13:08:33

 

这个连接,仅仅负责传输client发出的命令,

 

以及返回server端的响应状态。

 

天之痕丶()  13:10:18

 

ftpsocket的区别在哪啊

 

菜鸟大kimmking()  13:11:19

 

ftp基于tcptcp基于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

 

另外,引入了几个常见文件模式

 

asciibinary

 

二进制模式下,文件的内容被直接发送到对方

 

不会做任何处理。

 

菜鸟大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

 

这才是ftpnb之处。

 

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

 

实现ftphttp的上传下载的端点续传

 

http的上传,在server端做了一些手脚

 

因为它本身不支持

 

飞走了()  13:39:26

 

server端做手脚

 

 

菜鸟大kimmking()  13:39:44

 

实现的效果是,http的上传,可以达到10M/s

 

菜鸟大kimmking()  13:41:15

 

我学ftp10年前的事儿了

 

我用到项目里,也是06-07年的事儿

 

所以说,真正掌握的知识,

 

是不会忘记的

 

如果忘记了,说明你根本没掌握

 

一千年以后<[email protected]>  13:41:55

 

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

 

一千年以后<[email protected]>  13:43:24

 

这个有实际的用途吗

 

飞走了(77606365)  13:43:39

 

你如果有自己的主站就有用

 

一千年以后<[email protected]>  13:43:47

 

是使上传加速吗

 

飞走了()  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<[email protected]>  13:51:14

 

我记得网络7层就包括TCP/IP的四层

 

你可能感兴趣的:(多线程,socket,网络协议,ssh,ftp)