UCAS计算机网络实验
經過兩周辛勤的的工作,把實驗一實驗三完成了,不過其中還是有點不足的,不過主要實驗目的完成了,后面還有一些不太要緊的就算了。
后面有空的話 應該還會把實驗五做一下
源碼:https://github.com/cuixuage/NetWorking_MiniNet
Experiment
1.Switch_stack交換機實驗 completed in 2017/11/8
實現對數據結構mac_port_map的所有操作,以及數據包的轉發和廣播操作
思路:
1.對于收到的packet,根據其des_mac在FDB表中進行查詢,存在對應的interface則轉發,否則在局域網內廣播此packet
2.對于收到的packet,如果其src_mac不在FDB表中則認為是新加入的主機,將其src_mac與interface物理端口的映射關系加入FDB
3.key points: 當交換機從某一個interface收到來自src_mac地址的A主機的packet時,可以確定: des_mac為A主機的packet從其對應的inerface轉出即可到達A主機
實現函數:
-iface_info_t *lookup_port(u8 mac[ETH_ALEN]);
-void insert_mac_port(u8 mac[ETH_ALEN], iface_info_t *iface);
-int sweep_aged_mac_port_entry();
-void broadcast_packet(iface_info_t *iface, const char *packet, int len);
-void handle_packet(iface_info_t *iface, char *packet, int len);
實驗iperf結果: switch:
[ ID] Interval Transfer Bandwidth
[ 13] 0.0-30.2 sec 33.5 MBytes 9.29 Mbits/sec
boardcast:
[ ID] Interval Transfer Bandwidth
[ 13] 0.0-30.3 sec 20.9 MBytes 5.78 Mbits/se
3.NAT_stack NAT地址轉換實驗 completed in 2017/11/20
實現對于內網外網IP_PORT hash表NAT_mapping_entry操作,從而實現數據包轉發(更換IP+PORT,重新計算checksum)
思路:
1.packet方向為DIR_IN
根據packet的tcp協議中des_port,從映射表中查找映射,得到局域網內部主機的IP+PORT,替換des_IP, des_port,重新計算IP\TCP協議的校驗和,轉發packet
2.packet方向是DIR_OUT
根據packet中的src_IP,src_PORT,從映射表中查找映射,如果不存在則加入映射表,得到NAT新分配的assgined_port。替換src_IP為NAT公網IP,src_port為assgined_port,重新計算校驗和,轉發packet
3.根據packet的des_IP == NAT公網IP判斷packet發送方向
4.超時連接的timeout操作,free刪除鏈接
實現函數:
-struct nat_mapping *nat_lookup_external(struct list_head *mapping_list, u16 external_port);
-struct nat_mapping *nat_lookup_internal(struct list_head *mapping_list,u32 internal_ip, u16 internal_port);
-u16 assign_external_port();
-void free_port(u16 port);
-struct nat_mapping *nat_insert_mapping(struct list_head *mapping_list, u32 internal_ip, u16 internal_port);
-static int get_packet_direction(char *packet);
-void nat_update_tcp_connection(char *packet, struct nat_mapping *mapping, int dir);
-struct nat_mapping *nat_get_mapping_from_packet(char *packet, int len, iface_info_t *iface, int dir);
-void do_translation(iface_info_t *iface, char *packet, int len, int dir);
-void *nat_timeout();
實驗結果:
h2啟動simpleHTTPServer ;h1 wget h2_IP
獲取到當前目錄所有文件并寫入到index.html
5.Socket_example 分布式字符統計實驗 completed in 2017/11/26
需求:統計某個文件中的所有字母出現次數,并將工作合理分配到 conf 中出現的若干個IP 代表的 worker 中,并獲取結果展示
測試環境: mininet 搭建 1 個 switch+3 個 host(1 個 master+2 個 worker)
把 master 作為 server 端,worker 作為 client 進行的實驗
-1.Server 多線程處理來自 client 的鏈接請求 避免的 accept 阻塞問題
-2.server 發送 filename + file_start + file_end 到 client. Client 從給定的文件起始位置結束位置加以處理,并將 hash 結果返回到 server
-3.server 端 pthread_join 等待最后一個的線程執行完畢后,再將 static ans 展示
總結
以上是生活随笔為你收集整理的UCAS计算机网络实验的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海归王垠 V.S. 阿里P10赵海平,不
- 下一篇: Windows右键菜单