技术标签: java 网络 http https 面试题 网络协议
HTTP, FTP, DNS, TCP, UDP, IP, SNMP等等都属于TCP/IP协议簇
TCP/IP协议族是分层管理
OSI协议:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层(可记为:应表会传网数物)
TCP/IP协议:应用层、传输层、网络层、链路层
四层协议在数据传输过程中的工作方式
在发送端是应用层 --> 链路层这个方向的封包过程,每经过一层都会增加该层的头部。
而接收端则是从链路层 --> 应用层解包的过程,每经过一层则会去掉相应的首部。
域名+DNS解析 --> IP地址 --> ARP -->MAC --> TCP三次握手 --> HTTP请求响应报文 --> TCP四次挥手关闭连接 --> 渲染显示页面
DNS解析过程
UDP通信
负责域名解析,浏览器根据访问的域名找到其IP地址
TCP 为什么需要3次握手?
原因:TCP协议是双全工,需要两两确认保证通信可靠性,防止已失效的连接请求传送到服务器,产生错误
TCP协议位于传输层,为了确保传输的可靠性,TCP协议在建立连接时需要三次握手
SYN(Synchronize同步)、ACK(Acknowledgement确认号)
第一次握手
第二次握手
第三次握手
第一次挥手
第二次挥手
第三次挥手
第四次挥手
超文本传输协议,是以明文的方式传输,端口号80(https端口号443)
HTTP 超文本传输协议,是规范客户端和服务器之间通信的协议。协议就是接口,有着共同的通信协议,便于个个设备之间进行沟通通信
HTTP协议中可以分为请求报文和响应报文。
请求报文(Request Message)结构
一个是请求头(Request Headers),另一个是请求体(Request Body)
请求行:包含请求方法,URI,HTTP版本协议
请求首部字段
请求内容实体
响应报文(Response Message)结构
响应报文的结构与请求报文的结构类似,也分为报文头和报文体。响应头与响应体中间也是有空行进行分割的。
状态行:包含HTTP版本,状态码,状态码原因短语
响应首部字段
响应内容实体
HTTP的请求方法
基于HTTP/1.1的请求方法有GET、POST、PUT、DELETE、HEAD、OPTIONS、TRACE、CONNECT
GET和POST的底层实现都是基于TCP/IP协议
GET | POST | |
---|---|---|
数据 | 请求数据 | 发送数据到后台 |
安全性 | 请求在地址栏可见,安全性低 | 在地址栏不可见,安全性高 |
提交数据大小 | 有限 | 无限 |
HTTP响应状态码
响应状态码是用来标志HTTP响应状态的,响应状态由响应状态码和响应原因短语构成
HTTP + SSL 是HTTP的安全版,加密传输,为数据传输提供安全支持
SSL是
HTTPS就是在HTTP与TCP层中间添加了一个SSL层。因为HTTPS被HTTP多了这层加密的流程,所以HTTPS的速度要比HTTP慢的多。
认证用户和服务器,确保数据发送到正确的客户机和服务器
加密数据以防止数据中途被窃取;
维护数据的完整性,确保数据在传输过程中不被改变。
SSL的加密过程是RSA与AES混合进行的
通过RSA加密方式来交换AES加解密的密钥,然后使用AES加密的方式来传输报文
HTTP + SSL (TSL)的结合体
HTTP报文经过SSL层加密后交付给TCP层进行传输。SSL(安全套节层)主要采取的是RSA(非对称加密)与AES(对称加密)结合的加密方式。先通过RSA交互AES的密钥,然后通过AES进行报文加密和解密
非对称加密,其在加密和解密的过程中,需要两个Key,一个公钥(public key)加密,一个是私钥(private key)解密
Client内置了一个公钥,该公钥与Server端的私钥是配对的,所以Client端可以使用这个内置的Public key加密,而服务端就可以使用这个private key进行解密。目前最常用的是服务端单向认证机制
该加密算法有一个密钥,该密钥可以用来加密,也可以用来解密,所以AES是对称加密算法
Client端与Server端有一个共同的Key, 这个Key是用来加密和解密的。
如果报文在传输的过程中被窃取了,没有这个key, 对加密的内容进行破解是非常困难的,当然窃取者如果有key的话,也是可以轻而易举的解密的。
所以在AES中,key是关键
AES加密策略。比如每次加密的Key都是从一个密码本中动态生成的,而这个密码本服务端和客户端都有同一本,每次传输的是一些参数。这些参数在经过一些算法的映射,从密码本中取出相应的key用来解密。这样一来,就相当于给AES加了一层防盗门,加大了破解的难度。这样做的好处是每次加密的key都是不同的,而且需要密码本以及映射算法的支持。
自己通过RAS算法生成了一个私钥和公钥,在公钥发送给客户端的过程中有可能被篡改成其他的公钥,而客户端在没有其他措施的保护下是不知道该公钥是否就是服务器那边的私钥对应的公钥的。这种自己做的RAS的公钥和私钥有可能在公钥分发的过程中被篡改。
下方就是Client从Server端获取公钥时被中间者篡改了,将public换成了自己的伪public key, 同样这个中间者持有这个伪public key所对应的伪private key。如果客户端使用的伪public key进行加密传输的话,那么中间者是可以使用自己的private key进行解密的
在RAS加密中有一个第三方机构来负责证明客户端收到的证书就是你发送的证书,中间没有被篡改。这个中间认证机构,就是数组证书认证机构, 其颁发的证书也就是我们常说的CA证书(CA , Certificate Authority)
证书签名,证书分发以及证书验证的过程
参考:
可执行文件时有颜色(我这是绿色),./是能够补全文件名的。如果没有权限,仅仅是拖拽一个文件时不行的。必须执行:chmod 777 xxx.sh_linux将sh文件变为可执行脚本
好久没享受过这么长的假期了。19天。今天是开工第一天,真有些不适应。 休了这么长时间,新年的计划也都要实行起来了。英语,健身,编程。 张浩军给我介绍了一个女孩,热爱跑步,去年常州西太湖马拉松跑完了半马,且有马甲线。这让我很有压力,我也是自诩热爱运动,但与之相比相去甚远。于是大过年的每天做200个俯卧撑,后面一百个虽不标准,但竭尽全力。 相亲
vue框架之echarts使用(图表+地图) 写于2020年8月10日 苏州宜家餐厅 ...
阈值分割:最大类间方差法一、简介最大类间方差法,又称为大津阈值法,或OTSU算法。是由日本学者大津在197919791979年提出的一种非参数的、无监督的自动选择阈值的图像分割方法。二、算法描述2.1 公式推导对于给定的一幅具有 LLL 个灰度级([0,1,2,⋯ ,L−1][0,1,2,\cdots,L-1][0,1,2,⋯,L−1])的灰度图像,有以下描述:使用 nin_{i}ni 表示处于灰度级 iii 的像素块的数目;使用 N=n0+n1+⋯+nL−1N = n_0 + n_1 +_最大类间方差法确定阈值
-DPC(延迟过程调用)的细节NTINSIDER,16卷,1期,1至2月2009延迟过程调用(DPC)是一种Windows常用功能。用途是广泛和多样的,但最常用的是我们通常所说的“ISR完成”和WindowsTimer底层技术。 如果DPC常用,为什么还要写此篇?我们发现,大多数人并不真正了解DPC工作的底层实现细节。并且,事实证明,一个深入的理解,在选择选项创建DPC_驱动 延迟处理 dpc
流程:创建maven项目 引入相应的依赖 编写代码 发布第一种方式:KafkaUtils.createDstream方式(基于kafka高级Api-----偏移量由zk保存)import org.apache.spark.{SparkConf, SparkContext}import org.apache.spark.streaming.{Seconds, StreamingC..._import org.apache.spark.streaming.{seconds, streamingcontext}来自于哪个maven
《深入浅出 Java Concurrency》目录http://www.blogjava.net/xylz/archive/2010/07/08/325587.html 转载于:https://blog.51cto.com/3237526/1665867
PL/SQL```sqlDECLARE ---声明部分BEGIN ---执行部分 ---必选 EXCEPTION ---异常处理部分END;/DECLARE```sqlBEGIN DBMS_OUTPUT.PUT_LINE('HELLO WORLD'); DBMS_OUTPUT.PUT('HELLO');END;/BEGIN DBMS_OUTPUT.PUT('HELLO'); DBMS_OUTPUT.NEW_LINE;_6.写一段pl/sql程序 从键盘获取max/min/avg/sum中的一种 返回所有员工对应的最大
HTTP状态码分类类型详细描述1XX信息状态码,服务器收到请求,需要请求者继续执行操作。2XX成功状态码,操作被成功接收并处理。3XX重定向状态码,需要进一步的操作以完成请求。4XX客户端错误,请求包含语法错误或无法完成请求。5XX服务器错误,服务器在处理请求的过程中发生了错误。HTTP状态码列表TYPENameDescription100Continue继续。客户端应继续其请求101Switching Pro
1单机spring.datasource.url = jdbc:oracle:thin:@47.98.234.60:1521:WMSPRODspring.datasource.driverClassName = oracle.jdbc.driver.OracleDriverspring.datasource.username = rootspring.datasource.password = ..._springboot oracle集群
当“space=用户表空间 ”时报错处理: --查看表空间的大小;SQL> SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 MB FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME;--查看表空间中数据文件存放的路径:SQL> SELECT TABLESPACE_NAME, BYTES/1024/
fullfile函数可以将多个字符串拼接成文件路径用法:f = fullfile(filepart1,filepart2,…,filepartN)输出:将各个输入用"\"拼接起来即:f = ‘filepart1\filepart2\…\filepartN’示例:>> f = fullfile('myfolder','mysubfolder','myfile.m')f = 'myfolder\mysubfolder\myfile.m'还可以同时拼接多个文件路径,比如_fullfile