web项目中使用的协议

DNS协议

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

二、世界各地有不少DNS服务器,ISP(Internat服务提供商)会提供给咱们默认的DNS服务器。java

TCP/IP协议

一、TCP和IP协议,一般会把他们放在一块儿,其实他们是不一样的两种协议,做用也不同。算法

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

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

四、TCP的两个序号和三个标志位的含义:微信

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

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

4.三、ACK:确认位,只有ACK=1的时候ack才起做用,正常通讯时ACK=1,第一次发起请求时,由于没有须要确认接收的数据因此ACK为0。app

4.四、SYN:同步位,用于在创建链接时同步序号,刚开始创建链接时并无历史接收的数据,因此ack也就没办法设置。SYN的做用就是,当接收端接收到SYN=1的报文时就会将ack设置位接收到的seq+1的值。SYN会在前两次握手时都为1,是由于通讯的双方的ack都须要设置一个初始值;ssh

4.五、FIN:终止位,用来在数据传输完毕后释放链接。

五、三次握手流程:

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

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

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

六、四次挥手:

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

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

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

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

七、为何创建链接须要三次握手呢?

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

HTTP协议

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

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

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

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

4.一、1XX:信息性状态码。

4.二、2XX:成功状态码。如:200表示成功。

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

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

4.五、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空间。

相关文章
相关标签/搜索