0%

计算机网络(CS305)期末复习笔记

2022春季学期

数据段 segment

数据报 datagram

帧 frame

.image-20220606165651280

.image-20220608115751782

应用层

HTTP/1.0的响应时间

image-20220606202925742

HTTP/1.1减少了一个RTT

DHCP

Dynamic Host Configuration Protocol,使移动端设备可以加入网络,基于UDP

.image-20220607235453209

DHCP不仅可以分配IP地址,也可以分配第一跳的路由器地址,以及DNS服务器地址

SMTP

SMTP(Simple Mail Transfer Protocol)

mailbox: 接收消息

queue: 发送消息

.image-20220606212455001

SMTP使用长连接

格式👇

.image-20220606212854086

IMAP

IMAP(Internet Mail Access Protocol),用于对服务器上的邮件进行折叠,删除,访问等操作

.image-20220606213142335

P2P

区块链、快播都是P2P模式的应用

.image-20220606223816079

传统的C/S模式下,$N$个用户需要请求文件,只能利用服务器的带宽$u_s$,则有
$$
T=max\{\frac{NF}{u_s},\frac{F}{u_{min}}\}
$$
其中,$F$为文件大小,$u_{min}$为所有客户端中的最小带宽

.image-20220606230049024

而在P2P模式中,文件被分为许多块,存储于各个客户端内,每个客户端请求自己缺失的块,这样就可以利用上所有客户端的带宽

每个结点的地位都是对等的,既充当服务器,为其他结点提供服务,同时也享用其他结点提供的服务
$$
T=max\{\frac{NF}{\sum{u_i}},\frac{F}{u_{min}}\}
$$
优点:

  1. 下载速度快,人越多越快
  2. 不用担心服务器宕机,因为每个人都是服务器

Video Stream

DASH(Dynamic, Adaptive Stream over Http)

  • 服务器把每段视频都用不同的码率存储
  • 客户端周期性地测量带宽,请求当前带宽所能承受的最大码率的视频段

CDN(Content Distribution Network)

数百万量级的视频不可能全部存储在一个超大的服务器上:不安全、网络拥堵、….

CDN把很多视频副本分散存储在地理上相隔很远的服务器上

Socket

Socket在应用层和传输层之间

UDP

.image-20220607092358112

UDP Client

1
2
3
4
5
6
7
8
server_name='xxxx'
server_port=12000
client_socket=socket(AF_INET,SOCK_DGRAM) //create socket object
message=raw_input('Input lowercase sentence:') //get user keyboard input
client_socket.sendto(message.encode(),server_name,server_port) //send message to server
modified_message,server_address=client_socket.recvfrom(2048) //get reply from server
print(modified_message.decode())
client_socket.close()

UDP Server

1
2
3
4
5
6
7
server_port=12000
server_socket=socket(AF_INET,SOCK_DGRAM) //create socket object
server_socket.bind(('',server_port)) //bind the listening port
while True:
message,client_address=server_socket.recvfrom(2048)
modified_message=message.decode().upper()
server_socket.sendto(modified_message.encode(),client_address)

UDP: 无连接的demultiplexing,只使用目标端口进行识别

.image-20220607162023689

TCP

.image-20220607093329114

TCP Client

1
2
3
4
5
server_name='xxxx'
server_port=12000
client_socket=socket(AF_INET,SOCK_STREAM) //Note:STREAM
client_socket.connect((server_name,server_port))
...

TCP Server

1
2
3
4
5
6
7
8
9
server_port=12000
server_socket=socket(AF_INET,SOCK_STREAM) //Note:STREAM
server.bind(('',server_port))
server_socket.listen(1) //server begins listening for TCP requests
while True:
connection_socket,addr=server_socket.accept //wait for incoming request, then create new socket for connection
sentence=connection_socket.recv(1024).decode()
connection_socket.send(sentence.upper().encode())
connection_socket.close()

有连接的demultiplexing,基于源IP,源端口,目标IP,目标端口发送给对应的socket

.image-20220607162435342

传输层

  • 应用层负责主机间通信
  • 传输层负责进程间通信

传输层把数据切分为数据段(segment),接收后再组装起来送给应用层

UDP

报文格式👇,仅有8 byte固定长度的头部

.image-20220607163205985

校验和的目的是检测传输过程中的位错,但无法恢复

  • 发送方将UDP数据段视为一系列16bits的整数,将他们相加,最后取反码即为校验和

    .image-20220607165044078

    溢出位要加到最后面

  • 接收方重新计算校验和,比较是否一致

Reliable Data Transfer

一次只发送一个数据包,利用率Utilization很低

.image-20220607171457758

pipline可以提高利用率

.image-20220607171553199

关系图

前提条件:buffer无限

.image-20220607205751940

buffer有限,会发生丢包,传输层数据量>=应用层数据量

.image-20220607210400907

在重传的数据包中,有一些是因为超时重传而产生的非必须重传(只是延迟了,并没有丢失)

多个路由器,会造成雪崩效应

.image-20220607213137140

网络层

注意:源IP和目标IP没有变化,但源Mac和目标Mac发生了变化

.image-20220606164240803

.image-20220606164519632

.image-20220606164829625

四种延迟

  1. 处理延迟:检查位错+决定输出端口,在毫秒以内
  2. 排队延迟:取决于拥塞状况,是延迟的主要来源v
  3. 传输延迟(发送延迟):是主机路由器发送数据帧所需要的时间,也就是从发送数据帧的第一个比特算起,到该帧的最后一个比特发送完毕所需的时间,发送延迟 = $L/R$ ,L为数据帧长度(bit),R为信道带宽(bps),在毫秒以内
  4. 传播延迟:电磁波在信道中传播花费的时间,传播延迟 = $d/v$,d为信道长度,v为传播速度(一般为$\frac{2}{3}c$)

.image-20220606191726051

排队延迟可以用$La/R$(类似于一种密度)来估算,其中a表示数据包的平均到达速率

.image-20220606193447805

吞吐量(throughput)和带宽(bandwidth)的区别

  • 带宽指信道的最大速率
  • 吞吐量指实际传输的速率

IPv4

报文格式

.image-20220607221227077

不同的信道具有不同的MTU(Maximum Transmission Unit),所以一个数据包可能被拆成多个发送,叫做fragmentation

而被拆分的数据包只会在目的地聚合,叫做reassembly

.image-20220608094635703

.image-20220608094830964

NAT

Network Address Translation

内网的IP是和外网独立的,所有内网的设备在外网看来只有一个公网IP地址

.image-20220608085331402

IPv6

报文格式

.image-20220608085817693

相比IPv4

  • 去除了校验和,目的是减少路由器的处理时间$d_{proc}$
  • 去除了option

有些路由器不支持IPv6,可以借助“套娃”实现不同路由器之间的传播

.image-20220608090321676

示例👇

.image-20220608090624069

每个路由器内部都有一个流表,传统的流表只能根据IP地址定义行为

.image-20220608091801948

采用OpenFlow后,可以检测各个协议的头部信息

.image-20220608091414950

举例👇

.image-20220608091433812