http
超文本传输协议
默认端口号:80
https
http+ssl(安全套接字),即带有安全套接字层的超文本传输协议
默认端口号:443
https比http更安全,但是性能更低
端口号:用两个字节表示的整数,它的取值范围是0-65535.其中,0-1023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。
Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
二者之间存在如下不同:
端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
开销:Https通信需要证书,而证书一般需要向认证机构购买;
Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。
http的请求过程
1.浏览器先向地址栏中的url发起请求,并获取响应
2.在返回的响应内容(html)中,会带有css、js、图片等url地址,以及ajax代码,浏览器按照响应内容中的顺序依次发送其他的请求,并获取相应的响应
3.浏览器每获取一个响应就对展示出的结果进行添加(加载),js,css等内容会修改页面的内容,js也可以重新发送请求,获取响应
4.从获取第一个响应并在浏览器中展示,直到最终获取全部响应,并在展示的结果中添加内容或修改--这个过程叫做浏览器的渲染。
http常见请求头:
Host(主机号和端口号)
User-Agent(浏览器名称)
Cookie
http重要的响应头
Set-Cookie(对方服务器设置cookie到用户浏览器的缓存)
响应状态码(status code)
200 成功
302 临时转移至新的url
307 临时转移至新的url
404 找不到该页面
500 服务器内部错误
503 服务不可用,一般是被反爬
对称加密:
对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;解释这里的密匙:(A,B,C,D)转换成(摸左耳朵,摸右耳朵,放左手,放右手)”
一方通过密钥将信息加密后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。他们之间的关系如下:
明文 <-> 密钥 <-> 密文
非对称加密:
而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
非对称加密+对称加密:
HTTPS真正采用的是这种加密方式。
大致的过程就是使用非对称加密的方式传送密钥,那么该密钥就是双方就安全的得到了,也就是说使用非对称加密来使得双方安全拿到密钥。这个过程可以自己想象一下。
这样是不是很完美的解决了安全问题和效率问题?答案是否,因为这样同样存在安全问题,也就是上面提到的非对称加密通用存在安全问题。
中间人攻击:
在非对称加密的过程中,服务器向浏览器发送公钥的过程是明文的,这个通道上的公钥是可以被中间人获取到的,假设这个公钥被获取到了,然后中间人自己伪造一个公钥和私钥。将自己伪造的公钥传给浏览器,而浏览器用伪造的公钥加密后传回服务器的途中被中间人获取,然后用伪造的私钥解密,这样数据就被获取到了,而中间人同样有服务器的公钥,同时也可以和服务器进行交互。
上面暴露的问题是浏览器根本不知道公钥是不是服务器的,那么有没有什么办法来证明公钥是不是服务器的呢?答案是有
数字证书:
使用HTTPS的网站需要向CA机构申请一份数字证书来证明来保证该公钥是归谁所持有的。所以服务器和浏览器通信时可以下发给浏览器数字证书。浏览器可以从证书中获取到公钥。
但是同样存在问题,因为证书同样会被中间人获取到,同样可以伪造。那是不是有可以防止伪造数字证书的方法呢?答案是有的。
数字签名:
把证书内容生成一份签名,对比内容和签名是否一致来判断是否被篡改了消息。大概步骤:
CA机构拥有公钥和私钥
CA机构对证书明文哈希
对哈希后的值用私钥哈希得到数字签名。
这样将明文+数字签名组成一份数字证书颁发给网站。
那么怎么验证信息有没有被篡改呢
验证:
浏览器拿到证书后,得到了明文信息和数字签名信息。
浏览器使用CA的公钥匙解密拿到哈希的信息。
使用哈希算法对明文进行加密与解密得到的哈希信息进行比对,如果不等则说明被篡改了。
那么中间人是否能够篡改签名呢?(他不是CA机构信任的,所以没有服务器的私钥)
https://www.jianshu.com/p/066d99da7cbd
socket是一个语言无关标准。任何可以实现网络编程的语言都有socket。
1.什么是socket
网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
建立网络通信连接至少要一个端口号。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是socket编程接口;http是轿车,提供了封装或者显示数据的具体形式;socket是发动机,提供了网络通信的能力。
用于描述ip地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开了一个socket,并绑定到一个端口上,不同的端口对应于不同的服务。
2.socket连接步骤
(1)服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
(2)客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务端套接字提出连接请求。
(3)连接确认:是指服务器端套接字监听到连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。
如果包含数据交互+断开连接,就是五个步骤。
3.java中的socket
在java.net包是网络编程的基础类库,其中ServerSocket和Socket是网络编程的基础类型。ServerSocket是服务端应用类型,Socket是建立连接类型。
###cookie、session和token
一、鉴权
鉴权是指验证用户是否拥有访问系统的权利
二、为什么会有cookie、session和token
1.http是无状态协议
就是说这一次请求和上一次请求是没有任何关系的,无法共享信息。好处是速度快。
2.cookie、session的加入
因为http请求是无状态的,所以要解决共享信息的问题必须使用其他手段,于是有了会话标识(session),当然session是基于cookie实现的。服务器为每个用户生成一个不一样的随机字符串,每次向服务器发起http请求,把这个字符串传给服务器,就能区分用户。
接口鉴权session解决方案:完成登陆之后,获取带有session信息的cookie,再次请求时加入。
3.session缺点
虽然session解决了共享信息的问题,但同时对于服务器带来了其他问题---资源开销。对于客户端来说session是非常好的,只需要cookie中存一个字符串就行了,但是服务器必须存储所有在线用户的session,那么是一笔很大开销。这时可以选择去扩展服务器做集群,但同时也出现分布式session问题,那么可以采用session粘滞或者session集中式管理(redis)来解决。
4.摆脱session,拥抱token
session原理:
1.客户端发送已登陆信息(用户id,密码),服务器向用户发放session id,记录认证状态
2.服务端向客户端发送session id的cookie
3.客户端向服务端发送session id的cookie,服务端通过验证session id来判定对方是真实用户
按照一定规则生成加密字符串,服务器只验证补存储,只要验证通过说明是自己生成的,用户信息存储在加密字符串中,这样性能,CORS(跨域资源共享)都能解决。这个加密字符串就是token。
接口鉴权token解决方案:完成登陆之后,获取token字符串,再次请求时加入。
三、区别
cookie:客户端和服务端都能创建cookie,存放在客户端。存放一些不敏感的数据,数据类型只能是字符串(json)
session:服务端生成session,存放在服务端。可以存放任何数据,java中session中可以存放任意对象。session必须依赖cookie实现
session:服务器生成、存储、验证,以cookie的方式传给客户端,客户端以同样的方式发送给服务端。session有状态
token:服务器生成、验证,以cookie或者请求头的方式传给客户端,客户端以同样的方式发送给服务端。token无状态
四、cookie:
在网站中,http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务器通过浏览器携带的数据就能判断当前用户是哪个了。cookie存储的数据量有限,不同的浏览器有不同的存储大小,但一般不超过4KB。因此使用cookie只能存储一些小量的数据。
五、session:
session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,就是会占用服务器的资源,但现在服务器已经发展至今,一些session信息还是绰绰有余的。
六、cookie和session结合使用:
web开发发展至今,cookie和session的使用已经出现了一些非常成熟的方案。在如今的市场或者企业里,一般有两种存储方式:
1、存储在服务端:通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该session_id携带上来,服务器根据session_id在session库中获取用户的session数据。就能知道该用户到底是谁,以及之前保存的一些状态信息。这种专业术语叫做server side session。
2、将session数据加密,然后存储在cookie中。这种专业术语叫做client side session。flask采用的就是这种方式,但是也可以替换成其他形式。
端到端
对等实体间的通信象拥有一条直接线路,而不管中间要经过多少通信节点。
承上启下, “加强”和“弥补”通信子网服务。
特点
回顾
IP层的拥塞控制技术:(ICMP源站抑制报文),是一种被动机制。
TCP拥塞控制的必要性:在TCP层,拥塞造成时延增加,这又会造成超时重传,控制不当会进一步加重拥塞。TCP采用了一种主动控制机制。
1. 拥塞控制技术
拥塞窗口cwnd
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aQG8bcXs-1596520566289)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制1.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D2VOtfWR-1596520566290)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制2.png)]
慢启动技术
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cPKBOvEA-1596520566291)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制3.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bYECkanv-1596520566291)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制4.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5SgMQD1o-1596520566295)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制5.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tx4F29mm-1596520566296)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制6.png)]
加速递减技术
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dS96asfK-1596520566299)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制7.png)]
TCP拥塞策略
快速重传与快速恢复算法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tRr9irOq-1596520566300)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制8.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VBuQWi4E-1596520566302)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制9.png)]
2. IP层对改善TCP性能的支持
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ruml3q88-1596520566302)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制10.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qXXoXVqk-1596520566303)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/拥塞机制11.png)]
建立连接
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FYmOkpta-1596520566304)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/TCP连接1.png)]
TCP连接释放机制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pnu0wqeF-1596520566305)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/TCP连接2.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NQtJYQRo-1596520566306)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/TCP连接3.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JRj2iLSP-1596520566307)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/TCP连接4.png)]
点到点
对等实体间的通信由一段一段的直接相连机器间的通信组成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NNcaX0c-1596520566308)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/TCPIP层次概念.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m7mqOxeJ-1596520566309)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/IP数据报.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mjh5h5W5-1596520566309)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/数据格式.png)]
问题:每个网络有固定的MTU,若IP报文长度大于MTU,怎么办?
解决:重新设置首部的某些字段
链路控制协议(Link Control Protocol,LCP)负责线路建立、配置、测试和选项协商,并在它们不再被需要时,稳妥地把它们释放。
PAP:Password Authentication Protocol
发生时机:仅在建立连接的阶段发生
CHAP: Challenge-Handshake Authentication
Protocol
发生时机:建立连接时和连接建立之后的任何时间
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D22CES5w-1596520566313)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/大端小端.jpg)]
为什么要进行地址转换?
必须根据IP地址找到物理地址才能进行实际的数据传送。
如何进行地址转换?
直接映射 or 动态绑定
两种地址类型:
基本步骤
提高ARP的效率
不同网络间地址转换:路由器转发
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RGPolp7b-1596520566315)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/路由器转发.jpg)]
转换步骤
无盘工作站所在网络必须有RARP服务器
若有多台RARP服务器,可采用主、备份服务器技术
① 一主服务器,其余为备份服务器。
② 主服务器先响应,备份服务器有两种响应方式:
a.只有在收到重复的RARP请求时才响应
a.只有在收到重复的RARP请求时才响应
b.随机延迟一段时间后再响应
为什么需要ICMP?
数据报在传送中可能会遇到各种异常;IP层也需要控制功能(拥塞、差错控制)。
ICMP的作用
传递网络控制信息、提供差错报告。
ICMP报文类型
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-optw3g36-1596520566316)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/ICMP报文类型.png)]
ICMP差错报告的特点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p2Hh1osb-1596520566319)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/ICMP差错报告的特点.png)]
ICMP拥塞控制与源站抑制
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fxVT0o7U-1596520566320)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/ICMP拥塞控制与源站抑制1.png)]
ICMP路径控制和重定向报文
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zqWuuD0f-1596520566321)(/Users/cwq/Documents/全栈工程师的笔记/图片文件/ICMP拥塞控制与源站抑制2.png)]