网络接入
同网段
交换机/逻辑交换机:
一般为三层集合了路由信息,有一个MAC地址表,用于记录MAC地址与端口的映射关系,进行快速转发。
SDN(Software Defined Networking)
Software Defined Networking (SDN) 是一种新的网络架构,其主要思想是将网络设备的控制平面和转发平面分离开来。使用虚拟网段可能不在同一个物理逻辑交换机
跨网段 - 路由
- 路由不一定对称
- 路由不一定工作在IP层,也可能在传输层
- 路由改变mac地址而不是ip地址,找到发包口
void send_one_pkt(){
rt = find_rt(dst) // 包含主机出口网口&Nexthop
...
l2 -> dst_mac = rt->next_hop->mac // 怎么获取路由的mac?
p = append(p, 12)
...
send(p, rt->port) //发包需要指定网卡
}
ARP协议
ARP(Address Resolution Protocol) 协议是根据IP地址获取物理MAC地址(获取下一跳的mac)的一个网络协议。其主要功能如下:
- 地址解析
ARP协议用于根据IP地址来查询对应的MAC地址,称为地址解析。
- ARP请求与回复
获取地址映射主要通过两种ARP消息:ARP请求与ARP回复。发送ARP请求查询MAC地址,收到ARP回复获取映射。
- ARP缓存
ARP表项会被ARP缓存起来,下次请求时可以直接查表,避免冗余ARP通信。
- 标准化协议
ARP是网际互联协议中的一个标准化网络协议,详细定义了ARP报文格式、地址解析机制等。
- 局域网协议
ARP只工作在以太网局域网中,用于解析同一个局域网内设备的地址映射关系。
- 无连接协议
ARP本身 does not 维护任何连接状态,属于无连接的网络层协议。
IP协议
为什么不能用mac替代ip: 兼容问题(不同地址协议统一)
NAT
NAT设备通常部署在本地网络和外部网络的边界。内部网络的内部主机在访问外部网络时,其源IP地址会被NAT转换:
- 内部用户源地址更改
内部网络的主机都配置了私有IP地址(如192.168.x.x),这些地址在外部网络中不可路由。当内部主机访问外网时,NAT会将其源IP更改为全局可路由的地址。
- 使用同一个外网IP地址
NAT会使用自己的外网IP地址(如120.xx.xx.xx)来作为所有内部主机的新源IP地址。不同内部用户共享使用这个外网IP地址。
- 唯一的外网IP地址
NAT设备上的这个外网IP地址在全球范围内都是唯一的,可以确保源地址的全局唯一性。
- 在外网连接时源地址唯一
尽管内部网络中不同用户共享一个外网源IP地址,但当它们访问外部网络时,在外部网络的视角中,都使用了唯一的NAT外网IP地址。
网络传输
数据包
数据包(packet)是网络传输中的基本数据单元。它包含传输的数据和一些控制信息,如源地址、目的地址等。具体来说:
- 数据包包含要传送的数据。这些数据按照一定的格式组织和封装,称为数据包的载荷。
- 数据包包含源地址和目的地址,用于指示数据的来源和去向。这对于路由数据包至正确的目的地很重要。
- 数据包包含序号或标识信息,用于指示数据顺序或数据包的身份。这在接收端重组数据时必需。
- 数据包包含错误检查信息,如校验和或CRC码,用于检测数据传输错误。
- 可选的,数据包可包含一些控制信息,如优先级、服务类型等,用于区分不同优先级或服务的流量。
数据包发送
最下面的箭头包含复杂的网络传输
DNS请求
递归请求
递归查询(Recursive Query)是域名系统(DNS)解析中的一种查询方式,它指本地DNS服务器在收到客户端的查询请求时,不直接返回结果,而是向其他服务器发出递归查询以获取最终结果。
递归查询的基本过程是:
- 客户端向本地DNS服务器(递归器)发送查询请求,要求进行递归查询。
- 递归器收到请求后,如果不能由本地缓存解析,就初始化一个递归查询过程。
- 递归器根据域名逐级向根域名服务器查询,被告知权威DNS服务器地址。
- 递归器向权威DNS服务器发起递归查询,直到获取结果。
- 权威服务器返回查询结果给递归器。
- 递归器缓存结果,并将最终结果返回给客户端。
根域名服务器(Root Name Server)是域名系统(DNS)中的一种关键服务器,它负责管理根区域,并处理对顶级域(TLD)的查询请求。
根域名服务器的主要功能有:
- 负责解析顶级域,如.com,.net,.org等。根服务器直接负责这些顶级域的权威信息。
- 保存权威 DNS 服务器的信息,为递归服务器转发查询提供依据。
- 处理客户端对根区文件的查询请求,返回负责对应TLD的权威服务器地址。
- 维护一个权威的根区文件,记录全部TLD信息。
- 与全球其他DNS服务器同步根区域文件的变化。
根域名服务器属于DNS层级结构的最上层,是DNS系统的重要基础。全球共有13组根服务器,分布在世界各地,并有多个实例同时对外提供服务,以提高可靠性。
UDP传输协议
将数据打包成UDP数据报的过程可以概括如下:
- 为要发送的数据添加UDP头部
- 定义UDP头部结构体,包含源端口、目的端口、长度、校验和等字段
- 创建UDP头部,填充源端口、目的端口等关键信息
- 计算UDP长度和校验和字段
- 长度字段表示UDP头部+数据的总字节数
- 校验和根据伪头部和UDP报文逐Byte计算,用来检验数据完整性
- 将UDP头部结构体转换为字节流
- 使用htons,htonl将结构体中的短整形和长整形字段转换为网络字节序
- 使用指针直接强制类型转换为字节流
- 将UDP头部字节流与数据字节流拼接
- 头部字节流+数据字节流构成一个完整的UDP数据报
- 通过套接字发送UDP数据报
- 使用sendTo系统调用,将构造的数据报通过套接字发送出去
- 接收端解析UDP头部与数据
- 通过recvFrom读取UDP数据报
- 解析UDP头部获取关键信息,提取数据部分
TCP协议
TCP连接本质上是一种状态的维护,所以当网络连接断开时,TCP连接不一定断开。
TCP三次握手
TCP三次握手(Three-Way Handshake)是建立一个TCP连接时使用的一种连接建立机制,它的基本过程是:
- 客户端向服务器端发出连接请求报文,带SYN标志,随机选择一个初始序号x。
- 服务器收到连接请求报文,向客户端回复同意连接的应答报文,SYN标志和ACK标志都为1,确认序号为x+1,同时也选择一个自身的初始序号y。
- 客户端收到服务器的响应报文后,再次向服务器发出确认报文,ACK标志为1,确认序号为y+1。
这个握手过程通常需要传送3个报文段。客户端和服务器均以 SYN 报文同步序号,并通过 ACK 报文确认对方的SYN 报文,以确认连接的建立。