应用层
Posted wx5add7776993de
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了应用层相关的知识,希望对你有一定的参考价值。
文章目录
- 基本原理
- 简介
- ssl加密解密
- https工作流程
一,应用层规范
应用层的具体内容就是精确定义这些通信规定
- 应用进程交换的报文类型,如请求报文和响应报文
- 各种报文类型的语法,如报文中的各个字段及其详细描述
- 字段的语义,即包含在字段中的信息含义
- 进程何时,如何发送报文,以及对报文进行响应的规则
二,应用层协议
1.域名系统DNS
简介
互联网的命名系统,将人们便于记住的名字转为ip地址,为网络应用提供核心服务
作用
将互联网上的主机名字解析为ip地址
补充
- 为什么机器在处理ip数据报时要使用ip地址而不使用域名呢?
ip地址的长度是固定的32位,如果是ipv6地址,则是固定的128位,长度固定,但是域名是便于用户记忆,长度一般是不固定的,机器处理起来比较困难
域名解析过程
宏观:
递归查询和迭代查询:
- 主机向本地域名服务器的查询一般都是采用递归查询。
所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。 - 本地域名服务器向根域名服务器的查询的迭代查询。
迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机
全:
补充问题:
为什么域名解析请求和响应过程都是基于UDP协议?
2.FTP简单文件传输协议
基本原理
文件传输协议ftp是基于tcp协议的文件传输服务。提供对远程计算机文件的增删改查操作,主要是为了减少或者消除在不同操作系统上处理文件的不兼容性
这些不兼容性体现在:
- 计算机存储数据的格式不同
- 文件的目录结构和文件命名的规定不同
- 对于相同的文件存取功能,操作系统使用的命令不同
- 访问控制的方法不同
ftp工作流程:
数据传输:
补充问题:
- 为什么建立两个独立连接?
使协议更加简单,容易实现,同时在传输文件时还可以利用控制连接对文件传输进行控制
3.http协议
简介
http协议是一个基于tcp/ip的应用层协议,是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。
工作流程
一次HTTP操作称为一个事务,所以也称http是面向事务的协议
所以一次http请求的时间 = 2*往返rtt + 文档传输时间
特点:
- 简单快速:客户向服务器请求服务时,只需要传送请求方法和路径,请求方法常用的有get,post,每种方法规定了客户和服务器联系的类型不同,由于http协议简单,使得http服务器程序规模小,通信速度快
- 灵活:http允许传输任意类型的数据对象,正在传输的类型由content-type加以标记
- 无连接:每次连接只处理一个请求。服务器处理完客户端的请求并收到客户端的回应后就断开连接,采取这种方式可以节省传输时间,http1.1版本支持可持续连接
- 无状态:http是无状态协议,无状态是指协议对事务处理没有记忆能力,对于后续请求如果需要用到前面的信息,则他必须重新传,这样可能导致每次连接传输的数据量增大,另一方面,在服务器不需要先前信息时,应答就比较快
请求和响应
请求报文格式:
响应报文格式:
请求和响应报文的不同之处在于请求行和响应行
在请求行中比较重要的就是请求方法:
- get : 从服务器获取资源
- post :请求修改服务器资源
- put :向服务器上传资源
- delete : 删除服务器资源
- head : 获得服务器文档首部
在响应行中最重要的就是状态码:
- 1xx :表示HTTP请求已经接受,继续处理请求
- 2xx :表示HTTP请求已经处理完成
- 3xx :表示把请求访问的URL重定向到其他目录
- 4xx :表示客户端出现错误
- 5xx :表示服务端出现错误
常见状态码:
- 200 OK : 请求处理成功
- 301 MOVE PERMANENTLY ;永久跳转
- 403 FORBIDDEN :客户端无权限访问
- 404 NOT FOUND:服务器找不到响应资源
- 500 INTERNAL SERVER ERROR : 服务器出错
- 502 BAD GATEWAY :后端没有按照http协议返回响应
- 503 SERVICE UNAVALIBILE :服务不可用
- 504 GATEWAY TIMEOUT : 请求超时
http响应模型:
服务器收到HTTP请求之后,会有多种方法响应这个请求,下面是HTTP响应的四种模型:
- 单进程I/O模型
服务端开启一个进程,一个进程仅能处理一个请求,并且对请求顺序处理; - 多进程I/O模型
服务端并行开启多个进程,同样的一个进程只能处理一个请求,这样服务端就可以同时处理多个请求; - 复用I/O模型
服务端开启一个进程,但是呢,同时开启多个线程,一个线程响应一个请求,同样可以达到同时处理多个请求,线程间并发执行; - 复用多线程I/O模型
服务端并行开启多个进程,同时每个进程开启多个线程,这样服务端可以同时处理进程数M*每个进程的线程数N个请求。
session和cookie
cookie原理:
session原理:
区别:
- session是服务器端技术,数据保存在服务器端,cookie是客户端技术,数据保存在客户端文件
- session的安全性高于cookie
- session保存在服务端,当服务端访问增多时,会比较占用性能
http版本比较
4.https
简介
http是超文本安全传输协议,由于http在网络上是明文传输,可能会被拦截,而https是加密传输,加密和解密工作交由ssl完成
区别:
HTTPS和HTTP的区别主要为以下四点:
- 一、https协议需要到ca申请证书,一般免费证书很少,需要交费。
- 二、http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
- 三、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- 四、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
ssl加密解密
加密方法:
对称加密:
对称加密原理:
- 对称加密靠秘钥来进行加密,也靠同一个秘钥来进行解密
常用的对称加密算法:
- DES
- 3DES
- AES
/**
* AES加密
* @param data
* @return
*/
public static String encrypt(String data)
String result = null;
try
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE,getSecretKey());
result = new String(cipher.doFinal(data.getBytes("utf-8")));
catch (Exception e)
e.printStackTrace();
return result;
/**
* AES解密
* @param data
* @return
*/
public static String decrypt(String data)
String result = null;
try
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE,getSecretKey());
result = new String(cipher.doFinal(data.getBytes("utf-8")));
catch (Exception e)
e.getMessage();
return result;
/**
* 获得加密和解密所需的密钥
* @return
*/
private static SecretKey getSecretKey()
SecretKey secretKey = null;
try
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = new SecureRandom();
keyGenerator.init(secureRandom);
secretKey = keyGenerator.generateKey();
catch (Exception e)
e.printStackTrace();
return secretKey;
对称加密算法的优缺点:
- 优点:计算量相对较小,可以处理数据量较大的数据的加密工作
- 缺点:密钥容易泄露,且服务器管理密钥比较麻烦
非对称加密
非对称加密原理:
- 非对称加密靠公钥来进行加密,靠私钥来进行解密
常见的非对称加密算法:
- rsa加密算法
public class RSA
/**
* 公钥加密
* @param data
* @param publicKey
* @return
*/
public static byte[] publicEncrytype(String data,PublicKey publicKey)
byte[] result = null;
try
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE,publicKey);
result = cipher.doFinal(data.getBytes("UTF-8"));
catch (Exception e)
e.printStackTrace();
return result;
/**
* 私钥解密
* @param data
* @param privateKey
* @return
*/
public static String privateDecrytypr(byte[] data,PrivateKey privateKey)
String result = null;
try
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE,privateKey);
result = new String(cipher.doFinal(data),"utf-8");
catch (Exception e)
e.printStackTrace();
return result;
/**
* 获得公钥
* @param keyPair
* @return
*/
private static PublicKey getPublicKey(KeyPair keyPair)
return keyPair.getPublic();
/**
* 获得私钥
* @param keyPair
* @return
*/
private static PrivateKey getPrivateKey(KeyPair keyPair)
return keyPair.getPrivate();
/**
* 获得密钥对
* @return
*/
private static KeyPair getKeyPair()
KeyPair keyPair = null;
try
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
SecureRandom secureRandom = new SecureRandom();
keyPairGenerator.initialize(64,secureRandom);
keyPair = keyPairGenerator.generateKeyPair();
catch (Exception e)
e.printStackTrace();
return keyPair;
非对称加密优缺点:
- 优点:数据传输安全
- 缺点:计算量大,加密和解密速度较慢
https工作流程
以上是关于应用层的主要内容,如果未能解决你的问题,请参考以下文章