先来讲一下最近真实经历的一件事:
一般在测试网络是否通畅的时候, 我们往往用 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 的出现, 不仅仅改变了开发和部署的灵活性, 更大的是我们对待新技术, 新思想, 新理念的最快的接受程度和态度, 从而才能更好的为我们所用.
来源: http://www.jianshu.com/p/be276c2445f9