在URL中,常见的应用层协议还包括ftp和file等,比如:
ftp://www.javathinker.org/image/
file:///C:\atomcat\webapps\javathinker\admin.jsp
以上file协议用于访问本地计算机上的文件,使用这种协议的URL以“file:///”开头。
3.TCP协议以及端口
IP协议在发送数据包时,途中会遇到各种事情,例如可能路由器突然崩溃,使包丢失。再例如一个包可能沿低速链路移动,而另一个包可能沿高速链路移动而超过前面的包,最后使得包的顺序搞乱。
TCP协议使两台主机上的进程顺利通信,不必担心包丢失或包顺序搞乱。TCP跟踪包顺序,并且在包顺序搞乱时按正确顺序重组包。如果包丢失,则TCP会请求源主机重发包。
如图14所示,两台主机上都会运行许多进程。当主机A上的进程A1向主机B上的进程B1发送数据时,IP协议根据主机B的IP地址,把进程A1发送的数据送达主机B。接下来TCP需要决定把数据发送到主机B中的哪个进程。TCP采用端口来区分进程。端口不是物理设备,而是用于标识进程的逻辑地址,更确切地说,是用于标识TCP连接的端点的逻辑地址。当两个进程进行一次通信,就意味着建立了一个TCP连接,TCP连接的两个端点用端口来标识。在图15中,进程A1与进程B1之间建立了一个TCP连接,进程B1的端口为80,因此进程B1的地址为:主机B:80。进程A1的端口为1000,因此进程A1的地址为:主机A :1000。每个进程有了惟一的地址,TCP就能保证把数据顺利送达到特定的进程。

图14 TCP采用端口来区分进程间的通信
端口号的范围为0到65535,其中0到1023的端口号一般固定分配给一些服务。比如21端口分配给FTP服务,25端口分配给SMTP(简单邮件传输)服务,80端口分配给Http(超级文本传输)服务,135端口分配给RPC(远程过程调用)服务等。 从1024到65535的端口号供用户自定义的服务使用。比如假定EchoServer服务使用8000端口。当EchoServer程序运行时,就会占用8000端口,当程序运行结束,就会释放所占用的端口。 客户进程的端口一般由所在主机的操作系统动态分配,当客户进程要求与一个服务器进程进行TCP连接,操作系统为客户进程随机地分配一个还未被占用的端口,当客户进程与服务器进程断开连接,这个端口就被释放。
|