系统设计
网络拓扑
三个主机,三个路由(两两相通)
每个主机有一个IP地址和一个端口号。
每个路由维护一个路由表,表中存有到达特定网络终端(目标主机)的路径(下一(设备(路由))跳(的地址)),如下图所示。
此系统每个路由的路由表皆为事先设定,上图为路由1的路由表,规定到达目标主机Host3和Host2需要经过路由2,自身与Host1直接相连。
系统原理
分组转发原理
IP数据包也叫IP报文分组,传输在ISO网络7层结构中的网络层,它由IP报文头和IP报文用户数据组成,IP报文头的长度一般在20到60个字节之间,而一个IP分组的最大长度则不能超过65535个字节。 下图为IP分组的报文头格式,报文头的前20个字节是固定的,后面的可变。
可以看到报文头中包含一个32位源IP地址与一个32位目的IP地址,路由器通过取得报文头中的目的IP地址与路由表中存有的目的主机地址进行匹配找出对应的路径(下一跳),然后将数据包转发至找到的下一跳。匹配不成功则将数据报丢弃。
比如主机1(Host1)发出一个分组,与主机1直接相连的路由1收到这个分组,取得分组中的目的主机为Host3,通过路由表知道下一跳为路由2,所以路由1将把分组转发给路由2。同理,路由2收到路由1发来的分组,提取目的主机,再由路由表获得下一跳为路由3,于是将分组转发为路由3,路由3收到分组后直接发给与自身直接相连的主机3。
socket编程
步骤
1.#include <winsock2.h> //socket通信,系统头文件
2.加载套接字库
WSADATA wsaData; //存储被WSAStartup函数调用后返回的Windows sockets数据
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)
{
MessageBox("WSAStartup ERROR!");
}
3.创建套接字
//创建套接字UDP连接,AF_INET表示使用IPV4协议,SOCK_DGRAM是无连接报文类型,默认UDP协议
if ((m_sock = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)
{
Me