技术控

95-PING 命令实现

学完了ICMP回显请求与应答报文,就可以用它来实现我们平时使用的PING命令了。先来看看效果:图1自带的ping命令与我们自己实现的1.程序路径本文使用的程序托管在gitos上:http://git.oschina.net/ivan_all...

94-ICMP 协议(回显请求与应答)

当ICMP首部type=8,code=0,该ICMP是回显请求报文。当type=0,code=0时,是回显应答报文。1.回显请求与应答报文1.1首部格式图1ICMP回显请求与应答报文首部当ICMP报文是回显请求与应答报文时,我们可以看到首部...

97-ICMP 协议(端口不可达)

ICMP端口不可达是差错报文中的一种,它的类型(type)是3,代码(code)也是3.1.差错报文首部格式图1差错报文首部2.实验打开我们之前写的ICMP报文接收程序程序托管在gitos上:http://git.oschina.net/i...

96-ICMP 协议(时间戳请求与应答)

ICMP时间戳请求允许系统向另一个系统查询当前的时间。1.ICMP时间戳1.1首部格式图1ICMP时间戳请求与应答报文它的type字段为17(请求)或18(应答),code字段为0.发起时间戳:发送者的发送时间,由发送者填写接收时间戳:接收...

99-IPv4 地址

很久以前我们非常简单的讨论过《IPv4地址》,那时候是出于网络编程基础的需要,介绍了和IP地址相关的函数。这一次,我们来详细的讨论下IP地址的结构。1.IPv4地址分类1981年,标准就制定了一种基本的编址方法。32位的IP地址由{neti...

98-traceroute 程序

traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由,该程序最早由VanJacobson实现。当然我们不可能原汁原味的模仿一遍traceroute程序,在这里,我们只需要把最关键的功能实现出来就算完成任务。1...

101-指向子网的广播

之前说过,子网广播地址格式为{subnetid,-1}。这里用-1表示主机位为全1.我们将用三个实验来观察现象。1.实验一1.1网络拓扑图图1网络拓扑1.2实验步骤在主机PC1上ping广播地址192.168.1.255,并在主机PC1上抓...

103-使用广播的 UDP 回射客户端

讲了好几篇有关广播的理论,是时候实践一下了。这一次,需要将之前写的udp回射服务器和客户端拿过来,稍作修改。你可以直接去unp/program/template这个模板文件夹下面把udp的代码拿过来改。本文使用的程序工具托管在gitos上:...

104-信号引起的竞争错误

1.引言之前我们学习过使用alarm信号这种奇技淫巧来实现带超时的IO函数,一直以来,我们写的这种程序都带有一个隐含的bug.举例来说,我们可能经常会写下面这样的代码:alarm(2);for(;;){addrlen=sizeof(clia...

105-多播(基础)

1.引言多播(或叫组播,Multicast)的出现,正是为了解决广播的不足。我们已经学会用udp发广播数据包,然而,对于不想接收广播数据包的主机来说,这就是一种骚扰。比如某主机接收到以太网帧(目的MAC地址为ff:ff:ff:ff:ff:f...

106-多播地址

1.多播地址多播地址,类似“QQ群号”,它是D类IP地址(224.0.0.0~239.255.255.255)。D类IP地址的首4位总是2进制1110开头,因此,可用的范围就只剩下后28位。这28位称为groupid——多播组ID,完整的3...

109-获取接口信息(一)

1.接口的其他信息上一篇文章简要的介绍了接口的名字和索引号的概念,我们也可以通过一些函数去获取、转换它们。可是,接口除了这些信息外,还有很多其它信息,比如接口上配置的ip地址啊,子网掩码啦,MTU等等。说了这么多,那要怎么才能获取到这些信息...