实验要求
在本次实验中,我将通过java的网络编程实现在基于p4的mininet上主机的tcp交互,网络拓扑就用最基本的basic.p4对应的那个拓扑
实验内容
Step1:安装一下java
虚拟机里面没装java,我只能先装一下了,版本是java11,因为听说这个版本比较稳定
Step2:使用java网络编程(因为我不会python网络编程)写一个发送端和一个接收端(基于TCP的)
发送端,定了一个端口10086,弄了一个字符缓冲流套了一个字符流里面再套一个字节流,这个字节流我直接用系统in这个字节流对象好了。发886断开连接
public class TCPsender { public static void main(String[] args) throws IOException { int port = 10086; Socket socket = new Socket("10.0.3.3",port); OutputStream outputStream = socket.getOutputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line; while ((line = br.readLine())!=null){ byte[] bytes = line.getBytes(StandardCharsets.UTF_8); outputStream.write(bytes,0,bytes.length); if(line.equals("886")) break; } socket.close(); } }
接收端
public class TCPreceiver { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(10086); Socket socket = ss.accept(); InputStream inputStream = socket.getInputStream(); byte[] bytes = new byte[1024]; while (true){ int len = inputStream.read(bytes); String data = new String(bytes,0,len); System.out.println("收到了一个数据是:"+data); if(data.equals("886")) break; } ss.close(); } }
Step3:开始我的小实验
make run以后我进入了mininet指令行,打开h1和h3两个终端和抓包器,我这里就抓s2-eth1把,因为它是h3的网关。
首先,我先不开服务器,让发送端发一下数据,可以看到被拒绝了
现在开了一下服务器再开发送端,可以明显的看到三次握手
我发送点数据吧
小结
今天只是我的一个小demo,以后可能涉及复杂的网络传输以及包头分析的情形,我就套这个模板