网络协议(三)
网络协议(三)从系统层面上,UDP 如何保证尽量可靠? 传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。
实现确认机制、重传机制、窗口确认机制。
如果你不利用linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须实现如下功能:
发送:包的分片、包确认、包的重发
接收:包的调序、包的序号确认
目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。
简述 JWT 的原理和校验机制JWT: JSON Web token 用于json对象在各方之间安全的传输信息,它是安全可被信任的,因为它是数字签名的。JWT是目前最流行的跨域身份验证解决方案
JWT工作原理:
应用或客户端向授权服务器请求授权
当授权被许可后,授权服务器返回一个access token给应用
客户端存储token,并且在随后的每一次请求中都带着它
服务器校验token并返回数据
HTTP 的方法有哪些?
GET方法:获取资源
POST方法:传输实体主题
PUT方 ...
网络协议(二)
网络协议(二)DNS 查询服务器的基本流程是什么?DNS 劫持是什么?DNS(Domain Names System),域名系统,是互联网一项服务,是进行域名和与之相对应的 IP 地址进行转换的服务器
DNS 查询的方式有两种:
递归查询:如果 A 请求 B,那么 B 作为请求的接收者一定要给 A 想要的答案
迭代查询:如果接收者 B 没有请求者 A 所需要的准确内容,接收者 B 将告诉请求者 A,如何去获得这个内容,但是自己并不去发出请求
查询过程解析域名的过程如下:
首先搜索浏览器的 DNS 缓存,缓存中维护一张域名与 IP 地址的对应表
若没有命中,则继续搜索操作系统的 DNS 缓存
若仍然没有命中,则操作系统将域名发送至本地域名服务器,本地域名服务器采用递归查询自己的 DNS 缓存,查找成功则返回结果
若本地域名服务器的 DNS 缓存没有命中,则本地域名服务器向上级域名服务器进行迭代查询
首先本地域名服务器向根域名服务器发起请求,根域名服务器返回顶级域名服务器的地址给本地服务器
本地域名服务器拿到这个顶级域名服务器的地址后,就向其发起请求,获取权限域名 ...
网络协议(一)
网络协议(一)简述 TCP 三次握手以及四次挥手的流程。为什么需要三次握手以及四次挥手?
三次握手
第一次握手
客户端给服务器发送一个SYN段(在 TCP 标头中 SYN 位字段为 1 的 TCP/IP 数据包), 该段中也包含客户端的初始序列号(Sequence number (Seq)= J)。
SYN是同步的缩写,SYN 段是发送到另一台计算机的 TCP 数据包,请求在它们之间建立连接
SYN = j , Seq = k
第二次握手服务器返回客户端 SYN +ACK 段(在 TCP 标头中SYN和ACK位字段都为 1 的 TCP/IP 数据包), 该段中包含服务器的初始序列号(Sequence number(Seq) = K);同时使 Acknowledgment number = J + 1来表示确认已收到客户端的 SYN段(Sequence number = J)。
ACK 是“确认”的缩写。 ACK 数据包是任何确认收到一条消息或一系列数据包的 TCP 数据包
SYN = j, Seq =y, ACK= k+1
第三次握手客户端给服务器响应一个ACK段(在 T ...
Java Steam流
Java Steam流简介Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
首先要澄清的是 java8 中的 Stream 与 I/O 流 InputStream 和 OutputStream 是完全不同的概念。Stream 机制是针对集合迭代器的增强。
创建对象流的三种方式由集合对象创建流。
List<Integer> list = Arrays.asList(1,2,3);Stream<Integer> stream = list.stream();
数组创建流。通过静态方法 Arrays.stream() 将数组转化为流
IntStream stream = Arrays.stream(new int[]{1,2,3});
通过静态方法 Stream.of() ,但是底层其实还是调用 Arrays.stream()
Stream<Integer> stream ...
此集合非彼集合-Arrays.asList()
此集合非彼集合-Arrays.asList()前言今天使用Arrays.asList();方法和两个数组arr1.removeAll(arr2);查交集
但出现java.lang.UnsupportedOperationException
报错代码(例):
String[] array = {"1","2","3","4","5"}; List<String> list = Arrays.asList(array); list.add("6");
问题所在查阅资料,发生问题的原因如下:
Arrays的asList方法返回的是Arrays的内部类ArrayList,它并不是java.util.ArrayList,只不过它们的父类都是AbstractList。
可以看到Arrays的内部类ArrayList并没有重写add和remove方法,所以当我调用Arrays的内部类ArrayList的add方法时实际 ...
vue跨域代理配置 与 浏览器跨域配置
vue跨域代理配置与 浏览器跨域配置浏览器报错信息如下
方法一(适用于开发)vue.config.js 增加 disableHostCheck: true
disableHostCheck: true
谷歌为例
创建快捷方式->右键属性->在 目标位置后面加上
–disable-web-security –user-data-dir=D:\MyChromeDevUserData
user-data-dir 中 MyChromeDevUserData 是自己创建的文件夹
方法2(推荐)在vue.config.js中配置代理
pathRewrite —- 在项目中找到/api(前)开头的URL,并替换为/api(后)
module.exports = { devServer: { port: 8200, // 此处修改你想要的端口号 proxy: { //配置跨域 '/api': { target: 'http ...
经过NGINX反向代理,后端服务器获取不了真实IP
经过NGINX反向代理,后端服务器获取不了真实IP原因:通过了Apache,Squid,nginx等反向代理软件就不能获取到客户端的真实IP地址了。经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP(拿到的是中间层的ip),服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了x-forwarded-for信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。
解决:在NGINX反向代理服务器上进行修改
在nginx配置文件中
每一个location上加上以下
proxy_set_header Host $http_host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;
重启nginx即可
springboot获取ip/** * 获取登录用户的IP地址 * * @ ...
docker部署springboot项目
docker部署springboot项目
编写dockerfile文件和打包maven项目
FROM java8MAINTAINER chenqitianADD overseas-study-0.0.1-SNAPSHOT.jar overseas-app.jarENTRYPOINT [java,-jar]EXPOSE 8100CMD [overseas-app.jar]
FROM-–指定哪个镜像作为新镜像的基础镜像
MAINTAINER—-指明该镜像的作者信息
ADD—将主机的文件复制到镜像中
EXPOSE—暴露镜像的端口供主机做映射
CMD—容器启动时需要执行的命令
上传服务器
使用xftp,把dockerfile文件和jar包上传到服务器
打包成镜像
docker build -t [镜像名]
docker images查看所安装的镜像
docker images
运行构建的镜像
docker run -d -p 8100:8100 [镜像名]
完成
浏览器访问 xx.xx.xx.xx:8100即可
Nginx+docker部署vue-cil项目
Nginx+docker部署vue-cil项目
编写dockerfile文件
FROM-–指定哪个镜像作为新镜像的基础镜像
MAINTAINER—-指明该镜像的作者信息
COPY—将主机的文件复制到镜像内
FROM nginxMAINTAINER chenqitianCOPY dist/ /usr/share/nginx/html/COPY default.conf /etc/nginx/conf.d/default.conf
打包vue-cil项目
cmd中输入以下命令,打包生成dist文件
npm run build
修改nginx配置文件default.conf
server { listen 8200; server_name localhost; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ @router; ...
Windows配置Nginx部署vue-cil项目
Windows配置Nginx部署vue-cil项目
nginx下载
nginx下载地址
打包vue-cil项目
cmd中输入以下命令,打包生成dist文件
npm run build
.修改nginx配置文件nginx/conf/nginx.conf
worker_processes 1;events { worker_connections 1024;}http { keepalive_timeout 65; server { listen 8200; server_name localhost; location / { root html; index index.html index.htm; try_files $uri $uri/ @router; } location @router { rewrite ^.*$ /index.htm ...