132 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 1. 应用层协议原理
# 2. Web和HTTP
- HTTP连接
- 非持续连接HTTP
- 在TCP上最多发送一个对象然后关闭连接。下载多个对象要多次连接
- 持续连接HTTP
- 如果网页上有多个资源在同一个服务器上可以通过单个TCP连接发送
- Web缓存器
安装Web缓存器可以减少接入互联网链接的利用率重复请求由缓存器承担。
$$
{delay}_{\text{总}} = \alpha \times {delay}_{\text{缓存器响应}}+(1-\alpha)\times {delay}_{\text{初始服务器响应}} \approx (1-\alpha)\times {delay}_{\text{初始服务器响应}}
$$
> $\alpha$:缓存命中率
# 3. 因特网中的电子邮件
- SMTP协议
<img src="D:\Courseware\Computer_Network\Review\images\STMP.png" alt="STMP" style="zoom: 25%;" />
用于邮件客户端 $\to$ 邮件服务器,或邮件服务器 $\to$ 邮件服务器发送邮件。
# 4. DNS因特网的目录服务
- DNS域名转IP。基于UDP。分布式逐级向下查询根DNS -> com DNS -> amazon.com DNS递归查询同时缓存
报文资源记录namevaluetypettl(time to live)
# 5. P2P应用
- P2P文件分发
<img src="D:\Courseware\Computer_Network\Review\images\P2P.png" alt="P2P" style="zoom:25%;" />
使用P2P方法将$F$比特的文件分发到$N$个客户的用时:
$$
D_{P2P} \ge \max{\{F/u_s, F/d_{min}, NF/(u_s+\sum u_i)\}}
$$
- $F/u_s$:服务器传输,至少发送一个副本,除以服务器最大发送速率
- $NF/(u_s + \sum u_i)$:客户接收的总和(总共必须下载$NF$比特)除以最大发送速率总和
- $F/d_{min}$​:单个客户的接收速率,文件大小除以最小客户接收速率
- BitTorrent
- 下载:主机周期性地向每个对等方请求文件块列表,然后请求最稀缺的文件块。
- 分享主机每10秒评估前4名对等方以最高速率向其发送每30秒随机选择另1个对等方发送
# 6. 视频流和内容分发网
- 视频
- 编码
- 空间编码:单帧内像素冗余值只发送一次
- 时间编码:只发送当前帧和上一帧的不同点
- CBR编码速率固定VBR编码速率随空间、时间编码量变化而变化
- DASH将视频在服务器上分块客户端自己决定请求的时间、编码速率和服务器
- 内容分发网CND在CDN节点上存储内容副本
# 7. 套接字编程:生成网络应用
- UDP
不连接,可能丢失或顺序错乱
```python
# client
serverName = 'hostIP'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_DGRAM)
message = raw_input('xxx')
clientSocket.sendto(message.encode(), (serverName, serverPort))
modifiedMessage, serverAaddress = clientSocket.recvfrom(2048)
clientSocket.close()
# server
serverName = 'hostIP'
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
serverSocket.bind((serverName, serverPort))
while True:
message, clientAddress = serverSocket.recvfrom(2048)
# 处理message -> modifiedMessage
serverSocket.sendto(modifiedMessage.encode(), clientAddress)
serverSocket.close()
```
- TCP
连接,有序交付
```python
# client
serverName = 'hostIP'
serverPort = 12000
clientSocket = socket(AF_INET, SOCK_STREAM)
clientSocket.connect((serverName, serverPort))
message = raw_input('xxx')
clientSocket.send(message.encode())
modifiedMessage = clientSocket.recv(1024)
clientSocket.close()
# server
serverName = 'hostIP'
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_STREAM)
serverSocket.bind((serverName, serverPort))
serverSocket.listen(1)
while True:
connectionSocket, addr = serverSocket.accept()
message = connectionSocket.recv(1024).decode()
# 处理message -> modifiedMessage
connectionSocket.send(modifiedMessage.encode())
serverSocket.close()
```