UCAS计算机网络实验
經(jīng)過兩周辛勤的的工作,把實(shí)驗(yàn)一實(shí)驗(yàn)三完成了,不過其中還是有點(diǎn)不足的,不過主要實(shí)驗(yàn)?zāi)康耐瓿闪?#xff0c;后面還有一些不太要緊的就算了。
后面有空的話 應(yīng)該還會(huì)把實(shí)驗(yàn)五做一下
源碼:https://github.com/cuixuage/NetWorking_MiniNet
Experiment
1.Switch_stack交換機(jī)實(shí)驗(yàn) completed in 2017/11/8
實(shí)現(xiàn)對(duì)數(shù)據(jù)結(jié)構(gòu)mac_port_map的所有操作,以及數(shù)據(jù)包的轉(zhuǎn)發(fā)和廣播操作
思路:
1.對(duì)于收到的packet,根據(jù)其des_mac在FDB表中進(jìn)行查詢,存在對(duì)應(yīng)的interface則轉(zhuǎn)發(fā),否則在局域網(wǎng)內(nèi)廣播此packet
2.對(duì)于收到的packet,如果其src_mac不在FDB表中則認(rèn)為是新加入的主機(jī),將其src_mac與interface物理端口的映射關(guān)系加入FDB
3.key points: 當(dāng)交換機(jī)從某一個(gè)interface收到來自src_mac地址的A主機(jī)的packet時(shí),可以確定: des_mac為A主機(jī)的packet從其對(duì)應(yīng)的inerface轉(zhuǎn)出即可到達(dá)A主機(jī)
實(shí)現(xiàn)函數(shù):
-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);
實(shí)驗(yàn)iperf結(jié)果: 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地址轉(zhuǎn)換實(shí)驗(yàn) completed in 2017/11/20
實(shí)現(xiàn)對(duì)于內(nèi)網(wǎng)外網(wǎng)IP_PORT hash表NAT_mapping_entry操作,從而實(shí)現(xiàn)數(shù)據(jù)包轉(zhuǎn)發(fā)(更換IP+PORT,重新計(jì)算checksum)
思路:
1.packet方向?yàn)镈IR_IN
根據(jù)packet的tcp協(xié)議中des_port,從映射表中查找映射,得到局域網(wǎng)內(nèi)部主機(jī)的IP+PORT,替換des_IP, des_port,重新計(jì)算IP\TCP協(xié)議的校驗(yàn)和,轉(zhuǎn)發(fā)packet
2.packet方向是DIR_OUT
根據(jù)packet中的src_IP,src_PORT,從映射表中查找映射,如果不存在則加入映射表,得到NAT新分配的assgined_port。替換src_IP為NAT公網(wǎng)IP,src_port為assgined_port,重新計(jì)算校驗(yàn)和,轉(zhuǎn)發(fā)packet
3.根據(jù)packet的des_IP == NAT公網(wǎng)IP判斷packet發(fā)送方向
4.超時(shí)連接的timeout操作,free刪除鏈接
實(shí)現(xiàn)函數(shù):
-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();
實(shí)驗(yàn)結(jié)果:
h2啟動(dòng)simpleHTTPServer ;h1 wget h2_IP
獲取到當(dāng)前目錄所有文件并寫入到index.html
5.Socket_example 分布式字符統(tǒng)計(jì)實(shí)驗(yàn) completed in 2017/11/26
需求:統(tǒng)計(jì)某個(gè)文件中的所有字母出現(xiàn)次數(shù),并將工作合理分配到 conf 中出現(xiàn)的若干個(gè)IP 代表的 worker 中,并獲取結(jié)果展示
測(cè)試環(huán)境: mininet 搭建 1 個(gè) switch+3 個(gè) host(1 個(gè) master+2 個(gè) worker)
把 master 作為 server 端,worker 作為 client 進(jìn)行的實(shí)驗(yàn)
-1.Server 多線程處理來自 client 的鏈接請(qǐng)求 避免的 accept 阻塞問題
-2.server 發(fā)送 filename + file_start + file_end 到 client. Client 從給定的文件起始位置結(jié)束位置加以處理,并將 hash 結(jié)果返回到 server
-3.server 端 pthread_join 等待最后一個(gè)的線程執(zhí)行完畢后,再將 static ans 展示
總結(jié)
以上是生活随笔為你收集整理的UCAS计算机网络实验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 海归王垠 V.S. 阿里P10赵海平,不
- 下一篇: 在PRESS.one这片蛮荒沃土上,我们