网络基础知识
网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯网络编程中有两个主要的问题一个是如何准确的定位网络上一台或多台主机另一个就是找到主机后如何可靠高效的进行数据传输在TCP/IP协议中IP层主要负责网络主机的定位数据传输的路由由IP地址可以唯一地确定Internet上的一台主机而TCP层则提供面向应用的可靠的或非可靠的数据传输机制这是网络编程的主要对象一般不需要关心IP层是如何处理数据的
目前较为流行的网络编程模型是客户机/服务器(C/S)结构即通信双方一方作为服务器等待客户提出请求并予以响应客户则在需要服务时向服务器提出申请服务器一般作为守护进程始终运行监听网络端口一旦有客户请求就会启动一个服务进程来响应该客户同时自己继续监听服务端口使后来的客户也能及时得到服务
两类传输协议TCPUDP
尽管TCP/IP协议的名称中只有TCP这个协议名但是在TCP/IP的传输层同时存在TCP和UDP两个协议
TCP是Tranfer Control Protocol的简称是一种面向连接的保证可靠传输的协议通过TCP协议传输得到的是一个顺序的无差错的数据流发送方和接收方的成对的两个socket之间必须建立连接以便在TCP协议的基础上进行通信当一个socket(通常都是server socket)等待建立连接时另一个socket可以要求进行连接一旦这两个socket连接起来它们就可以进行双向数据传输双方都可以进行发送或接收操作
UDP是User Datagram Protocol的简称是一种无连接的协议每个数据报都是一个独立的信息包括完整的源地址或目的地址它在网络上以任何可能的路径传往目的地因此能否到达目的地到达目的地的时间以及内容的正确性都是不能被保证的
下面我们对这两种协议做简单比较
使用UDP时每个数据报中都给出了完整的地址信息因此无需要建立发送方和接收方的连接对于TCP协议由于它是一个面向连接的协议在socket之间进行数据传输之前必然要建立连接所以在TCP中多了一个连接建立的时间
使用UDP传输数据时是有大小限制的每个被传输的数据报必须限定在KB之内而TCP没有这方面的限制一旦连接建立起来双方的socket就可以按统一的格式传输大量的数据UDP是一个不可靠的协议发送方所发送的数据报并不一定以相同的次序到达接收方而TCP是一个可靠的协议它确保接收方完全正确地获取发送方所发送的全部数据
总之TCP在网络通信上有极强的生命力例如远程连接(Telnet)和文件传输(FTP)都需要不定长度的数据被可靠地传输相比之下UDP操作简单而且仅需要较少的监护因此通常用于局域网高可靠性的分散系统中client/server应用程序
读者可能要问既然有了保证可靠传输的TCP协议为什么还要非可靠传输的UDP协议呢?主要的原因有两个一是可靠的传输是要付出代价的对数据内容正确性的检验必然占用计算机的处理时间和网络的带宽因此TCP传输的效率不如UDP高二是在许多应用中并不需要保证严格的传输可靠性比如视频会议系统并不要求音频视频数据绝对的正确只要保证连贯性就可以了这种情况下显然使用UDP会更合理一些