目录
前言
目录
- Tcp/ip协议
- http及https
- CDN原理
TCP和UDP的区别
- 面向连接和面向无连接
- 流式数据发送和包式数据传输
- 可靠和非可靠(tcp依靠消息的确认机制去保证可靠传输,而udp只管发送结束,不保证传输结果)
udp传输数据是 打包的形式去传输,如果server端接收方的buffer 缓冲区不够, 例如我要发四个字节,但是缓冲区只能要2个字节, 那么它会等 缓冲区 清除以后,在把剩下的包数据 发送过去, udp在发送数据的时候 不需要收到server的回应,就保证 尽可能的把数据包 都发送完成就行...
tcp在发送数据的时候, 根据客户端服务端之间通信的一个能力以及外加自己tcp ,buffer缓冲区大小 组成的一个 拥塞窗口 或者叫 流量窗口
tcp在发送数据的基础 必须是在会话的连接上,
例如在 传输1包的时候,发生丢包了.服务端没有接收到 就不会给客户端发出 接收到的响应,那么tcp客户端就会重发1包 等待确认机制返回,只有当1包 2包 都发送完成以后,收到响应,才会移动 去传输 34包..
例如先发1包, tcp客户端就会等待1包发送成功 得到响应,然后依次下发234
如果先发12包,1包丢失了,那么就会重新 发丢失的包,发完成功 得到响应,然后依次下发后面包
Tcp握手挥手过程
三次握手,tcp可靠的原因
四次挥手
在最后一次挥手的时候 需要等待2msl
如果 新连接和已经关闭的老连接端口号是一样的,如果前一次连接的某些数据仍然滞留在网络中,这些延迟数据在建立新连接之后才到达Server,由于新连接和老连接的端口号是一样的,于是,TCP协议就认为那个延迟的数据是属于新连接的,这样就和真正的新连接的数据包发生混淆了。所以TCP连接还要在TIME_WAIT状态等待2倍MSL,这样可以保证本次连接的所有数据都从网络中消失,
Http协议的传输/返回(文本传输协议)
下面是 http 作为一个 无状态的传输协议 的细节内容:
Http cookie的使用
cookie 主要作为一个 客户端使用的标识, 什么这么说?
例如:A客户端在跟 服务端完成会话以后关闭了, 那么A客户端 又想要和服务端开启会话, 服务端如何去识别呢?
在发起http请求的时候 ,客户端会获取服务端 注入的一个 cookie,这样 就可以告诉服务端 我是谁... 在这里又牵扯到了 session, 例如用户在登录的时候, 服务端是不知道 用户已经登录了,那么这时候需要 有一个标识, 也就是sessionId, 在用户登录的时候 服务端会给客户端一个 sessionId,这个sessionId 是通过cookie来传输的, 那么在下一次 用户发起访问的时候, 服务端就会通过sessionId去辨识 用户身份, 这个sessionId 里面存储了 用户相关主要标识信息(例如username,userId), 当然我们也有很多其他的方式,例如token 等等.. 做一个会话保持的功能.
Https
安全传输过程
首先需要 服务端到CA证书这边 去申请 一个public key 和 private key 的证书..
然后在建立连接最初,把public key下发给 client 客户端.. 然后client 用 在浏览器当中内置的 ca public key 去做对应 public key 对应信息的解密,如果能够成功解密,说明这个证书是CA颁发的..
后续随机摘要是 客户端和 服务端协商的 随机摘要,这个摘要是 clinet 客户端生成的..然后public key 加密传输的时候 下发给 服务端.server, 然后server端 验证完 对应的随机秘钥以后, 就返回解密成功, 最后形成 对称加密
Http2.0
二进制传输(例如http1.1 传输8个字节 相对于8个字符 ,而http2.0 可以压缩这个字节 同样的值 可以传输更少)
多路复用
CDN
- 内容分发
- 缓存
- 就近原则
browser 会先发出请求 www.访问DNS DNS会解析 获得公网ip地址 然后告诉 browser
然后就可以 向nginx 发出html请求 去拿到html文件,当nginx 存在网络流量入口的巨大压力,无论是网络的出口带宽 还是 入口带宽都会产生问题 于是就有了 CDN节点 , CDN负责DNS解析, 这时候DNS返回的公网地址 就不是115这个IP 而是 CDN 边缘节点站的 地址IP, 于是browser 就可以去访问 CDN边缘节点 ,于是CDN 边缘节点就去 请求nginx 然后拿到文件, 把文件存储缓存在 磁盘里面 , 下一次在拿 文件的时候 就直接在CDN 边缘节点缓存去拿取...
边缘节点可以有多个...
如果把文件名称修改为 hash摘要,就可以不走CDN边缘节点,而直接走nginx 源站点