网络协议与标准是基于OSI七层模型,每一层都有其对应的协议。
下面挑几个熟悉的协议标准:
一,TCP/IP
TCP/IP是分层协议,如层次图所示:从底层到应用层,分别是物理层,链路层,网络层,传输层,应用层。数据是层层封装,封装的方式一般都是在原有数据的前面加一个数据控制头,数据封装格式如数据封装图所示。
二,HTTP协议
从上面两个图,可以看到,HTTP(hypertexttransfer protocol ,超文本传输协议)是基于TCP协议可靠传输的应用层协议。简单理解,HTTP是一种请求响应式协议,一个客户机和服务器建立连接后,发送一个请求给服务器;服务器接到请求后,给予相应的响应信息。
HTTP是一种无状态协议,即不保存状态,每当有新的请求发送时,就会产生对应的新响应,协议本身并不保留之前的一切请求或响应报文的信息,这样可以更快的处理大量事物,确保协议的可伸缩性,但同时也带来一些不便,比如,用户登录到一家购物网站,如果他跳转到该网站其他页面,也是希望能继续保持登录状态,为了实现期望的保持状态功能,于是引入Cookie技术,(Cookie技术通过在请求和响应报文中写入Cookie信息来控制客户端的状态。Cookie会根据从服务器端发送的响应报文内的一个叫做Set-Cookie的首部字段信息,通知客户端保存Cookie,当客户端下次再往服务器端发送请求时,客户端会自动在请求报文中加入Cookie值后发送出去。服务器端发现客户端发送过来的Cookie后,会去检和比对服务器上的记录,最后得到之前的状态信息。)
HTTP使用明文,本身不具备加密的功能,同时它所基于的TCP/IP网也是很容易被窃听的网络,所以即使传输的报文经过加密,也只是在破解上增加障碍而已。HTTP协议没有加密机制,后来人们引入SSL(secure socketlayer ,安全套接层)和TLS(Transport layer security,安全传输层协议)结合使用的手段,也就是现在常说的HTTPS,简而言之,HTTPS就是身披SSL协议的HTTP了。在HTTP协议通信时,本身是不存在确认通信方的步骤,也就是说,任何人都可以发起请求,服务器不管对方是谁都会响应。所以会出现一些常见的隐患:
· 无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器。即我发送给A服务器的请求,被一台伪装成A的服务器给接收了。
· 无法确定响应返回到的客户端是否是按真实意图接收响应的那个客户端。即服务器想发送给我的东西,被一个伪装成我的人给拿走了。
· 无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限。
· 无法判定请求是来自何方,出自谁手。
· 即使是无意义的请求也会照单全收,无法阻止海量请求下的DoS攻击。
所以在HTTP上引入SSL后,SSL不仅提供加密处理,而且用了一种被称为证书的手段,可用户确定方,可以减少信息泄露的危险性。 另外由于HTTP协议无法证明报文的完整性,因此在请求或响应传输中,即使内容遭到篡改也无从得知。比如,有可能你从服务器请求一张正常的图片,结果在传输过程中被人改成了一张限制级的图片,结果你就被查水表了。
三,Telnet协议
Telnet协议是TCP/IP协议族,是Internet远程登录服务标准协议,应用这个协议,能够把本地用户所使用的计算机变成远程主机系统的一个终端。具体说来,它实现三种基本服务。
其一,Telnet定义一个网咯虚拟终端为远的系统提供一个标准接口。客户机只需构造使用标准接口的程序即可。
其二,Telnet包括一个允许客户机和服务器协商选项的机制,而且还提供一组标准选项。
其三,Telnet对称处理连接的两端。
四,FTP协议
FTP是网络共享文件的传输协议,目标是提高文件的共享性和可靠地传输数据。相比HTTP协议,FTP协议要相对复杂,她的命令和数据会分开传送。在传输文件时,FTP 客户端程序先与服务器建立连接,然后向服务器发送命令。服务器收到命令后给予响应,并执行命令。FTP 协议与操作系统无关,任何操作系统上的程序只要符合 FTP 协议,就可以相互传输数据。FTP使用 2 个端口,一个数据端口和一个命令端口(也叫做控制端口)。这两个端口一般是21(命令端口)和 20 (数据端口)。控制 Socket 用来传送命令,数据 Socket 是用于传送数据。每一个 FTP 命令发送之后,FTP 服务器都会返回一个字符串,其中包括一个响应代码和一些说明信息。其中的返回码主要是用于判断命令是否被成功执行了。有主动模式和被动模式两种。
主动模式 (PORT),客户端随机打开一个大于 1024 的端口向服务器的命令端口 P,即 21 端口,发起连接,同时开放N +1 端口监听,并向服务器发出“port N+1” 命令,由服务器从它自己的数据端口 (20) 主动连接到客户端指定的数据端口 (N+1)。FTP 的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。
被动模式 (PASV),为了解决服务器发起到客户的连接问题,有了另一种 FTP 连接方式,即被动方式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。被动模式下,当开启一个 FTP 连接时,客户端打开两个任意的本地端口 (N > 1024 和 N+1) 。第一个端口连接服务器的21 端口,提交 PASV 命令。然后,服务器会开启一个任意的端口 (P > 1024 ),返回如“227 entering passive mode (127,0,0,1,4,18)”。 它返回了 227 开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘 256 再加上最后一个数字,这就是FTP 服务器开放的用来进行数据传输的端口。如得到 227 entering passive mode (h1,h2,h3,h4,p1,p2),那么端口号是 p1*256+p2,ip 地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。
文章资料来源于网络。