1. TCP和UDP
TCP/UDP详细分析
TCP是点对点的通信,UDP是广播
TCP控制了数据包的发送序列的产生
,不断的调整
发送序列,实现流控(滑动窗口)
、阻控
和数据完整
,并且保证可靠传输(rtt)
采用RTO(return timeout)超时时间 >RTT(return time)往返时间,来控制重传
2. 三次握手
3次握手是为了建立有效的tcp连接,保证发送+接收方都是有效的和有序的
- 客户端发起SYN请求 + x,状态是SYNC_SEND
- 服务端返回SYN+ACK + (x+1) + y,状态是SYNC_RCVD
- 客户端发送ACK + (y+1),状态是ESTABLISHED
第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开多个连接
如果没有第三次握手确认,客户端的连接请求在滞留后会发送重传的连接请求,最终滞留的请求也会到达服务器,导致打开多个连接
4. 四次挥手
客户端
发送了FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器
会发送 FIN 连接释放报文。
一方发送的FIN紧紧代表单向不再发送信息,反馈的ACK也只是代表接到并关闭单向SOCKET
5. TIME-WAIT
time_wait - 主动关闭
close_wait - 被动关闭
establish - 正在通信
sync_send - 主动打开
sync_recv - 被动
listen - 被动打开
fin_wait(fin) - 主动关闭
last_ack
主动关闭的一方,在接受到服务端返回的ack后,会进入一个TIME-WAIT的状态,该状态主要是保证连接可靠性,如果没有这个状态直接进入CLOSED,会导致反馈2个问题,
- 不确定状态,发送的遗留信息在CLOSED后进入客户端,会返回RST,服务端认为出现问题
- CLOSED后可以新建立连接,这时候有报文才找到反馈连接,导致消息串口
解决的问题:
- 确保最后一个ACK确认报文能够到达(保证
超时重发
) - 让本连接持续时间内所产生的所有报文都从网络中消失(
2MSL
)
(MSL)是任何报文段被丢弃前在网络内的最长时间,2MSL也就是这个时间的2倍
当某个连接的一端处于TIME_WAIT状态时,该连接将不能再被使用。事实上,对于我们比较有现实意义的是,这个端口将不能再被使用
6. HTTPS的工作原理
HTTPS = SSL + TCP = 完整性 + 加密 + 认证
先经过SSL认证,再由SSL和TCP通信
采用对称加密(简单、快速、秘钥无法安全传输)和非对称加密(复杂、秘钥可以安全传输)来实现安全通信
对称加密只保证内容被密钥
加解密,但是密钥的传输需要通过非对称加密来保证,而非对称加密的公钥
需要通过认证机构(CA)做签名,提供数字证书
来保证公钥的真实性
7. 协议层次
TCP/IP 四层协议 = 应用层 + 传输层 + 网络层 + 网络接口层
ISO 七层协议 = 应用层 + 表示层 + 会话层 + 传输层 + 网络层 + 数据链路层 + 物理层
网络层:
因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报
服务。
使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。
传输层:
网络层只把分组发送到目的主机,但是真正通信
的并不是主机而是主机中的进程
。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。
8. HTTP协议
由请求和响应构成的应用层协议
解析域名 -> 连接(封装http包,封装tcp包,建立连接) -> 客户端请求 -> 服务器响应 -> 关闭连接
连接:要建立socket连接
= ip+port
,先将域名通过DNS
进行地址解析
,DNS是一个树状图,本地->上级->根
请求:header + body
响应:header + body
关闭连接:
Header
Connection: keep-alive -> 持久连接
Last-Modified: Tue, 08 Jan 2019 10:07:48 GMT -> HTTP 1.1缓存最后失效时间
Cache-Control: max-age=0 -> 代表缓存最多存活的时间
9. web缓存优点
HTTP 缓存是在客户端上针对指定资源,缓存段时间,可以减少与远程服务器交互的耗时
对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接
用缓存
,不在时间内,执行比较缓存策略。
对于比较缓存,将缓存信息中的Etag
和Last-Modified
通过请求发送给服务器,由服务器校验,返回304状态码
时,浏览器直接
使用缓存
服务端响应:
Cache-Control
缓存范围和有效时间(private是客户端可缓存,public是代理服务器和客户端可缓存),HTTP 1.1使用此数取代了HTTP 1.0的Expires
Last-Modified
标识第一次请求时,返回的资源最后修改时间
ETag
第一次请求时,服务器返回的资源唯一标识
客户端请求:
If-Modified-Since
标识上次请求的返回资源最后修改时间
If-None-Match
标识上次请求的返回资源唯一标识
10. 长/短连接
长连接:只需要建立一次TCP连接就能进行多次 HTTP 通信
短连接:每进行一次HTTP 通信就要新建一个TCP 连接
短轮询:客户端不断的轮询请求服务端,服务端立即
做出响应
长轮询:客户端不断的轮询请求服务端,服务端会根据一定的规则,给出响应
(可能时立即的,可能是延迟的)
HTTP
是不支持长连接的,都是由TCP
来支持
HTTP只是请求/响应,长连接复用的是TCP层
的连接
虽然WEB的HTTP是短请求,但是TCP连接层是可以复用
Cookie:服务器发送到用户浏览器并保存在本地的一小块数据
11. servlet
每个servlet在web容器中只会有一个实例,且只会init
和destroy
一次
上下文context
,会话session
,请求request
初始化(init)->执行(service)->销亡(destroy)
请求调用.png
12. URI URL URN
URI 包含 URL 和 URN
image.png
14. 通信转发
1. 代理
- 缓存
- 负载均衡
- 网络访问控制
- 访问日志记录
2. 网关
网关服务器会将 HTTP 转化为其它协议进行通信,从而请求其它非 HTTP 服务器的服务
3. 隧道
SSL 等加密手段,在客户端和服务器之间建立一条安全的通信线路
15. CDN优化
能缓存在用户电脑本地的,就不要让他去访问CDN。 能缓存CDN服务器上的,就不要让CDN去访问源(静态服务器)了。能访问静态服务器的,就不要去访问动态服务器。以此类推:能不访问数据库和存储就一定不要去访问数据库和存储
- 高并发访问TFS的图片,可以通过限制图片尺寸,图片大小,对图片进行压缩等方式减少图片流量
- 将图片信息定时推送到CDN服务器(我们公司应该没有做到),而是通过CDN服务器来cache我们的TFS上最近访问的信息
- 数据库磁盘,最常访问的10-20%使用ssd存储,中间的20-30%采用sas盘,最后的40-50%可以采用廉价的sata
秒杀网络.png
秒杀网络及架构
- 把整个页面Cache在用户浏览器
- 如果强制刷新整个页面,也会请求到CDN
- 实际有效请求只是“刷新抢宝”按钮
16. 301 302 500 502 504
301 永久定位,浏览器获取URL指向,改变显示URL
302 临时定位,浏览器获取URL指向,不改变显示URL
500 服务器异常
502 请求到达网管,请求服务器已执行,执行中间出现异常
504 请求到达网管,请求服务器执行时间长,网关认为超时了
网友评论