sin(x)

Page 8 of 10

计算机网络:实现一个可靠的运输协议

这个实验要求我们实现一个可靠的运输层协议(也可以理解为链路层协议,反正算法什么都是类似的)。做实验的第一步当然是阅读实验说明了。实验的源文件是用K&R C写的,看起来很奇怪,但是不必担心,GCC是可以完美编译的(不需要加什么特殊的参数)。按照实验的说明修改好随机数最大值、把文件里 的exit()改成exit(0)就可以开始做正事了。

Continue reading

计算机网络:Traceroute

这个实验就是用ICMP来追踪IP报文经过的网络节点,实在太简单了,需要自己动手的也就是两部分。

创建Socket

# Make a raw socket named mySocket                         
mySocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)

解析ICMP

程序只需要知道Type。

# Fetch the icmp type from the IP packet                     
type,  = struct.unpack('b', recvPacket[20:21])

Continue reading

计算机网络:ICMP Pinger

在这个实验当中,我们需要使用ICMP协议来编写一个标准的ping程序。

实现原理

ping使用的是ICMP协议,ICMP协议内容紧贴在IP协议头之后,是长这个样子的:

ICMP Header Format
_Offsets_ Octet 0 1 2 3
0 0 Type Code Checksum
4 32 ID Sequence

Type:ICMP类型,Echo是8,Echo reply是0;

Code:我们用到的都是0;

Checksum:校检和,类似于UDP的校检和的计算方法,是整个ICMP协议内容的校检和;

ID、Sequence:用来标识。

为了计算出来回时间,程序需要在ICMP的数据部分加上发送时的时间戳(64位浮点)。

Continue reading

计算机网络:实现一个路由算法

依然是来自《计算机网络:自顶向下》的实验,要求在实验中模拟网络层中路由算法的实现。至于一些准备工作嘛,和实现一个可靠的运输层协议实验一样。实验中需要使用相对简单的Distance Vector路由算法。由于一共有四个节点需要编写程序,如果把每一个节点的实现都解释一遍也没必要,所以以0节点为例。

Continue reading

计算机网络:UDP Pinger

这个实验类似于要用UDP包来检测网络是否通畅。

服务端

材料里面给了服务器端的代码:

# UDPPingerServer.py 
# We will need the following module to generate randomized lost packets 
import random 
from socket import *  
# Create a UDP socket  
# Notice the use of SOCK_DGRAM for UDP packets 
serverSocket = socket(AF_INET, SOCK_DGRAM) 
# Assign IP address and port number to socket 
serverSocket.bind(('', 12000))  
while True:     
	# Generate random number in the range of 0 to 10 
	rand = random.randint(0, 10)
	# Receive the client packet along with the address it is coming from  
	message, address = serverSocket.recvfrom(1024)
	# Capitalize the message from the client     
	message = message.upper()
    # If rand is less is than 4, we consider the packet lost and do not respond
	if rand < 4:
		continue
    # Otherwise, the server responds         
	serverSocket.sendto(message, address)

服务器的思路非常简单,就是在12000端口监听UDP包,接收到一个包之后,生成一个0到9的随机数,如果随机数小于4,就不返回(故意丢包),否则按原来的内容返回。

Continue reading

« Older posts Newer posts »

Copyright © 2019 sin(x)

Theme by Anders Noren, host by Coding PagesUp ↑