一. 通信处理
TCP/IP 的众多应用协议大多以客户端/服务端的形式运行. 客户端类似于客户的意思, 是请求的发起端. 而服务端在计算机网络中则意味着提高服务端程序或者计算机. 是请求的处理端.
在计算机中作为服务端的程序有必要提前启动,准备接收客户端的请求. 否则即使有客户端端请求发过来, 也无法做到相应的处理. 这些服务端程序在UNIX系统当中叫做守护进程.
比如HTTP端服务端程序是httpd(HTTP守护进程),而ssh的服务端程序是sshd(SSH守护进程). 在UNIX中并不需要将这些进程逐个启动,而是启动一个可以代表它们接收客户端请求的inetd(互联网守护进程)服务程序即可. 它是一种超级守护进程. 该超级守护进程收到客户端请求以后会创建(fork)新的进程并转换(exec)为sshd等各个守护进程.
确认一个请求究竟发给的是哪个服务端(守护进程),可以通过所收到数据包的目标端口号轻松识别. 当收到TCP建立连接请求时,如果目标端口为22,则转给sshd, 如果是端口80,则转给httpd. 然后这些守护进程会继续对该连接上的通信传输进行处理.
传输协议TCP,UDP通过接收数据中的目标端口号识别目标处理程序. 传输协议的数据将根据传输端口的不同传递给HTTP,TELNET,FTP等应用层协议.
二. 两种传输层协议TCP和UDP
在TCP/IP中能够实现传输层功能的,具有代表性的协议是TCP和UDP.
1. UDP 介绍
UDP是user datagram protocol的简写,即用户数据报协议. 它为什么叫这个名字呢? 首先我们要知道, UDP是不具有可靠性的数据报传输协议, 并且它是面向无连接的,就是说不管发送过程中数据报丢失,还是数据报发送给对方未接收到,它都不会进行重传, 也就是不能保证数据可靠的传达. 从另一个角度说,它不对用户发送的数据进行处理,而仅仅是作为传输的功能, 也就是说用户想要实现的细节都不会被处理,而直接被发送,保证了用户数据的高还原性. 用户也就是处理程序的程序员, 从这个角度说, 这个协议完全为用户数据传输服务, 所以是用户数据报协议. 并且UDP协议不需要对数据进行处理和等待对方响应,因此传输数据具有高效的特点. 而与之相比由于TCP拥有各式各样的控制机制,所以它在发送数据时未必按照程序猿的编程思路进行.
2. TCP介绍
TCP是Transmission Control Protocol ,即传输控制协议, 从字面意思上理解来说,就是传输过程可控的协议, 相比于UDP,它具有可靠传输数据的特点 . 它是一种面向连接的,可靠的流协议. TCP为提供可靠传输, 实行“顺序控制”或“重发控制”机制. 此外,还具备“流控制(流量控制)”,“拥塞控制”,提高网络利用率等众多功能.
TCP充分实现了数据传输时的各种控制功能, 可以进行丢包时的重发控制,还可以对次序乱掉的分包进行顺序控制. 而这些在UDP中都没有. 此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费. 根据TCP的这些机制,在IP这种无连接的网络上也能够实现高可靠性的通信.
2. TCP和UDP的区分应用
可能有人会认为,鉴于TCP是可靠的传输协议,那么它一定优于TCP,其实不然. TCP和UDP的优缺点无法简单的,绝对的去做比较. 应根据应用的目的按需使用.
由于UDP面向无连接,它可以随时发送数据. 再加上UDP本身的处理既简单又高效,因此经常用于以下几个方面:
- 包总量较少的通信(DNS,SNMP等);
- 视频,音频等多媒体通信(即时通信);
- 限定于LAN等特定网络中的应用通信;
- 广播通信(广播,多播)
不过在不同的应用上,为了既能够使用到UDP的实时高效性,还能苟保证数据的有效性, 在UDP的基础上增加了其他的用于保障数据可靠的协议, 如视频流媒体中使用的RTP协议,还有用于控制的RTCP协议等. (后续的学习笔记进行展开)
(拓展: 套接字(Socket) 应用在使用TCP或者UDP时,会用到操作系统提供的类库. 这种类库一般被称为API. 使用TCP或者UDP通信时,又会广泛使用到套接字的API. 应用程序利用套接字,可以实现
对端端IP地址,端口号,并实现数据的发送与接收.) (关于套接字,后续的学习笔记进行展开)