得用QQ作为网络通信技术的代言人,它对我们都是再熟悉不过的即时通信工具。
在QQ消息框中输入一段文字按下发送键后,这段文字就会出现在另一台电脑上你朋友的QQ中——我们就这里开始,分析这个过程这是如何实现的。如图1.1所示:
图1.1 网络信息发送与接收
开始之前,你至少应该知道,每台机器都有一个IP地址,以便另外一台机器可以在网络上找到它,IP地址在网络中标识了一台机器。但是,当A机器与B机器通信时,其实是这两台机器上的程序在通信。A机器上的QQ_A如想与B机器的上QQ_B通信时,它还必须知道这个QQ_B在B机器的哪个“端口”上等待;就像你到别人家做客,只知道在第几幢是不行的,还得知道是几号——在计算机中,用“端口号”这个数字标识机器上需要通信的某一个程序。
每一台机器都有从0~65535个端口号,其中的每一个数字,可供一个程序通信用。通常情况下0~~1024的端口要尽量避免使用——我们称它为“知名端口”。例如打开网页时,连接的是服务器上的80端口,因为它是默认的,所以在浏览器地址栏不需要输入这个端口号。
要测试服务器上是否开放了某个端口,首先通过ping netjava.cn这个主机查看网络是否通畅。注意,ping命令使用ICMP报文工作在TCP层,ping只能证明网络是否通畅,即数据可否传送到指定主机,并不能证明主机上是否开放某个端口。如图1.2所示。
图1.2 用ping命令测试服务器
执行ping命令行,如果网络通畅,就可以使用telnet命令连接对方的端口,如果能连
接上,则证明对方的端口是打开的,如图1.3所示。
图1.3 执行telnet命令
我们所测试的主机提供的是netjava.cn网站服务,那么它开放的肯定是默认的80端口。请在命令行输入“telnet 服务器ip地址 端口号”,回车后,你如果看到一个全黑的命令行窗口,如图1.4所示。
则证明你的机器已经连接上服务器的80端口,在这个黑窗口中随便输入几个字符,你会看到如图1.5示的结果。
这是因为服务器上的WEB服务与客户端通信使用的是HTTP协议,而我们随便发送的消息,服务器不能解析的,所以返回了错误说明,然后断开了与客户端的连接。
事实上,我们的电脑里的程序无刻不在默默地与外界通信着,当然,也包含你机器上的木马和病毒程序。你现在肯定想知道自己的机器正在与哪些网络服务通信?这很简单:你可以在命令行输入netstat命令查看,常用的是输入netstat –an回车后,返回结果如图1.6所示。
图1.6 使用netstat命令查看本机连接情况
这个命令会打印出你的电脑与其他服务器建立的TCP连接或UDP连接信息。输出的数据分为4列,第1列说明连结协议是TCP还是UDP;第2列说明连接所使用的本地地址,由一个IP和端口组成;第3列说明目标机器的地址,也是由一个IP和端口组成,其中的0.0.0.0和127.0.0.1指的是本地地址;最后列,是连接状态的说明,由于只有TCP协议是面向连接的,所以Proto为TCP的才有State说明。当State为LISTENING时,表示本地打开了端口,如图1.7所示。
图1.7表示本地电脑打开了3306端口,但没有任何机器与这个端口相连。
图1.8表示我们本地电脑上的1037端口与IP地址为219.133.48.109的机器上的80端口建立了连接——这是刚才执行telnet命令的结果。
图1.8 netstat命令显示的一个已建立的网络连接
除了LISTENING表示端口已打开和ESTABLISHED表示连接已建立之外,其他状态如TIME_WAIT代表一种未知状态,如图1.9所示,一般指的是已断开的连接。netstat命令是网络程序员常用的工具,可以方便的查看出机器之间的连接信息。
图1.9 一个已断开状态的连接
不好意思,“hello”是如何被发送到另外一台机器上的,在下一节介绍,并且让你实现!
PS:1.JE贴图太头痛了
2.新手得深读《TCP/IP协议详解》,就知这些内容多浅薄了:(