web项目中使用的协议 文件传输协议FTP、SFTP和SCP

DNS协议

1、DNS协议的作用是将域名解析为IP,网络上的每个站点的位置是用IP来确定的,访问一个网站首先就要知道它的IP,不过数据组成的IP记起来不方便,所以就使用域名来代替IP,由于IP和域名的对应关系经常变化,所以就需要有专门将域名解析为IP的服务器,我们称为:DNS服务器。把域名发给DNS服务器,它就返回相应的IP。在window中可以使用nslookup 或者ping 的命令查看DNS解析后的IP。

2、世界各地有很多DNS服务器,ISP(Internat服务提供商)会提供给我们默认的DNS服务器。

TCP/IP协议

1、TCP和IP协议,通常会把他们放在一起,其实他们是不同的两种协议,作用也不一样。

2、IP协议:是用来查找地址,对应网际互联层,TCP协议:是用来规范传输规则的,对应的传输层。IP只负责找到地址,具体怎么传输是由TCP来完成。类似送快递,货单上填写的地址以及怎么根据填写的地址找到客户,这相当于IP协议的功能。而具体怎么将货物送过去,最后让客户签收签字就相当于TCP协议。

3、TCP传输前会进行三次沟通,我们称为"三次握手",传完数据断开的时候进行四次沟通,我们称为"四次挥手"。

4、TCP的两个序号和三个标志位的含义:

4.1、seq:sequence number的缩写,表示所传数据的序号。TCP传输时的每一个字节都有一个序号,发送数据时会将数据的第一个序号发送给对方,接收方会根据序号check是否接收完整,不完整则会重新传送。保证了数据的完整性。

4.2、ack:acknoledgement number缩写,表示确认号。接收方用来给发送方反馈是否成功接收到数据信息,它的值为希望接收的下一个数据包的起始序号

4.3、ACK:确认位,只有ACK=1的时候ack才起作用,正常通信时ACK=1,第一次发起请求时,因为没有需要确认接收的数据所以ACK为0。

4.4、SYN:同步位,用于在建立连接时同步序号,刚开始建立连接时并没有历史接收的数据,所以ack也就没办法设置。SYN的作用就是,当接收端接收到SYN=1的报文时就会将ack设置位接收到的seq+1的值。SYN会在前两次握手时都为1,是因为通信的双方的ack都需要设置一个初始值;

4.5、FIN:终止位,用来在数据传输完毕后释放连接。

5、三次握手流程:

第一次握手:客户端向服务端发送SYN包,等待服务端响应,并进入SYN-SEND状态

第二次握手:服务端收到SYN包,并确定SYN=ACK+1,然后响应一个SYN包和ACK包。客户端进入SYN-RECV状态。

第三次握手:客户端收到服务端SYN+ACK包。向服务器发送确认包ACK。发送完毕进入ESTABLISHED状态。

6、四次挥手:

第一次挥手:主动关闭连接一方,发送FIN包。此时发送FIN包之前发送的数据如果没有发送到。会进行重试发送。

第二次挥手:被动关闭一方收到FIN包。响应一个ACK包。

第三次挥手:被动关闭方发送一个FIN包。告诉被动关闭方。数据发送完毕。

第四次挥手:主动关闭方收到FIN包。发送一个ACK包给被动关闭方,至此四次挥手结束,断开连接。

7、为什么建立连接需要三次握手呢?

两次握手大家比较容易理解。第一次握手:客户端发起连接请求到服务端。服务端收到请求后响应一个请求给客户端,反馈给客户端已接收到请求。可以连接,正常理解这两次握手就可以了。为什么还要第三次呢?网络具有不稳定性,假如客户端发出去的第一个连接请求由于某些原因在网络节点中滞留了导致延迟,客户端发出第二个请求,然后成功与服务端建立连接,然后数据传输完毕,客户端与服务端断开连接。而这时第一个建立请求才到达服务端,其实这是一个早已失效的报文,但是此时服务端仍然认为这是客户端的建立连接请求第一次握手,于是服务端回应了客户端,第二次握手,如果只有两次握手,那么到这里,连接就建立了,但是其实客户端并没有任何数据要发送,造成很大的资源浪费。所以需要第三次握手,只有客户端再次回应一下,就可以避免这种情况。

HTTP协议

1、HTTP协议是应用层的协议,在TCP/IP协议接受到数据后需要通过HTTP协议来解析后才能使用。

2、HTTP中报文很重要,报文分请求报文和响应报文两种类型,这两种类型都包括三部分:首行,头部,主体。请求报文的首行是请求行,包括方法(请求类型),URL和HTTP版本三项内容,响应请求的首行是状态行,包括HTTP版本,状态码,剪短原因其中原因可有可无。头部保存一些键值对的属性,用冒号分割。主体保存具体内容,请求报文中主要保存Post类型的参数,响应报文中保存页面要显示的结果。

3、请求报文中的方法有:GET、HEAD、POST、PUT、DELETE等

4、响应报文常见状态码:

4.1、1XX:信息性状态码。

4.2、2XX:成功状态码。如:200表示成功。

4.3、3XX:重定向状态码。如:301表示发生重定向。

4.4、4XX:客户端错误状态码:如:404表示没有找到请求的资源。

4.5、5XX:服务端错误状态码:如:500表示系统内部错误。

Servlet和JAVA WEB开发

通过TCP/IP协议和HTTP协议可以得到数据,Servlet的作用是对接受到的数据进行处理并生成要返回给客户端的接口。Servlet指定了java处理WEB请求的标准和规范,我们只需按照标准去做就OK了。但规范自己是不能干活的,所以要想使用Servlet需要有相应的Servlet容器,常见的Tomcat就是一个Servlet容器。

邮件收发过程使用的协议(smtp,pop3协议)

https://www.cnblogs.com/panxuejun/p/10094152.html

Socket和Http之间的区别和概述

socket和http的区别:
Http协议:简单的对象访问协议,对应于应用层。Http协议是基于TCP链接的。
tcp协议:对应于传输层
ip协议:对应与网络层
TCP/IP是传输层协议,主要解决数据如何在网络中传输;而Http是应用层协议,主要解决如何包装数据。

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

Http连接:http连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。

socket连接:socket连接及时所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该链接已释放网络资源。所以当一个socket连接中没有数据的传输,那么为了位置连续的连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。



1》TCP连接
手机能够使用联网功能是因为手机底层实现了TCP/IP协议。可以使手机终端通过无线网络建立TCP连接,TCP协议可以对上层网络提供接口,使上层网络数据的传输建立在无差别的网络之上。
建立一个TCP连接需要三次握手:
第一次握手:客户端发送sys包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送了一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

握手过程中传输的暴力不含数据,三次握手完毕后,客户端和服务端才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中任何一方主动关闭连接之前,TCP连接都将被一直保持下去,断开连接时服务器和客户端 均可以主动发起断开TCP连接的请求,断开过程需要经过“四次握手”(服务器 和客户端交互,最终确定断开)

2》Http连接
Http协议即超文本传输协议,是Web联网的基础,也是手机联网常用的协议之一,http协议是建立在TCP协议之上的一种应用。

Http连接最显著的特点是客户端发送的每次请求都需要服务器回送相应,在请求结束后,会主动释放连接,从建立连接到关闭连接的过程称之为“一次连接”。
a》在HTTP1.0中。客户端的每次请求都要建立一次单独的连接,在处理完成请求后,就自动释放连接。
b》在HTTP1.1中则可以在依次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后在发送下一个请求。
由于Http在么次请求结束之后都会主动释放连接,因此HTTp协议连接是一种短连接,要保持客户端程序的在线状态,需要不断的向服务器发起连接请求,通常的做法是即时不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”,若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已断开。

3》socket原理
1)套接字(socket)概念
套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,他是网络通信过程中端点的抽象表示,他包含网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远程主机的IP地址,远地进程的协议端口。

应用层通过传输层进行数据通信时,TCP会遇到同时为多个应用程序提供并发服务的问题,多个TCP连接多个应用程序进程可能需要通过同一个TCP协议端口传输数据,为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了套接字(socket)接口,应用层可以和传输层通过socket接口区分来自于不同应用进程或网络连接的通信,实现数据传输的并发服务。
2)建立socket连接
建立socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket,另一个运行与服务器,称为ServerSocket。

套接字之间的连接分为三个步骤:服务器监听、客户端请求、连接确认。

服务器监听:服务端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。

客户端请求:至客户端的套接字提出连接请求,要练级的目标是服务器端的套接字,为此客户端的套接字必须首先描述他要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后向服务器端套接字提出连接请求。

连接确认:当服务器端套接字监听到或者说接收到客户端的套接字连接请求是,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式链接链接,而服务器端 套接字继续处于监听状态,继续接受其他客户端套接字的连接请求。

4》socket连接与TCP连接
创建Socket连接时,可以指定使用的传输层协议,socket可以支持不同的传输层协议(TCP/UDP),当使用TCP协议进行连接时,该socket接连就是TCP链接.

通常情况下Socket连接就是TCP连接,因此Socket连接一旦建立,通信双方即可开始相互发送数据内容,至到双方连接断开。但在实际网络应用中,客户端连接服务器之间的通信往往需要穿越多个中间节点,例如路由器,网关,防火墙等,大部分防火墙默认会关闭吃那个时间处于或活跃状态的连接而导致的Socket连接断连,因此需要轮询告诉网络,该链接处于活跃状态。
erHTTp连接使用的是“请求一响应”的方式,不仅在请求是需要先建立连接,而且需要客户端向服务器发出请求后,服务端才能回复数据。
很多情况下,需要服务器端主动向客户端推送数据,保持客户端和服务器数据实时与同步,此时若双方建立的是Socket连接,服务器就可以直接将数据传送给客户端;若双方建立的是HTTP连接,则需要等到客户端发送一次请求后向服务端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就传给客户端。

文件传输协议FTP、SFTP和SCP

网络通信协议分层
应用层:

HTTP(Hypertext Transfer Protocol 超文本传输协议,显示网页)
DNS(Domain Name System)
FTP(File Transfer Protocol)
SFTP(SSH File Transfer Protocol,和FTP不一样)
SCP(Secure copy,based on SSH)
SSH (Secure Shell)
通信层:

TCP(Transmission Control Protocol 三次握手传输协议)
UDP
网络层:

IP(Internet Protocol)
ICMP(Internet Control Message Protocol,主要用于路由发送错误报告)
链接层:

MAC(media access control)

文件传输协议:

参考资料:http://desert3.iteye.com/blog/1684130
 
FTP(File Transfer Protocol):是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。FTP是基于TCP协议的,因此iptables防火墙设置中只需要放开指定端口(21 + PASV端口范围)的TCP协议即可。 
FTP工作模式:
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了一个1024+的随机端口,你过来连接我”。于是服务器从20端口向客户端的1024+随机端口发送连接请求,建立一条数据链路来传送数据。
PASV(Passive被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了一个1024+的随机端口,你过来连接我”。于是客户端向服务器的指定端口发送连接请求,建立一条数据链路来传送数据。
PORT方式,服务器会主动连接客户端的指定端口,那么如果客户端通过代理服务器链接到internet上的网络的话,服务器端可能会连接不到客户端本机指定的端口,或者被客户端、代理服务器防火墙阻塞了连接,导致连接失败。PASV方式,服务器端防火墙除了要放开21端口外,还要放开PASV配置指定的端口范围。
 

SFTP(Secure File Transfer Protocol):安全文件传送协议。可以为传输文件提供一种安全的加密方法。SFTP与 FTP有着几乎一样的语法和功能。SFTP为SSH的一部份,是一种传输文件到服务器的安全方式。在SSH软件包中,已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。
View Code
登陆远程主机:  
sftp user@host  
针对本机的命令都加上l:  
lcd,lpwd  
将本机文件上传到远程:  
put filename.txt [some/directory]  
将当前文件夹下的文件上传到远程:  
mput *.* // multiple  
下载远程文件到本地:  
get filename.file [some/directory]  
下载目录下所有远程文件到本地:  
mget *.* [some/directory]  
帮助:  
?  
退出:  
bye/exit/quit

SCP(Secure Copy):SCP就是Secure copy,是用来进行远程文件复制的,并且整个复制过程是加密的。数据传输使用ssh,并且和使用和ssh相同的认证方式,提供相同的安全保证。 

拷贝本地文件到远程:  
scp filename.txt user@host:some/directory  
拷贝本地文件到远程,使用指定端口:  
scp -P 2234 filename.txt user@host:some/directory  
拷贝多个文件到远程home:  
scp filename1.txt filename2.txt user@host:~  
拷贝远程文件到本地:  
scp user@host:directory/filename.txt  /directory  
拷贝远程文件夹到本地:  
scp -r user@host:directory/folder  .  
拷贝远程文件到远程:  
scp user@host1:directory/filename.txt  user@host1:directory
比较:
FTP 基于TCP来传输文件,明文传输用户信息和数据。
SFTP 基于SSH来加密传输文件,可靠性高,可断点续传。
SCP 是基于SSH来加密拷贝文件,但要知道详细目录,不可断点续传。
 

第三方登录——OAuth2.0协议

想不想在自己的产品中加入微信、QQ、新浪微博等第三方登录的功能?知道这些功能使用的都是什么技术吗?答案就是“开放式授权”,英文简称为“OAuth”。OAuth协议为用户资源的授权提供了一个安全、简易、开放的标准。OAuth协议不会使第三方触及到用户的账户信息,第三方无需使用用户的用户名和密码就可以申请获得该用户资源的授权完成登录。

OAuth的工作原理如下:
step1:获取Request Token
step2:获取Access Token
step3:后续API访问
step4:Refresh Token刷新Access Token

举个例子:
用户要登录目标网站,使用自己的QQ号进行第三方登录,这个流程可以简化为下图:

接下来,详细解释其中关键环节。

请求OAuth登录页:
目标网站请求腾讯QQ的登录页时使用的是Request Token URL,也就是未授权的令牌请求服务地址。目标网站使用的是带有特定参数的URL。
这个特定参数其实就类似于app_id和app_key,因为有很多网站都使用了QQ第三方登录的功能,这些特定参数就是QQ分配给各个使用方网站的使用授权标识,是QQ验证使用方网站权限的依据。然而,这些参数还不止于此,还有另外一个就是回调地址,也就是说,请求OAuth登录页除了要附带授权标识,还要附带回调地址,以便告诉QQ的OAuth服务器,用户在登录成功以后要跳转到哪个URL。

用户使用第三方账号登录并授权
在用户登录成功以后,跳转到目标网站指定的URL(回调地址)。在跳转过程中,URL还会加上一个参数,我们命名为code吧。code这个参数是加密过的字符串。在用户本机请求带有code参数的回调地址时,回调地址对应的服务端会接收code参数。当接收到code参数以后,按理说已经可以确保用户登录成功了。但在这里还有一个安全隐患:万一code被中间人截获,中间人冒充目标网站使用QQ的OAuth服务器提供的各种权限,那就出事了。因此,还需要一个步骤来避免这种情况。我们要保证code参数被合法的目标网站获取到。

返回登录结果
从上一个环节中,我们可以知道,回调地址(通常是目标网站)服务器在得到了code参数以后,还不能认为是用户已经登录成功了,只有在QQ的OAuth服务器返回登录结果的时候才能认为用户登录成功。那么,接下来就会拼接一个新的URL用来访问QQ的OAuth服务器,让其返回一个登录结果。这个新的URL其实就是User Request URL(用户已授权的令牌请求服务地址)。新的URL中会包含3个参数:app_id、app_key、code。3个参数一起传送到QQ的OAuth服务器,OAuth服务器就可以确认的确是目标网站本尊,code没有被中间人截获。
另外,还有一点要注意:code的存在时间很短,目标网站服务器必须在很短的时间内完成整个交互过程。为什么要这样设计?如果有中间人截获了code,他就必须在很短的时间内对code进行破解,而且还要去伪造一个URL。然而加密算法可不是闹着玩的,code能让你这么简单就破解了?所以,这个做法进一步确保了这个过程的安全性。code是一个生命周期很短,并且只能使用一次的加密字符串。

以上就是第三方登录的基本交互过程,还有一个Access Token(用户通过目标网站访问OAuth接口的令牌)没有提及,为了方便理解,就不加在上述过程了,因为其作用主要在于让已被OAuth服务器授权的目标网站可以使用其它OAuth服务器提供的服务,比如:把自己喜欢的音乐分享到QQ空间。

猜你喜欢

转载自www.cnblogs.com/h-c-g/p/11125430.html