OSI层级
| OSI层级 | 概念 |
|---|---|
| 应用层 | HTTP/HTTPS FTP DHCP DNS SSH TLS/SSL |
| 表示层 | TLS |
| 会话层 | RPC SOCKS |
| 传输层 | TCP UDP |
| 网络层 | IP ICMP RIP OSPF |
| 链路层 | MAC Ethernet ARP |
| 物理层 |
NAT
物理层: 错误检测与纠正
- 奇偶校验: 汉明码.
- 校验和:
- CRC:
交换
MAC/CSMA
CSMA: 基本 CSMA 的变化包括添加冲突避免 ( CSMA/CA )、冲突检测 ( CSMA/CD ) 和冲突解决技术。
p-persistent CSMA: 当发送节点准备好发送数据时,它感知传输介质空闲或忙碌。如果空闲,则立即传输。如果繁忙,则它连续感测传输介质,直到其变得空闲,然后以概率p进行传输。如果节点不传输(此事件的概率为1-p ),它将等待一段随机时间,然后使用相同的概率p重新尝试相同的过程。如果传输介质不忙,则以相同的概率p再次传输。这种概率性拖延会重复进行,直到帧最终被传输或者当发现介质再次变得繁忙时(即某个其他节点已经开始传输)。在后一种情况下,节点再次重复整个逻辑周期(从感测传输介质空闲或繁忙开始)。
CSMA/CA: 通过尝试在冲突域内的所有发送节点之间稍微平均地划分信道来提高CSMA方法的性能:
- 载波侦听:在传输之前,节点首先侦听共享介质(例如侦听无线网络中的无线信号)以确定另一个节点是否正在传输。请注意,隐藏节点问题意味着另一个节点可能正在传输,但在此阶段未被检测到。
- 避免冲突:如果听到另一个节点的声音,我们会等待一段时间(通常是随机的)让该节点停止传输,然后再次侦听空闲的通信信道。
- 可选地使用请求发送/清除发送(RTS/CTS)来调解对共享介质的访问. 如果发RTS后收到CTS, 继续发送.否则进行指数回避.
CSMA/CD: 通过在检测到冲突时立即终止传输来提高 CSMA 性能,从而缩短尝试重试之前所需的时间。
IP/ICMP
IP 的任务是仅根据数据包标头中的IP 地址将数据包从源主机传送到目标主机。为此,IP 定义了封装要传送的数据的数据包结构。它还定义了用于用源和目标信息标记数据报的寻址方法。
IP四种寻址方法:
单播(Unicast): 使用发送方和目的地之间的一对一关联将消息传递到单个特定节点:每个目的地地址唯一地标识单个接收方端点。
广播(Broadcast): 使用一对多关联向网络中的所有节点传递消息;来自一个发送方的单个数据报(或数据包)被路由到与该广播地址关联的所有可能的多个端点。
组播(Mutlicast): 将消息传递到一组表示有兴趣使用一对多多或多对多多多关联来接收消息的节点;数据报在一次传输中同时路由到许多接收者。多播与广播的不同之处在于,目的地地址指定可访问节点的子集,而不一定是全部。
任播(Anycast): 将消息传递到一组节点中的任何一个,通常是使用一对多关联最接近源的节点,其中数据报被路由到一组潜在接收者中的任何单个成员全部由相同的目标地址标识。路由算法根据某种距离或成本度量从最近的组中选择单个接收器。
ICMP
| ICMPv4标头 | ||
|---|---|---|
| 0-7 | 8-15 | 16- 31 |
| type | code | checksum |
| 32 - 63 | ||
| content |
路由协议:RIP / OSPF / BGP
RIP
域内路由协议, 使用Bellman-Ford算法和距离向量。定时与相邻的路由器交换子信息,动态地建立路由表。
- 距离: 跳数(最大为15跳,每跳的成本为1)
RIP的限制
Bad News Travels Slow:
OSPF
Open Shortest Path First
域内路由协议:
BGP
跨域路由协议。
BGP的工作原理可以简单概括为以下几个步骤:
- 建立邻居关系: 不同AS的BGP路由器之间通过TCP连接建立邻居关系。一旦建立邻居关系,它们就可以相互交换路由信息。
- 交换路由信息: 邻居之间通过BGP报文交换路由信息。BGP报文主要包括:
- Open报文: 用于建立BGP邻居关系。
- Update报文: 用于通告新的路由或者撤销旧的路由。
- Keepalive报文: 用于保持BGP邻居关系。
- Notification报文: 用于通知对端发生错误或终止BGP会话。
- 路由选择: BGP路由器根据收到的路由信息,结合自身的路由策略,选择最佳路径。BGP的路由选择主要基于以下几个属性:
- AS_PATH: 记录路由经过的AS序列,AS_PATH越短,路由越优。
- Local Preference: BGP路由器可以为其发出的路由设置本地优先级,优先级高的路由更优。
- MED(Multi-Exit Discriminator): 用于在多个出口选择最优路径。
- Origin: 表示路由的来源,分为IGP、EGP和Incomplete三种。
SDN
UDP
UDP报文包括:
| key | human |
|---|---|
| source | 192.168.1.106 |
| destination | 11.111.111.111 |
| protocol | UDP |
| length | 17 |
| source port | 13333 |
| destination port | 5234 |
| length | 17 |
| checksum | 0xb12d |
| data | hello UDP |
若应用要求基于UDP进行可靠传输:由应用层实现可靠性.
TCP
数据在TCP层称为流(Stream),数据分组称为分段(Segment)。作为比较,数据在IP层称为Datagram,数据分组称为分片(Fragment)。 UDP 中分组称为Message。
建立连接

三次握手:
- 客户端(通过执行connect函数)向服务器端发送一个SYN包,请求一个主动打开。该包携带客户端为这个连接请求而设定的随机数A作为消息序列号。
- 服务器端收到一个合法的SYN包后,把该包放入SYN队列中;回送一个SYN/ACK。ACK的确认码应为A+1,SYN/ACK包本身携带一个随机产生的序号B。
- 客户端收到SYN/ACK包后,发送一个ACK包,该包的序号被设定为A+1,而ACK的确认码则为B+1。然后客户端的connect函数成功返回。当服务器端收到这个ACK包的时候,把请求帧从SYN队列中移出,放至ACCEPT队列中;这时accept函数如果处于阻塞状态,可以被唤醒,从ACCEPT队列中取出ACK包,重新建立一个新的用于双向通信的sockfd,并返回。
可靠传输
序列号: TCP报文发送者自身发送的字节流编号,每个字节传输过后+1,32位整数。
序列号的初始化是随机的,以防范TCP序号预测攻击。
确认号:TCP报文发送者接收到对方的字节流编号。
校验和:16位校验和,发送者将TCP报文段的头部和数据部分的和计算出来,再对其求反码。较为脆弱。链路层使用32位CRC校验。——端到端原则。
重传:超时重传与重复累计确认重传
超时重传:典型的超时上限为smoothed RTT + max(G, 4*RTT variation)。 若仍没有确认,超时上限加倍(直至特定的阈值)——防止利用重传多次的DoS攻击。
重复累计确认重传:如果一个包(不妨设它的序号是100,即该包始于第100字节)丢失,接收方就不能确认这个包及其以后的包,因为采用了累计ack。接收方在收到100以后的包时,发出对包含第99字节的包的确认。这种重复确认是包丢失的信号。发送方如果收到3次对同一个包的确认,就重传最后一个未被确认的包。阈值设为3被证实可以减少乱序包导致的无作用的重传(spurious retransmission)现象。选择性确认(SACK)的使用能明确反馈哪个包收到了,极大改善了TCP重传必要的包的能力。
流量控制
使用滑动窗口。
拥塞控制
cwnd: 拥塞窗口
主机拥塞控制

- 慢开始:加速TCP启动时的增加——和最初TCP相比更慢。若成功收到一个包的ACK则
cwnd+1,即指数增长.直至阈值. - AIMD: 过大的滑窗远坏于过小的滑窗。如果上一滑窗成功收到ACK则
cwnd+1。如果丢包,则cwnd/=2。 - 拥塞避免:
- 快速重传:使用重复ACK以确定包的丢失。
- 快速恢复:重复ACK可以加快重传速度。
- TCP Vegas: 使用吞吐率的变化作为拥塞的标志。无拥塞时的吞吐率为预期吞吐率。当实际吞吐率远小于预期吞吐率时,减小拥塞窗口. 当实际吞吐率接近预期吞吐率时, 增大拥塞窗口.
路由器的拥塞控制
路由器的资源:
- 带宽:
- 队列缓冲区:
拥塞队列的调度:
位级别的公平排队: 按照最早的终止时间进行调度. 终止时间的定义为:
终止时间(i) = max(终止时间(i-1), 到达时间(i)) + 发送时长(i)
按照最早的终止时间为原则进行调度, 终止时间按照位级别的轮询进行计算.
DECbit:
当路由器想要向发送方发出拥塞信号时, 在发送的数据包标头添加一个位. 在数据包到达路由器时,路由器会计算上一个(繁忙+空闲)时段的平均队列长度加上当前的繁忙(正在传输数据包)时段.当平均队列长度>1(或其他阈值)时,路由器在到达数据包的数据包头中设置拥塞指示位.
当目的地回复时,相应的ACK包括设置的拥塞位. 发送方接收ACK并计算其收到的拥塞指示位设置为1的数据包数量. 如果最后一个窗口中不到一半的数据包设置了拥塞指示位, 则窗口线性增加. 否则指数减小.
终止连接

RPC / RTP
RTP

RPC (远程过程调用)
- Identifiers: 标识远程函数/方法, 类似IP地址. 标识讯息ID. 标识异常回复.
DNS 域名系统
顶级域
本地域名服务器
示例: 访问shanghaitech.edu.cn
本地缓存检查:
- 当你输入 shanghaitech.edu.cn 这个域名时,你的设备首先会在本地缓存中查找这个域名的IP地址。
- 如果本地缓存中没有找到,就会进行下一步:DNS解析。
本地DNS服务器查询:
- 你的设备会向本地DNS服务器发送一个查询请求,询问 shanghaitech.edu.cn 的IP地址是多少。
- 同一子网: 如果本地DNS服务器和你的设备在同一个子网内,设备会使用ARP协议来获取DNS服务器的MAC地址,然后直接向DNS服务器发送查询。
- 不同子网: 如果本地DNS服务器和你的设备不在同一个子网内,设备会先使用ARP协议找到网关的MAC地址,然后通过网关将查询路由到本地DNS服务器。
DNS服务器解析:
- 本地DNS服务器接收到查询请求后,会根据其配置的DNS数据库,查找 shanghaitech.edu.cn 对应的IP地址。
- 找到IP地址后,DNS服务器会将结果返回给你的设备。
建立连接:
- 你的设备收到DNS服务器返回的IP地址后,就会尝试与这个IP地址对应的服务器建立连接。
- 同一子网: 如果目标服务器和你的设备在同一个子网内,设备会使用ARP协议找到目标服务器的MAC地址,然后直接向目标服务器发送数据。
- 不同子网: 如果目标服务器和你的设备不在同一个子网内,设备会先使用ARP协议找到网关的MAC地址,然后通过网关将数据路由到目标服务器。