Computer Network Labs Review
声明:本blog基于2019夏 NJU Computer Network Labs, Teacher Chen Tian
Lab1 基本网络工具集的使用和协议数据单元(PDU)观测
1、任务
- 完成5台虚拟机随机拓扑网络的配置
- 利用Wireshark观测PDU
2、细节
基于VMware虚拟机
- 分配网络适配器
- 利用ifconfig 配置 IP地址与掩码
- 利用route 添加网关
- 利用ip route 添加路由规则
完成拓扑网络的配置
Lab2 RAW SOCKET编程与以太网帧分析基础
1、任务
- 利用socket技术实现packet解析
- 利用socket实现ping发送/接收
2、细节
- 定义Ethernet head、ip head、ip6 head、icmp head 、tcp head、 udp head、 arp head。利用以太网帧的起始地址,按照不同帧格式进行内容读取。
- ping实现
Lab3 子网划分和NAT配置
1、任务
- SNAT设置
- DNAT设置
2、细节
SNAT设置:
sudo iptables -t nat -A POSTROUTING -o ens39 -s 192.168.2.0/24 -j SNAT --to 210.28.130.166
指令解析: 这是固定 Public 地址(外网接口地址)的最基本的内访外 SNAT
POSTROUTING:源 SNAT 规则在路由以后在执行该链中的规则,其 match 源地址是翻译前的。
系统先路由——>再过滤(FORWARD)——>最后才进行 POSTROUTING
SNAT 地址翻译
-j SNAT: 源网络地址转换,SNAT 表示重写的源 IP 地址
–to xxx.xxx.xxx.xxx:表示需要写入的 IP 地址 -o 用于 POSTROUTING 和 OUTPUT,通常也是外网口(PREROUTING 只能用-i)
DNAT设置:
sudo iptables -t nat -A PREROUTING -d 210.28.130.166 -j DNAT --to-destination 192.168.2.3
让 Router 上接收到的所有目的地址为 210.28.160.166 的包都能经 过 NAT 转发到内部的 192.168.2.3 主机上。
Lab4 静态路由的编程实现
1、任务
- 通过C++模拟实现路由转发
2、细节
- 网络设备
PC1:发送ICMP包给PC2,维护ARP table、Device table
Router1:维护Route table、ARP table、Device table。确定下一条的IP、MAC后填入ICMP包并且修改TTL信息后转发
Router2:基本同R1
PC2:接收PC1的ICMP包然后返回ACK***
Lab5 动态路由协议RIP、OSPF和BGP观察
1、任务
- 理解自治系统(AS),观察RIP。OSPF以及BGP动态路由协议的实际运行过程。
2、细节
- RIP:是个非常简单的基于距离向量路由选择的协议
- OSPF: 采用链路状态路由选择技术,开放最短路径优先算法,路由器互相发送直接相连的链路信息和它拥有的到其它路由器的链路信息。(类似带宽、延迟之类?)
- BGP:是自治系统之间的路由选择协议
Lab6 v*n实现
1、任务
- 运用IP in IP的隧道方式实现v*n
2、细节
-
v*n 的实现主要在 Server1 和 Server2 上,每个 Server 需要进行封包/解包两个 操作。
封包:为需要经过隧道的源报文添加一个长度为 20 字节的 IPv4 头部,重新计 算该头部的 CRC、total_length,然后将 protocol 设置为 0x4,指示封装了 IPv4 包,发送 进入隧道.
解包: 判断收到的报文需要解包, 将包的前 14 字节的以太网头部和 34 字节以 后的原 IP 包重新结合,重新计算该头部的 CRC 后发送相应端口。 -
v*n 服务器如何判断到达服务器的包是进入隧道还是离开隧道
1、根据包的来源网段和目的网段判断包进入或者离开隧道
2、检测包的长度,实验中标准的 ICMP 包总长度为 84,封装过的 ICMP 包长度为 104,因为多了一个 20 字节的 IPv4 头部
Lab7 TCP拥塞控制机制
1、任务
- TCP基于I/O的长短流分析
2、细节
- TCP长流一般需要较大的流量,可以明显分为慢启动、拥塞避免、快速恢复这些阶段
- TCP短流一般是较小流量