先来讲一下最近真实经历的一件事:
一般在测试网络是否通畅的时候,我们往往用ping这个命令,但它不能测试有端口防火墙限制。
于是,我们一般自己手写socket,一个server端,一个client端,什么语言都可以,c/c++/java/python/go等等,其中c最麻烦,高级语言直接用类库,但也得个10行左右的代码。
那么,有没有更简单的方法呢?
有!一行代码(命令)即可,如下:
python -m SimpleHttpServer 8080
我们知道,随着python的流行,目前很多系统都自带了python,尤其是Linux的各种发行版,基础模块,不用额外安装什么。
服务端有了,那客户端呢?
curl闪亮登场,如下:
curl http://server_ip:8080/
我们知道,http是应用层协议,基于tcp传输协议,而且在socket的四元组中,有三个元素是确定的,只有客户端的端口是随机的(限定在一个范围中,Linux下可修改,大概文件名是/proc/sys/network/ip_port_range,凭记忆手写,可能有误差,网上很容易搜到)。
这样,就能很好的测试网络出入端口是否被限制了(安全性比较高的环境,有两个防火墙,一个出流量的,一个入流量的),如果出的放开了(出流量对于我们来说都是已知的,即server端的ip和端口),但入的没有放开(入流量,client端只有ip是确定的,端口是随机的),则TCP三次握手不成功,会导致第一次握手client向server发送SYN报文,而server沿着原路向client发送SYN的ARK报文时,由于随机端口被防火墙限制了,导致握手失败。
技术方面,还介绍的基本介绍完了。
我还想多说一句,从事技术工作的,技术革新很快,我们也要随时升级自己的知识体系,软件工程本身就是编码、工具和过程管理组成的,工欲善其事必先利其器,能提高我们工作的效率,何乐而不为呢?!
上面是一个例子,再举一个例子。
Linux中有ifconfig、route这样的命令,最近使用的很多是ip addr xxx、ip route xxx、ip link xxx,为什么有这个变化呢?昨天在网上一搜,原来Linux上对于网卡和路由的配置由ifconfig和route逐渐演变成了ip addr和ip route,后者显示信息更简洁,更易于阅读和理解。
TonyBai前辈在第一次研究Docker时,开篇就讲了,Docker的出现,不仅仅改变了开发和部署的灵活性,更大的是我们对待新技术、新思想、新理念的最快的接受程度和态度,从而才能更好的为我们所用。