先说条件,一个路由器 和 两台电脑,连不连外网都可以。
首先是局域网内的静态ip设置:(不设置也可以,但是不是静态的话就会变,对程序不好)
下面是静态ip的设置:
![47ea6de8ad802c39ac1736d3f16a6154.png](https://img-blog.csdnimg.cn/img_convert/47ea6de8ad802c39ac1736d3f16a6154.png)
一台电脑是133,另一台是122,网关都是192.168.1.1 。设置好后用ipconfig查看一下以太网的网卡是否配置成功。我的显示如下:
![80397ad18e0c4f5a3e894c4989a6c31a.png](https://img-blog.csdnimg.cn/img_convert/80397ad18e0c4f5a3e894c4989a6c31a.png)
首先是最简单的ping. 显示如下,非常成功。
![781d3c697efb08c23af491640dbed656.png](https://img-blog.csdnimg.cn/img_convert/781d3c697efb08c23af491640dbed656.png)
然后我把路由器接运营商的网线拔了,显示依然不变,说明局域网内的ping并不需要外网。(其实对计算机网络有些了解的就很容易理解了,ping使用的是icmp报文,这个是和tcp和udp并列的,可以在ip头中的上层协议位中查看icmp
![88d19ce7994172b0197b84ae2b83e7f9.png](https://img-blog.csdnimg.cn/img_convert/88d19ce7994172b0197b84ae2b83e7f9.png)
)
然后使用wireshark抓包:
首先看总体的架构:
![7e380884c9aa9877958dca2aff8aaeb1.png](https://img-blog.csdnimg.cn/img_convert/7e380884c9aa9877958dca2aff8aaeb1.png)
很多时候都是在进行广播ARP读取mac地址。也就是在向局域网内查询。上面4个部分是是查询的icmp报文。
对计算机网络不太理解的同学可以参考:
何柄融:网络层 wireshark IP ICMP ARP分析zhuanlan.zhihu.com进行简单的学习。
ICMP主要就是一个ping请求和ping应答。在ping就是测试是否可达目的地的。
(我对这些东西的理解也不是很深,所以欢迎交流讨论)
然后是局域网内的tcp通信:
这里为了简单,我直接使用的是野火的USR-TCP232网络调试助手。在122这里设置一个tcp服务器,133这边进行连接:
![a2310c39f8589b91e52b9c4e0b23c8aa.png](https://img-blog.csdnimg.cn/img_convert/a2310c39f8589b91e52b9c4e0b23c8aa.png)
然后不知道为啥,客户端这里设置tcp clinet之后就不能连接,然后我就用Java写了个简单的客户端代码如下:
public class HelloWorld {
public static void main(String[] args) throws Exception {
Socket socket=new Socket("192.168.1.133",6000);
InputStream ins=socket.getInputStream();
OutputStream ous=socket.getOutputStream();
ous.write("i am client".getBytes());
byte[] a=new byte[1024];
while(true){
ins.read(a);
String string=new String(a);
System.out.println(string);
}
}
}
然后服务器显示就是上图有个 i am client就表示连接成功了。
这样以来也表示不需要连接外面的网络就可以进行局域网内的tcp通信。(我想着的是或许需要DNS进行域名解析的话就需要外网了,或者保存在hosts文件也行,这里有太多不知道的东西了,也没那么多时间去研究运行商的底层操作。。)
然后我用wireshark进行抓包:
![9e298b918bf28bce70c25f655f010a77.png](https://img-blog.csdnimg.cn/img_convert/9e298b918bf28bce70c25f655f010a77.png)
嗯,这里就简单的三次连接,然后发送数据,然后ack。断开连接那部分没抓。下面是具体tcp数据域部分,也就是程序发送的数据:
![de083b3b5ec62fce41b549f48f7d8b51.png](https://img-blog.csdnimg.cn/img_convert/de083b3b5ec62fce41b549f48f7d8b51.png)
嗯,感觉还是挺简单的。(所幸自己了解的东西不是很少,遇到问题时能想到一些解决办法)
对了,在windows上进行这些操作的时候,记得把防火墙关闭了先,不然容易出错。
如果要回到之前的上网状态的话,得修改静态ip为自动获取IP地址和DNS服务器。
欢迎交流讨论。