1) TCP是Transfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作.[这是一种典型的服务端与客户端进行交互的模型]
TCP是一个基于连接的协议,它能够提供两台计算机之间的可靠的数据流。HTTP、FTP、Telnet等应用都需要这种可靠的通信通道。
端口号是什么东西呢?一个机器有固定的IP地址,我们可以通过IP地址来找到对应的机器,但是机器上运行着多个程序,我们不知道要对机器上的哪一个程序进行通信?(比如说同时运行msn和QQ,我们不能把qq的信息发送到msn上去),所以就有端口号来唯一的确定一台机器上的某一个程序。端口是一个数字,在0~65535之间,其中0~1024的端口号一般被系统的应用程序占用了,所以建议使用靠后面的端口号数字,比如5000。
确定好IP地址和对应的端口号之后我们就可以锁定用户的程序了,而不会对不相关的程序有任何关联了。如下图106-3所示:服务器总是有一个线程在监听者某一个端口号,一旦服务端与客户端连接好之后,服务器就会另起一个线程,来保证这条线路数据的传递正常。这种就是通过I/O进行数据的连接,而且也是字节流,因为我们必须通过网络来发送文件,音频,视频数据等,而这些数据都是二进制形式,而不是字符信息。当然如果可以确定是字符串的话,可以进行字符流的传输。
2) UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。
UDP是从一台计算机向另一台计算机发送称为数据报的独立数据包的协议,该协议并不保证数据报是否能正确地到达目的地。它是一个非面向连接的协议。
- 下面我们对这两种协议做简单比较:
使用UDP时,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。对于TCP协议,由于它是一个面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中多了一个连接建立的时间。
使用UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。而TCP没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。
总之,TCP在网络通信上有极强的生命力,例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输。相比之下UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。
既然有了保证可靠传输的TCP协议,为什么还要非可靠传输的UDP协议呢?主要的原因有两个。一是可靠的传输是要付出代价的,对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽,因此TCP传输的效率不如UDP高。二是在许多应用中并不需要保证严格的传输可靠性,比如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。