第一篇:網絡原理實驗報告網絡層
蘇州科技學院
電子信息實驗中心
實驗報告
課
程 學
號 姓
名 班
級 專
業 指導教師 學年 / 學期
計算機網絡原理 *** 閆自立 軟件1311 計算機科學與技術
陶滔
2015~2016學年第1學期
實驗三
網絡層實驗
實驗項目性質:設計性
計劃學時:4 實
驗 環 境:Microsoft Visual Studio 2010
實驗日期:2015年12月2日
一、實驗目的
1.理解通信子網的完整概念,掌握網絡層的作用和功能。2.掌握分組數據包格式設計方法、分組的分片與重裝的方法。3.掌握網絡層簡單路由選擇協議的實現方法。
二、實驗內容
在已經實現的數據鏈路層基礎上:
(1)設計簡易實用的分組數據包格式;
(2)設計并實現類IP的網絡層協議,路由選擇采用靜態路選擇協議。(3)設計并實現分組的分片與重裝。
(4)設計一個應用程序,利用網絡層的功能直接將文件傳輸到目標主機的接收窗口中。(5)編寫路由配置route_tab.cfg及本機主機地址local.cfg文件,以便與遠地的其他計算機進行通信。
三、實驗(設計)儀器設備和材料清單
計算機一臺,串行電纜一根。
四、實驗指導
本實驗采用靜態路由選擇算法,每個結點上通過配置文件route_tab.cfg確定路由選擇的結果,該文件的格式可設計如下:
主機地址
端口號
注釋
555
#主機地址555的轉發端口號為COM1
556
558
888
*
#默認路由
其中,端口號指PC的COM1(對應端口號1)或COM2(對應端口號2)等。同時為簡化設計,去掉流量控制和擁塞控制,數據包的格式參考IP數據包格式,但盡可能簡化。分組及其他數據結構設計
網絡層的分組設計一方面要考慮到路由選擇的實現,即分組中應含有路由尋址所必要的信息,另一方面要考慮到分組太大時的分片與重裝,主機地址用4位數字字符表示。設計的分組格式如下。
(1)分組(“數據報”)的首部
typedef struct{ //定義數據報首部格式
unsigned char
vers_hlen;
//高4位是版本, 低4 位是首部長度
unsigned char
type;
//類型(保留)
unsigned short
Dlen;
//數據報數據部分長度
unsigned short ident;
//數據報標識
unsigned short frag;
//分片標識,1-分片,0-不分片 unsigned short offset;
//數據報分片偏移量
unsigned char
TTL;
//生存期
unsigned char
prot[3];
//保留
unsigned short checksum;
//校驗和
IPhost source;
//源主機地址
IPhost dest;
//目標主機地址
} TIPheader;typedef struct { unsigned char cAddr[4];}IPhost;(2)數據報格式
typedef struct { unsigned char cData[MTU];} Msg;typedef struct{
//定義數據報格式
TIPheader
IpHdr;
//分組首部
Msg
Info;
//分組信息部分 } TPacket;(3)分片與重裝的結構
typedef struct fid{
//用于識別同一IP 分組的各分片結構,用于組裝分組
IPhost
source;
//源主機地址
IPhost
dest;
//目標主機地址
unsigned short
ident;
//IP分組標識
long int iLength;
//已接收到的數據長度
unsigned short iCount;//已接收到的分組數 }FragId;typedef struct fragif{
//包含一個分片的結構
unsigned char frgData[MTU];//分片的數據部分
unsigned short iMsgLength;
//當前分片數據部分的長度 unsigned short frag;
//分片標識,1-分片,0-不分片
unsigned short offset;
//分片在數據報中的偏移量
struct fragif *next;
//下一個分片 }FragInfo;(4)路由表結構
typedef struct { //定義路由表
unsigned char cHostAddr[4];//主機地址 char cPort;
//轉發端口
char cComment[30];
//注釋 } TRouteItem;2 分片與重裝
在一個異構的網絡的集合中,提供統一的主機到主機服務模型需要面對的問題之一是每種網絡技術都試圖自己定義分組的大小。例如,以太網能接收的長度最多為1500字節的分組,而FDDI能夠接收的分組長度可達到4500字節。因此網絡層要確保所有的分組足夠小,使得其適合任何網絡技術的分組;或者當分組對某一網絡技術來說太大時,提供一種方法將分組拆分和重組。后一種方法是一種理想的選擇,TCP/IP中的IP數據報傳輸就采用了后一種技術。
這樣每一種網絡類型有一個最大傳輸單元(Maximum Transmission Unit,MTU),這是一幀中所能攜帶的最大數據報,而這個值應比網絡上的最大分組要小。
五、結果分析(可根據需要附加頁)
六、主要源代碼(可根據需要附加頁)#pragma hdrstop #include
#include “..includeNllEntity.h” #include “..includeFtpClass.h” //-------------#pragma package(smart_init)//---------void TNLLNetEntity::readroute(){
#define MAXITEMS 100
// 路由表最大表項數
#define MAXLINE 81
// 路由表文件最大行長度
char fileName[]=“.route_tab.cfg”;
if(fst.fail())return;fst.getline(line,MAXLINE);while(!fst.fail()&&!fst.eof())// 當文件有內容時 {
} iRouteEntries=i;if(iRouteEntries){
routeTab=new TRouteItem[iRouteEntries];for(i=0;i