网络基础
网络体系结构
搭建一个计算机网络,让网络内的各台计算机能够互相通信,应该从哪几个方面解决?网络体系结构解决的便是这个问题,即将通信问题划分为多个不同的子问题,每个子问题对应体系结构中的一层。单独的层高度内聚,着力解决本层该解决的问题;不同的层轻微耦合,降低各层联合的难度。已知的层次划分有许多种,包括:
- OSI七层模型
- 物理层
- 数据链路层
- 网络层
- 传输层
- 会话层
- 表示层
- 应用层
- TCP/IP模型
- 网络接口层
- 网络层
- 传输层
- 应用层
- 原理模型
- 物理层
- 数据链路层
- 网络层
- 传输层
- 应用层
原理模型是学习计算机网络最常用的模型,它将OSI的会话层、表示层、应用层合并为统一的应用层,即上文罗列的结构;而四层TCP/IP模型则将物理层和数据链路层统一为网络接口层,因为这两层提供了节点与节点之间的具体到比特的信息传输。
物理层
主要任务: 确定与传输媒体接口有关的一些特性,即机械特性、电气特性、功能特性、过程特性等。笔者认为也可以理解为实现可靠且高效的发送信息(比特流),这也是通信的目标。信息论中将通信系统分为三大主要部分:
- 发送方。包括信源和发送器。
- 信道。信号传输的通道,理想情况下是无噪声的,但现实情况下都存在多变的噪声。
- 信宿。包括接收器和信宿。
而信道则是物理层的主角。狭义的信道单指传输媒介,而广义的信道包含更多部分,具体如下图所示。
其中调制是常用的传输手段,它通过调幅、调频和调相方式将数字信号转变为模拟信号,进而提高它在传输媒介上的运输效率与可靠性。而编码技术是提高可靠性的关键手段,信息论指出对于任意不可靠信道,总存在一种编码手段使得在这个信道上进行可靠通信的速率可以达到信道容量C。特别的,对于加性高斯白噪声信道,信道容量为,其中为带宽,为信号与噪声的功率比。
另外,信道根据传输方式可以分为:
- 单向通信(单工通信)
- 双向交替通信(半双工通信)
- 双向同时通信(全双工通信)
复用技术是提高信道使用率的关键技术,常见的复用技术包括:
- 频分复用(FDM,Frequency Division Multiplexing):把各路信号分别搬移到适当的频率位置,使彼此不产生干扰,同样的时间占用不同的带宽资源。
- 时分复用(TDM,Time Division Multiplexing):将时间划分为一段段等长的时分复用帧,所有用户在不同的时间占用同样的频带宽度。
- 统计时分复用(STDM, Statistical Time Division Multiplexing):改进的时分复用,根据用户活跃度动态分配信道使用时间。
- 波分复用(WDM,Wavelength Division Multiplexing):光的频分复用。
- 码分复用(CDM,Code Division Multiplexing): 将一个bit时间划分为多个小间隔,记为码片,并为使用当前信道的基站(Station)分配特定的码片,这样便可以区分使用信道的源头。当码分复用信道为多个不同地址的用户所共享时,就称为码分多址CDMA。
数据链路层
数据链路层主要解决三个问题:
- 封装成帧。在一段数据的前后分别添加首部和尾部,构成一个帧。接收端在收到物理层上交的比特流后,能够根据首部和尾部的标记,从收到的比特流中识别帧的开始和结束。
- 透明传输。透明传输指无论什么样的比特组合都应该能在链路上传输,即要解决控制字符的歧义问题,因此对帧定界符(SOH和EOT)前加转义字符,接收端接收到转义字符时默认将转义字符后的字符当做数据接收。
- 差错检测。检测传输过程中的比特差错。误码率是一种衡量方式,并且循环冗余校验(Cyclic Redundancy Check)是常用手段。
MAC(Media Access Control)地址。直译为媒体存取控制位址,也称为局域网地址(LAN Address),以太网地址(Ethernet Address)或物理地址(Physical Address),用于在网络中唯一标示一个网卡,用来确认网络设备位置的地址。
CSMA/CD(Carrier Sense Multiple Access/collision detection)协议。所有节点都共享网络传输信道,节点在发送数据之前,首先检测信道是否空闲,如果信道空闲则发送,否则就等待;在发送出信息后,再对冲突进行检测,当发现冲突时,则取消发送。
网络层
网络层主要搭建一个虚拟网络,网络中的虚拟节点为主机,每个小节点分配各自的虚拟地址——IP,使得只要在同一虚拟网络中的主机便可以互相通信,而不需要关注底下两层进行的实际节点与节点之间的传输。网络层提供虚电路服务(路由路径)和数据报服务(传输数据)。
IP地址包括IPv4地址和IPv6地址,IPv4地址如下图所示。
网络层协议包括但不限于如下几种:
- ARP(Address Resolution Protocol)。解决IP地址与MAC地址的映射问题。
- ICMP(Internet Control Message Protocol)。用于在IP主机、路由器之间传递控制消息。
- IGMP(Internet Group Management Protocol)。组播协议。
- IP(Internet Protocol)。数据传输所用的数据报格式,具体如下图所示。
- RIP(Routing Information Protocol)。
- OSPF(Open Shortest Path First)。
- BGP(Border Gateway Protocol)。
- NAT(Network Address Translation)。
运输层
提供进程间的逻辑通信,并且使用端口表示进程,主要包括两种协议:
- TCP(Transmission Control Protocol)。 面向连接,可靠。
TCP三报文握手(防止历史连接干扰新连接,主要更正了Seq和Ack)具体过程如下:
- 客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SENT状态。
- 服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
- 客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
TCP四报文挥手的过程如下:
- 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。
- 接收到这个FIN的对端执行 “被动关闭”(passive close)。
- 一段时间后,接收到FIN的应用进程将调用close关闭它的套接字,并且也发送一个FIN。
- 接收这个最终FIN的原发送端确认这个FIN。
TCP状态机:
可靠性。使用连续ARQ协议,以字节为单位使用滑动窗口。
- 发送指针持续发送并前移,确认指针在接收到累积确认的序号后移动到对应序号。
- 超时重传。对迟迟没收到确认的数据采用重传策略。
- 选择确认SACK。允许只确认少量的错误数据。
流量控制。接收方发送流量控制报文控制发送方滑动窗口大小。
拥塞控制。
- 慢开始。发送⽅每收到⼀个 ACK,拥塞窗⼝cwnd+=1。
- 拥塞避免。拥塞窗⼝cwnd超过慢启动⻔限ssthresh时进⼊拥塞避免算法,收到⼀个 ACK 时,cwnd增加1/cwnd。
- 快重传。包括超时重传和快速重传。超时重传指一定时间没收到ACK就重新发送对应报文,快速重传指接收方丢包后连续发送三次ACK通知发送方重传。此时cwnd = cwnd/2,ssthresh = cwnd。
- 快恢复。结合快速重传使用,首先将cwnd=ssthresh+3,然后重传数据包,若收到重复ACK,cwnd+=1;若收到新数据,cwnd设为ssthresh。
- UDP(User Datagram Protocol)。无连接协议,数据格式如下图。
应用层
提供进程应用服务,主要包括:
| 协议 | 端口 |
|---|---|
| HTTP | 80 |
| HTTPS | 443 |
| FTP | 21 |
| SMTP | 25 |
| POP3 | 110 |
| DNS | 53 |
RPC框架
基本概念
远程函数调用(Remote Procudure Call,RPC)解决三个主要问题:
- 函数映射
- 数据转化成字节流
- 网络传输
基本的框架如下图所示。
层次结构
- 编解码层。将数据从内存中表示变换到字节码,包括文本格式、二进制格式等,具体选择可以从兼容性、通用性和性能等考虑。
- 协议层。规定双方交流的语义,如使用特定结束符、使用头部规定元数据等。
- 通信层。提供网络传输服务,通常使用网络库进行Socket编程。
关键指标
- 稳定性。1~3为降级手段。
- 熔断
- 限流
- 超时
- 重试
- 负载均衡
- 长尾请求(Backup Request)
- 易用性
- 扩展性
- 观测性
- 高性能