计网综述¶
约 4388 个字 • 26 行代码 预计阅读时间 25 分钟
重要的事情
如此概念性的课程,竟然没有在开头整理出学习路径,这让我很不解 自己骂自己
如果需要的话,可以参考一下计算机网络模型(TCP五层模型),其中的TCP/IP五层协议簇就是这门课程的重点
protocols define
format, order of messages sent and received among networkentities,
and actions taken on message transmission, receipt.
Cerf and Kahn 架构的理论特点
- minimalism,autonomy
- best effort service model
- stateless routers
- decentralized control
应用层协议¶
笔记中涉及应用层协议
- HTTP
- DNS
- FTP
- SMTP/POP3
- IMAP
- P2P
- DHCP
共8个
下面是一些基础的知识点
应用层协议规定:
- 类型(请求/应答报文)
- 语法(格式)
- 语义(每位的 0/1 分别代表什么)
- 规则
-
CS(Client-Server)
server一直开机,静态IP,并要求可伸缩的服务器农场
client只与server通信,动态IP -
P2P(Pear to Pear)
伸缩性强,but hard to manage -
Hybrid of CS and P2P
- IPC interprocess connection(进程间通信)
- socket 端口大门,使应用层与传输层想通
- L/R(传输一组多少秒)=1/传输率
- 带宽-传播时延积=链路上的最大比特数
- data loss
- timing
- bandwidth
- security
HTTP 协议¶
超文本传输协议(Hypertext Transfer Protocol,HTTP)是Web的基础,也是互联网的基础
HTTP协议是基于TCP/IP协议的,它属于应用层协议
特点¶
- 无状态性(Stateless)
HTTP 协议是无状态的,这意味着每个请求从客户端到服务器都是独立的,服务器不会保存关于客户端的任何状态信息。服务器无法通过 HTTP 协议本身记住客户端之前发送的请求内容或状态
-
优点:极大地简化了服务器的设计,使得服务器能够更高效地处理大量的请求,因为不需要为每个客户端维护复杂的状态信息。这也有利于服务器的扩展,可以方便地通过增加服务器数量来应对更多的客户端请求,而不用担心状态同步的问题
-
缺点:在一些需要记录用户会话或状态的应用场景中,如用户登录后的操作记录、购物车中的商品信息等,由于 HTTP 本身无状态,就需要通过其他方式来实现状态的保持。例如,使用 cookies 或者在请求中携带特定的会话标识符(如 Session ID),让服务器能够根据这些信息识别出是同一个客户端的请求,从而在服务器端或者其他地方查找并恢复相应的状态
- 缓存机制(Cache)
客户端在发送 GET 请求时,会携带一些条件信息,如 If-Modified-Since 头部字段,用于告诉服务器只有当资源自指定时间后被修改过时才返回新的资源内容
- 如果服务器判断资源没有被修改过,就会返回 304 Not Modified 状态码,客户端收到这个响应后,会直接使用本地缓存的资源,而不需要再从服务器获取完整的资源内容,这样可以减少网络传输的数据量,提高访问速度
- 如果资源被修改过,服务器则会返回新的资源内容和 200 OK 状态码,客户端会更新本地缓存并显示新的资源
服务器本身可以对一些经常被请求的资源进行缓存
当客户端请求这些资源时,服务器可以直接从本地缓存中获取并返回,而不需要每次都从存储设备(如磁盘)中读取,这样可以加快响应速度,减轻服务器的 I/O 负担
在客户端和服务器之间可能存在代理服务器
代理服务器也可以对经过它的请求和响应进行缓存。当多个客户端请求相同的资源时,代理服务器可以直接将缓存的资源返回给客户端,而不需要每次都向源服务器请求,这可以有效减少网络带宽的占用和源服务器的负载
例如,在一个公司内部网络中,代理服务器可以缓存经常访问的外部网站资源,如公司员工经常访问的新闻网站的首页内容,当其他员工再次访问该新闻网站首页时,代理服务器就可以直接提供缓存的内容,提高访问效率
CDN 是一种分布式的内容缓存服务器网络,它将网站的内容(如图片、视频、静态网页等)缓存到离用户较近的多个节点服务器上。
当用户请求这些内容时,CDN 会根据用户的地理位置等因素,将请求路由到离用户最近的节点服务器,该节点服务器直接从本地缓存中返回内容给用户,从而大大减少了内容传输的延迟,提高了用户访问速度和体验
例如,一个大型的视频网站可能会在全球部署多个 CDN 节点,当用户在不同地区访问该网站的视频时,CDN 会将视频内容从离用户最近的节点提供,而不是从网站的源服务器获取,这样可以有效应对大量用户的访问请求,保证视频的流畅播放
虽然 HTTP 本身是无状态的,但通过 cookies 可以在一定程度上实现状态的保持
服务器可以在响应中设置 cookies,客户端会将 cookies 保存在本地
在后续的请求中,客户端会自动将相关的 cookies 一起发送给服务器,服务器可以根据 cookies 中的信息识别出客户端的身份和一些状态信息,如用户的登录状态、个性化设置等
cookies 可以用于快速认证用户身份,避免用户在每次访问需要认证的页面时都重新输入用户名和密码(在一定时间范围内)。同时,它也可以用于优化用户体验,例如根据用户的偏好设置来展示不同的页面内容或功能
例如,一个电商网站可以根据用户的 cookies 中保存的购物偏好,在首页推荐用户可能感兴趣的商品
- 持续连接与非持续连接
- 非持续连接 :在 HTTP/1.0 中默认使用非持续连接。当客户端向服务器发送一个请求后,服务器在处理完请求并返回响应后,就会关闭 TCP 连接。如果客户端需要再次请求其他资源,就必须重新建立一个新的 TCP 连接
这种方式的优点是实现简单,但缺点是每次建立和关闭连接都需要消耗一定的时间和系统资源,尤其是在需要请求多个资源(如一个网页中的多个图片、CSS 文件、JavaScript 文件等)时,会频繁地建立和关闭连接,导致网络延迟增加,影响网页的加载速度。 - 持续连接 :从 HTTP/1.1 开始,默认使用持续连接。在持续连接的情况下,客户端和服务器在建立连接后,可以在这个连接上发送多个请求和响应,而不会立即关闭连接。这样可以减少建立和关闭连接的开销,提高传输效率。例如,当客户端请求一个包含多个资源的网页时,可以在同一个 TCP 连接中依次请求这些资源,服务器依次返回响应,直到客户端完成所有资源的请求或者主动关闭连接
- RTT(Round - Trip Time,往返时间)
RTT 是指从客户端发送一个请求开始,到客户端接收到服务器的响应所经过的时间。它包括请求从客户端传输到服务器的时间,以及服务器处理请求并返回响应的时间,还有响应从服务器传输回客户端的时间
RTT 是衡量网络性能的一个重要指标。在 HTTP 通信中,较小的 RTT 意味着客户端可以更快地获取到服务器的响应,从而提高用户体验。优化 RTT 可以通过多种方式实现,如使用更快的网络连接、优化服务器性能、采用内容分发网络(CDN)等
- 流水线模式(Pipelining)
在 HTTP 的流水线模式下,客户端可以在一个 TCP 连接中同时发送多个请求,而不需要等待服务器对前一个请求的响应。这些请求会按照发送的顺序被服务器接收和处理,服务器也会按照顺序返回响应
流水线模式可以提高 HTTP 的传输效率,尤其是在请求多个小资源(如多个小图标、小图片等)时。因为不需要等待每个请求的响应再发送下一个请求,可以减少等待时间,提高资源获取的速度。例如,在一个网页中有多个小图标需要加载,使用流水线模式可以更快地获取这些图标,加快网页的渲染速度。
也存在一些问题
Socket 传输的是字节流,它本身并不区分不同的 HTTP 请求和响应。在流水线模式下,客户端发送的多个请求和服务器返回的多个响应都是以字节流的形式在 Socket 中传输的。这就需要客户端和服务器能够正确地识别和区分不同的请求和响应,通常通过 HTTP 的头部信息(如 Content - Length、Connection 等头部字段)来实现
如果服务器对前面的请求处理时间较长,可能会导致后面的请求在管道中被阻塞,影响整体的传输效率。例如,如果第一个请求是一个需要复杂计算的请求,服务器处理时间较长,那么在同一个管道中的后续请求就会等待前面的请求处理完成才能得到响应
在流水线模式下,如果某个请求出现错误,可能会对后续的请求和响应产生影响,因为请求和响应的顺序可能会被打乱,或者需要额外的机制来处理错误情况,这增加了实现的复杂性。
HTTP协议演进¶
DNS 协议¶
FTP 协议¶
你应该知道的
- 21/20 端口
- 以 TCP 建立连接
- 双信道,一道指令(21),一道文件传输(20)
- 有 active(PORT)/passive(PASV)两种,前者 server 会主动建立文件信道给 client,passive 则需要 client 自己主动再连
SMTP/POP3 协议¶
你应该知道的
- MIME用于发送图片,中文等,用Base64等编码方式编码为ASCII
- Base64(取6补2,三片变四片,结尾不够加=,直到凑4片)/QP编码
- 使用
.
结束邮件
- 主要接收协议:POP3/IMAP(常见于移动端)/HTTP(网页端)
IMAP 协议¶
¯\_(ツ)_/¯: IMAP 协议解析
P2P协议¶
有 centralized dictionary | query blooding | KaZaA 三种形式
-
centralized dictionary
资源分布在各个pear里面而非集中在服务器,每个Client向server提供愿意分享的资源
服务器只需要提供目录,pear通过目录就近寻找最近的节点pear下载
但是存在单点失效问题,版权问题 -
query blooding
几乎去中心化,通过熟人一个个问
人人有责,人人无责(no leader)
但是占用较多带宽 -
KaZaA
综合前两者,存在组长
但协议复杂
DHCP协议¶
-
基于 UDP | 67 server 端口 | 68 client 端口
-
动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)是TCP/IP协议族中的一员,用于动态配置IP地址,主要有以下几个用途
- 网络地址自动配置(Network Address Auto Configuration,NAA):当一台计算机加入到网络时,DHCP服务器会自动为其分配IP地址、子网掩码、网关地址等网络参数
- 网络参数自动分配(Dynamic Host Configuration Protocol for IPv6,DHCPv6):IPv6的DHCP协议与IPv4的DHCP协议不同,它使用更复杂的算法来分配IPv6地址
- 远程网络访问(Remote Access):DHCP可以让用户远程连接到网络,而无需手动配置IP地址、子网掩码、网关地址等网络参数
- 域名系统(Domain Name System,DNS):DHCP可以提供域名解析服务,使得用户可以访问网络上的计算机
-
DHCP协议工作过程
- 客户机发送DHCPDiscovery广播包发现DHCP服务器,请求IP地址(包里面有MAC地址)
- 服务器发送DHCPOffer广播包(返回MAC和IP)(这里可能有多个服务器响应)
- 客户机发送DHCPRequest广播包告知筛选结果
- 筛选出的服务器发送DHCPACK(acknowledge)广播包(仓库数据打包一份送给客户机),更新租约表
- 租期过50%,跳转至
c
- 若
e
无反应,租期过87.5%
,跳转至c
- 租约到期,则跳转至
a
- 若请求无响应,则自行分配169.245.X.X/16无效 IPnetmask 255.255.0.0
传输层协议¶
不妨直接看人家的笔记🤪
TCP&&UDP—端到端服务¶
- UDP: 无连接(没有持续连接)
- TCP: 无状态
他们的悲欢并不相通
- TCP会平分链路。user速度先快,后慢下来,最后平衡
- UDP会直接截断TCP传输
- rdt:RDT 协议 (可靠数据传输协议)_rdt 实现
1. 用ACK/NAK处理差错--2.0
2. 用seq num处理乱序--2.1
3. 重复ACK代替NAK--2.2
4. 超时重发--3.0
5. 用流水线提高速度,规避FSM下的停等协议
GBN/SR¶
流水线下的丢包解决方案
需要注意的
- SR会直接输出乱序的seq并缓存
- GBN会输出已经按顺序接收包中的最大顺序
- GBN有累计确认,SR一个一个确认
TCP协议传输过程¶
- 面向对象的连接
- 设定初始序列号与缓存(buffers)、流量控制
- 客户端创建socket,服务器准备接收socket
三次握手建立连接
- 发送SYN(给seq#,每次开始32字节绝对序号随机,no data)
- 回SYN ACK(回seq)
- 发送 ACK(确认seq)
回包的ack由发包的seq+len决定,包的下一个seq_i=seq_(i-1)+len;
sequenceDiagram
participant Client
participant Server
Client->>Server: SYN (seq=x)
Note left of Client: Client → SYN_SENT
Server->>Client: SYN-ACK (seq=y, ack=x+1)
Note right of Server: Server → SYN_RCVD
Client->>Server: ACK (ack=y+1)
Note left of Client: Client → ESTABLISHED
Note right of Server: Server → ESTABLISHED
四次挥手断开连接
1.发送FIN
2.回ACK
3.回FIN
4.发送ACK
5.等待定时器结束
sequenceDiagram
participant Client
participant Server
Client->>Server: FIN (seq=u)
Note left of Client: Client → FIN_WAIT_1
Server->>Client: ACK (ack=u+1)
Note right of Server: Server → CLOSE_WAIT
Server->>Client: FIN (seq=v, ack=u+1)
Note right of Server: Server → LAST_ACK
Client->>Server: ACK (ack=v+1)
Note left of Client: Client → TIME_WAIT
Note right of Server: Server → CLOSED
端到端传输¶
-
流量控制:为发送端和接收点应用层提取数据的速度进行匹配
speed match(速度匹配)/滑动窗口 -
QoS:传输层质量服务(Quality of Service)
通过采样评估速度,确定timeout时间- 指数平移法 \(estimated_{rtt}=0.875*前n-1次estimated_{rtt}+0.125*第n次sample_{rtt}\)
- 加上安全余量 \(devrtt=0.75*devrtt+0.25*|estimated_{rtt}-sample_{rtt}(计算差值)|\)
- timeout时间= \(estimated_{rtt}+4*devrtt\)
-
快速重传:连续三次收到重复ack。一次正常两个乱序
拥塞控制
- 缓存够,带宽有限:输入饱和但不会丢包。延时很大,一直 排队
- 缓存有限,带宽有限:在
1
的基础上出现 丢包重发 ,再次占用带宽,输入大于输出, 斜率<1 ,效率降低 - 多个路由器: 输出随输入先增大后减少。节点变多,多重传占用,最后死锁
拥塞控制方法
- Network-assisted congestion control 网络协助拥塞控制, 路由器分析 并feedback
- End-end congestion control 端到端拥塞控制,通过对收发两端的 丢包与延时 进行观察
sender方
- LastByteSent - LastByteAcked <= CongWin(发送速度窗口)
- rate(发送速率) = CongWin/RTT
超时或三次重传(丢包事件)时,rate减速
减速逻辑
- AIMD—additive increase && multiplicative decrease—加增乘减
- slow start
- Conservative after timeout events(保守)
解释
- 连续ack,则下次CongWin指数变大。开始增长得慢,后面快。(拥塞避免)超过阈值后线性变大
- 丢包后阈值变为最大值的一半
- 快速重传,则CongWin从阈值开始;timeout,则CongWin重新slow start
网络层¶
IP协议¶
具体见我飞书笔记之网络安全笔记
路由器--找路径¶
- AS:自治系统
- Stub(桩) AS:单点出口
- Multihomed() AS:多点出口
- Transit AS:运营商连接
- Inter-AS:BGP 协议——连接 Intra-AS > 参考:BGP协议总结
- Intra-AS(自制系统内的路由协议)
- IGP(内部网关协议):RIP、OSPF、IGRP
- RIP--基于距离向量算法
- OSPF(open shortest path first):最短路径优先
子网划分¶
CIDR
- 通过掩码来确定子网划分后的网段位数:逐位&运算
- 表达方式:
10.22.155.25 255.255.255.0
或10.22.155.25/24
- 255.255.192.0 === /18 === 16+2位网段
- 某子网主机数:256-192-2
- 分割子网数量:见下图
- 子网数看前面占了几位1,主机数看后面剩几位0
数据链路层¶
负责内网相邻节点的通信
需要保证节点传输数据的可靠性,Add 流量控制/错误检测与纠错/全双工通信
通信方式:PPP | 以太网-> 多路访问协议
通信协议¶
Slotted Aloha
- 以帧为单位同一 CLK(synchronization)在基带上,出现碰撞则放弃,效率为 0.37
Pure Aloha
- 异步 CLK ,no synchronization,simpler | 效率为 0.18
CSMA (carrier sense multiple access)载波监听多路访问
CSMA/CD (collusion detection)冲突监测
CSMA/CA (collusion avoidance):回避冲突
RTS-CTS
ARP 协议¶
Ethnet¶
- 无连接
- 使用 CSMA/CD
- 监测到电平异常,提前放弃(exponential backoff 指数回退),并全网发布冲突信号 JAM——48bits。
- exponential backoff:\(K*51.2 微秒,K=Random\#\{0,1,2,...,2^{m-1}\},m=冲突次数\)