单机并发量
- 操作系统用 4元组唯一标识1个 TCP 连接:( {localIP} , {localPort} , {remoteIp} , {remotePort} )
- IP 为 32 位,因此最大数量为 2^32 ;Port 为 16 位,因此最大数量 2^16
- server 端 bind {localIP} 与 listen {localPort} ,因此数量取决于 {remoteIp} , {remotePort} ,最大数量为 2^32 * 2^16
- 但实际上并发量还受
硬件资源(cpu、内存等)
与网络资源(带宽)
的限制。
阻塞、非阻塞;同步、异步
阻塞是指调用方一直在等待而且别的事情什么都不做;
非阻塞是指调用方先去忙别的事情。
-
阻塞、非阻塞和同步、异步的区别:
- 阻塞、非阻塞的讨论对象是调用者;
- 同步、异步的讨论对象是被调用者。
OSI 七层网络模型
OSI 模型 | 五层模型 | 协议 |
---|---|---|
应用层 | 应用层 | HTTP、FTP、DHCP |
表示层 | 应用层 | Telnet |
会话层 | 应用层 | DNS |
传输层 | 传输层 | TCP、UDP |
网络层 | 网络层 | ARP |
数据链路层 | 数据链路层 | PPP |
物理层 | 物理层 | IEEE 802.11 |
TCP
TCP 3次握手过程与原因
image
第三次握手是为了 防止失效的连接请求到达服务器,让服务器错误打开连接。
TCP 4次挥手过程与原因
image
四次握手是为了 保证服务器传送完还未传送完毕的数据。
TCP 4次挥手后客户端 TIME_WAIT 原因
客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:
尽可能确保第四次挥手的报文成功到达服务器。如果服务器没收到客户端发送来的第四次挥手报文,那么就会重新发送第三次挥手,所以客户端等待一段时间就是为了处理这种情况的发生。
等待一段时间是为了尽可能让本连接内所产生的报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。
UDP 转 TCP 需要确保的条件
可靠传输
- 三次握手、四次挥手
- 数据确认应答,失败重传
- 包丢失、包重复、包损坏、包延时、包乱序
流量控制
- 滑动窗口
拥塞控制
- 拥塞状态值(报文长度每次*2,拥塞则/2)
Web 页面请求过程
- 通过 DHCP动态主机配置协议 获取到 当前主机IP、 DNS 服务器 IP、 当前局域网默认网关路由器 IP
- 通过 ARP 协议获取 当前局域网默认网关路由器 IP 对应的 MAC 地址
- 通过 DNS 服务器 查询目的域名的 IP 。
- 与目的 IP 的服务器通过 TCP 3次握手建立连接。
- 目的服务器响应页面内容的报文后,浏览器进行渲染。
- 连接结束是通过 TCP 4次挥手关闭连接。
- 注释:
- 为什么需要局域网的MAC地址呢? 因为局域网内是通过 MAC 进行识别的,为什么要用 MAC 地址识别呢?是这样的,以前没这么多主机的时候,IP 是固定的,我们就不需要 MAC,但现在主机越来越多,这就导致局域网里 IP 不是十分充足,管理起来也不是很好管理,所以 IP 每隔一段时间就会被回收,需要的时候才会被分配,这也就是为什么前面提到的 DHCP 动态主机配置协议会存在,所以这个 IP 是会变的,对于主机来说,唯一不变的是 MAC,所以,在局域网内部我们是用 MAC 定位的。
- 默认网关路由器:每一个主机都在一个局域网里,要访问局域网以外的主机就需要先离开这个局域网
HTTP 报文
--------------------- Request ------------------------------------------
GET http://www.example.com/ HTTP/1.1 // Method URL 协议版本
Accept: text/html // Header
// 头部后空一行
param1=1¶m2=2 // Body
--------------------- Response ------------------------------------------
HTTP/1.1 200 OK // 协议版本 状态码 状态描述
Age: 529651 // Header
// 头部后空一行
<!doctype html> // Body
<html>
<head>
<title>Example Domain</title>
// 省略...
</body>
</html>
HTTPS 加密方式
- 传输内容使用对称加密
- 通过非对称加密方式对秘钥加密。
HTTP 与 HTTPS 对比
HTTP 有以下问题
- 使用明文进行通信,内容可能会被窃听。
HTTPS 通过对称加密+非对称加密传输。
- 不验证通信方的身份,通信方的身份有可能遭遇伪装。
HTTPS 通过颁发的CA证书来认证通信方。
- 无法证明报文的完整性,报文有可能遭篡改。
HTTPS 通过摘要(加签与验签)来确保完整性。
HTTPS 有以下问题
- 因为需要进行加密解密等过程,因此速度会更慢;
- 需要支付证书授权的高额费用。