虚拟路由器项目

1、同一网段能ping通的原因

同一网段能够 ping 通的原因是因为它们处于相同的局域网(LAN)中,共享相同的子网掩码。当两个设备位于同一个局域网时,它们具有相同的网络前缀,可以直接通过 ARP(地址解析协议)找到对方的 MAC 地址,从而建立通信连接。

现在我来解释一下这个过程:

  1. IP 地址和子网掩码:每个设备在网络中都有唯一的 IP 地址,用于标识其在网络中的位置。而子网掩码用来划分 IP 地址中的网络部分和主机部分。

  2. ARP 解析:当一个设备想要与同一网段上的另一个设备进行通信时,它首先会检查目标设备的 IP 地址是否在同一子网内。如果是,那么它会通过 ARP 协议广播请求,询问目标设备的 MAC 地址。

  3. MAC 地址通信:目标设备收到 ARP 请求后,会回复自己的 MAC 地址给发送设备。这样,发送设备就知道了目标设备的 MAC 地址,并可以使用 MAC 地址进行通信。

  4. ICMP 通信:PING 实际上是利用 ICMP(Internet 控制报文协议)进行通信的。当设备获得了目标设备的 MAC 地址后,就可以发送 ICMP Echo Request(Ping 请求)给目标设备,并等待目标设备回复 ICMP Echo Reply(Ping 回复),从而判断通信是否成功。

因此,当两台设备在同一网段中,它们能够使用 ARP 协议获取对方的 MAC 地址,并通过 ICMP 进行通信,实现互相 ping 通。

2、ICMP协议的功能


ICMP(Internet Control Message Protocol)协议是 Internet 协议族中的一个子协议,其主要功能是在 IP 数据报网络上提供差错处理和控制信息。它包含了常见的网络控制消息,例如发送者与接收者不一致、请求超时、目标不可达等。

ICMP 协议的主要功能包括以下三个方面:

错误报文传递:
ICMP 可以帮助诊断计算机或端口在通信过程中出现的错误,并向发送方发送错误信息。如果一个主机试图将数据发往另一个无法到达的主机,则 “目标不可达” 错误消息会被发送回发送主机,告知其数据进入了无限循环或尝试将数据传送至错误的地址。

活动性测试:
通过 ICMP,可以对目标主机进行连通性测试,即通过 Ping 命令检查连接情况。Ping 是基于 ICMP 传输数据的,主机A 发送 ICMP ECHO_REQUEST 报文包含时间戳至 主机B 服务器上,主机B 接收到后返回 ICMP ECHO_REPLY 报文,这样主机 A 就能得知两台主机之间的延迟时间和传输速率等信息。

提供QoS服务:
了解网络的数据传输情况和网络拓扑结构是有益的,ICMP 经常用于路由器或交换机之间的通信,以确定应该遵循哪些路径的数据包的路线选择。

综上所述,ICMP 协议是 Internet 协议族中的一个子协议,为网络通信提供了差错处理和控制信息等功能,可用于错误报文传递、活动性测试以及提供QoS服务。


3、ARP协议的工作过程?


ARP(Address Resolution Protocol)是用于将 IP 地址映射到 MAC 地址的网络协议,它实现了将一种地址转换为另一种地址的功能,是局域网通信中必不可少的组成部分。其工作过程如下:

主机 A 需要向局域网中另一个主机 B 发送数据,但只知道目标主机的 IP 地址。
主机 A 先检查自己的 ARP 缓存表中是否有目标主机的 IP 对应的 MAC 地址,如果有,则直接发起通信请求。
如果 ARP 缓存表中没有所需信息,则主机 A 向它所在的子网内发送一个 ARP 请求广播包(Broadcast),其中包含目标IP地址和源MAC地址等信息。
局域网上的所有主机都会接收到 ARP 请求并接受目标IP地址,但只有目标主机(B)会解析该请求并将自己的 MAC 地址回复给主机 A。(非目标主机收到ARP包不会回应)
主机 A 接收到目标主机的 ARP 回复消息后,将该回复包中的 MAC 地址记录在自己的 ARP 缓存表中,并利用该地址生成传输数据的帧头开始进行数据传输。

4、说下ping的原理


Ping(Packet Internet Groper)是一种常用的网络命令,在网络故障排查和网络性能测试等方面具有重要作用。其原理是基于 Internet 控制消息协议 ICMP,通过发送探测包并接收回复报文,来测试互联网IP网络之间是否连通与可达情况。

下面具体说明 Ping 的工作原理:

向目标主机发送 ICMP 请求报文:当我们在本地主机上执行 ping 命令时,系统将发送一个 ICMP 报文给目标主机,通过设置报文头部,包括类型码(查询请求或者差错信息等)、校验和、标识、序列号等参数。

目标主机响应 ICMP 回应报文:如果目标主机可以对该报文进行响应,则它会返回一个 ICMP “响应”报文。响应报文的格式和 ICMP 请求报文相同,但类型码被设置为“响应”。

计算网络延迟时间(RTT):客户端接收到目标主机响应报文后,计算往返时间 RTT(Round-Trip Time),即从发出ICMP请求报文到接收到目标主机的 ICMP 响应报文所需要的时间,并且统计节点的丢包率,并将结果显示给用户。
 

5、什么是网关,网关的作用?

网关(Gateway)是在不同网络之间进行连接和转发数据的网络设备或服务。它可以是一台计算机、路由器或其他网络设备。网关的作用如下:

  1. 连接不同网络:网关可以连接不同的网络,例如将局域网与互联网连接起来,或者连接多个局域网等。它通过转发数据包来实现不同网络之间的通信。

  2. 数据转发:网关负责接收来自一个网络的数据包,并根据目标地址的信息将其转发到另一个网络中。它根据数据包的目标 IP 地址进行路由选择,决定数据包应该被发送到哪个网络。

  3. 网络地址转换(NAT):网关还可以执行网络地址转换,将私有 IP 地址转换为公共 IP 地址,从而允许位于私有网络内的设备访问互联网。这种方式被广泛用于家庭或企业网络中。

  4. 安全保护:作为网络的入口和出口,网关可以实施防火墙、安全策略、访问控制等安全机制,来保护局域网内部的设备免受未经授权的访问和网络攻击。

  5. 代理服务:网关还可以提供代理服务,例如代理服务器、反向代理等,以缓存和转发客户端请求,提高网络性能和安全性。

总的来说,网关在不同网络之间起到桥梁的作用,实现数据的转发、连接不同网络、网络地址转换和安全保护等功能,使得各个网络可以相互通信和访问。

5、为什么arp广播只有目的ip才会回应

ARP(地址解析协议)广播只有目的IP才会回应,原因如下:

1. ARP广播是为了解析目标IP对应的MAC地址。当设备需要发送数据到某个目标IP时,首先需要查找目标IP对应的MAC地址。发送ARP广播可以让网络中的设备知道自己的MAC地址,并将其响应给发出广播请求的设备。

2. ARP广播是通过发送一个以广播地址(全1的MAC地址)为目标MAC地址的ARP请求来实现的。因为广播地址是所有设备都能接收到的地址,所以可以确保广播请求能够被所有设备收到。

3. 目标IP对应的设备在收到ARP广播请求后,会检查自己的IP地址是否与广播请求中的目标IP匹配。如果匹配成功,表示这个设备就是目标设备,会回应一个包含自己MAC地址的ARP响应。而如果IP地址不匹配,设备会忽略这个广播请求。

6、网络编程知识点

发送方:

1、将32位主机字节序数据转换成网络字节序数据(IP)   htonl函数

2、将16位主机字节序数据转换成网络字节序数据(端口) htons函数

接收方:

1、将32位网络字节序数据转换成主机字节序数据(IP)ntohl函数

2、将16位网络字节序数据转换成主机字节序数据(IP)ntohs

1、将点分十进制数串转换成32位无符号整数

inet_pton函数(发送方)

2、将32位无符号整数转换成点分十进制数串

inet_ntop函数(接收方)

1、发送数据—sendto函数

2、接收数据—recvfrom 函数(阻塞)

3、怎么让我用recvfrom函数,实现不阻塞

  1. 设置套接字为非阻塞模式:在调用recvfrom函数之前,将套接字设置为非阻塞模式。可以使用fcntl函数或ioctl函数来实现。例如:

    int flags = fcntl(sockfd, F_GETFL, 0); // 获取套接字当前标志 flags |= O_NONBLOCK; // 设置非阻塞标志 fcntl(sockfd, F_SETFL, flags); // 更新套接字标志
  2. 使用循环接收数据:在调用recvfrom函数时,使用一个循环来反复尝试接收数据。如果没有数据可接收,recvfrom函数返回时会设置错误码为EAGAINEWOULDBLOCK,表示暂时无数据可用。可以在循环中重试,直到成功接收到数据或遇到其他错误。

4、IPv4套接字地址结构

struct in_addr
{
 in_addr_t s_addr;//4字节 IP地址
};
struct sockaddr_in
{
 sa_family_t sin_family;//2字节:协议
 in_port_t sin_port;//2字节:端口
 struct in_addr sin_addr;//4字节
 char sin_zero[8]//8字节
};

5、将本地协议地址与sockfd绑定   bind函数

6、TCP客户端的创建

1、创建TCP套接字

2、定义服务器的地址结构

3、connect连接服务器(触发三次握手)

4、send发送数据

5、recv接收数据

7、TCP服务器的创建

1、创建TCP套接字

2、监听客户端的请求  ret=listen(sfd,5);

3、定义客户端的地址信息

4、提取客户端信息  int cfd=accept(sfd,(struct sockaddr*)&cliAddr,&cliLen);

5、收数据  int len=recv(cfd,buf,sizeof(buf),0);//带阻塞

6、关闭套接字

8、ioctl函数获取网络接口地址

9、1,ping 127.0.0.1是环回地址,如果不能ping通说明当前机器的TCP/IP协议栈有问题,127本身是一个虚接口,任何时候都是直接上交到内核中处理的。(如果开启了wifi共享,可能会ping不通)

2,ping 192.168.1.X 本机的以太网地址,则是测试本机的网络适配器(就是网卡啦),一般是以太网驱动程序。
ping这两个地址时你会发现,但使用wireshark抓包时,是没有ICMP的回显请求发出的,这说明这两个ping程序是不会发送到网络中的(只在局域网中)。

3,ping 同一网段中的网络地址,不通则说明网络线路出现了故障,如果网络中还存在路由器,则应该先ping路由器在本网络的地址,不通则是本机和路由器之间的线路有问题
通了,则再ping路由器所在目标计算机网络所在网段的端口IP地址,不通则说明了路由器出现了故障,通了就再ping目标主机的IP地址。

4,如果ping www.baidu.com等网络地址ping不通时,则说明本机的DNS服务器设置错误。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值