在我们日常使用的各种各样的软件,都涉及到一项很关键的技术——网络通信技术。今天我们就从软件开发者的角度来探究一下J网络通信技术。
一、网络通信技术
当我们用在点击下QQ对话框的“发送”按键时,相应的好友就会在另一台电脑上收到我们所发送的信息。大致过程如下
首先我们要明白通信是程序与程序之间的交互而不仅仅只是主机与主机之间的交互。每一台主机都有自己的ip地址。这个IP地址可以在网络中标识每一台主机。当主机1上面的QQ程序1要和主机2上面的QQ程序2通信时,它首先要根据主机2的ip地址找到主机2。但是只有ip地址是不够的,因为你还要找到QQ程序2的地址,与这个地址相对应的就是端口号。每一台电脑都有0~65535端口号,其中每一个端口可供一个程序通信用。所以在这里QQ程序1还要去找到QQ程序2在主机2上所对应的端口号。
注意点:0~1024端口尽量不要用,这些端口属于知名端口号。一般已经默认指定给一些特定的程序使用了。
二、查看服务器端口是否开发
使用telnet命令来查看端口,如果连接得上,说明端口是开放的。而ping指令只能证明网络是否通达,即数据是否可以传送到指定 的主机,并不能证明主机上是否开放某个端口。就像如果一个快递员要把一封信送到小林家,他首先需要用ping指令来测试一下从快递站到小林家的路是不是通的。但是即使是通的也不能保证快递员能把包裹送进小林家,因为我们不知道小林家的门或窗能不能进。最好的测试方法就是亲自走一趟,送一个包裹到小林家。如果能从门送进去,说明小林家门这个端口是开放的。如果能从窗送进去则说明窗这个端口是开放的。下面我们就来测试一下,查看某个网站的端口是不是开放的。
指令一:ping 网站地址
我们发现数据没有丢失,说明路是通的。接下来我们来测试它开放了哪些端口。首先我们来测试80端口,因为所有的网页基本都会开放80端口。用telnet来尝试连接上这个端口,进行数据的发送。
这里的183.232.231.173就是www.baidu.com这个网站服务器的ip地址
指令二:telnel 183.232.231.173 80
进入这个界面之后说明我们已经连接上www.baidu.com这个网站的80端口了。我们在这个端口随便输入一些字符,发现页面会出现如下的报错信息:
报错信息显示这是个错误请求。这是因为服务器上的web服务与客户端通信使用的是http协议,而我们随便发的字符,服务器是不能理解,所以就报出了错误请求的信息,然后断开了与客户端的连接。
三、查看本机的端口开放和通信情况
指令一: netstat -an
可以使用netstat -an来查看我们的机器在和哪些端口通信。
补充一下netstat选项的信息:
netstat [选项]
-a或--all:显示所有连线中的Socket;
-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
-c或--continuous:持续列出网络状态;
-C或--cache:显示路由器配置的快取信息;
-e或--extend:显示网络其他相关信息;
-F或--fib:显示FIB;
-g或--groups:显示多重广播功能群组组员名单;
-h或--help:在线帮助;
-i或--interfaces:显示网络界面信息表单;
-l或--listening:显示监控中的服务器的Socket;
-M或--masquerade:显示伪装的网络连线;
-n或--numeric:直接使用ip地址,而不通过域名服务器;
-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
-o或--timers:显示计时器;
-p或--programs:显示正在使用Socket的程序识别码和程序名称;
-r或--route:显示Routing Table;
-s或--statistice:显示网络工作信息统计表;
-t或--tcp:显示TCP传输协议的连线状况;
-u或--udp:显示UDP传输协议的连线状况;
-v或--verbose:显示指令执行过程;
-V或--version:显示版本信息;
-w或--raw:显示RAW传输协议的连线状况;
-x或--unix:此参数的效果和指定"-A unix"参数相同;
--ip或--inet:此参数的效果和指定"-A inet"参数相同。
这个信息说明本地端口135是开放的,但是目前没有和外部端口通信。
这个则说明本地端口49365是开放的,并且正在和外部端口49366进行通信。
还有很多信息这里就不补充了。