目录
概要
这一章我们主要来聊一聊传输层的功能,以及传输层的相关协议,重点是 TCP 和 UDP各自的特点,TCP 的各种控制机制,比方 流量控制 拥塞管理 窗口提速 连接管理等等。
传输层的作用
传输层的作用
前面我们提到过传输层,主要实现源和目标端进程到进程之间的通信。具体是这样,源端主机上开者很多服务和程序,那么这些程序和服务都发到目标端是不是应该找对应的程序接受和处理呢。 好比我qq 和 微信同时聊目标端一位顾客,微信就应该微信接受,QQ 就应该QQ 接受。这就叫保障进程到进程之间的通信。
所以在传输层 通过连接端口号来识别不同的服务,换句话说在应用层的任何服务都会对应添加一个传输层的端口号 来识别不同的服务。 而传输层为了适应不同传输需求 定义了两个不同的协议来分别负责两种类型的服务。也就是我们说的TCP面向连接可靠的传输服务 和 UDP 非连接接的不可靠的传输服务。
传输层的通信处理
那么网络中具体是如何处理通信的呢,在TCP/IP 的互联网世界李,大部分的应用都是以 客户端/服务器方式存在的,客户端就是客户存在方式,请求发起连接,而服务器端则是提供服务的存在,是要处理客户请求的。那也就是说 服务器端必须有程序提前并且一直开启,以便随时接受客户的请求。
这种服务器端的程序,在UNIX 系统(系统不同可能叫法不同)中叫做守护进程,每种服务的守护进程都不同。 比如 web 服务 叫 httpd ssh 服务叫 sshd。但为了更方便管理,unix 系统中并不需要将这些服务的守护进程都开启, 而是启动一个可以代表它们接受客户请求的总守护,inetd (互联网守护进程),也叫做超级守护进程,
当请求发来是,守护进程可以通过数据包中的端口号来识别应当交给哪个服务程序处理。因为每个端口号对应一个服务且不重复。比方 22 端口 交给 ssh 80 交给 Web 21 交给 ftp
两种传输协议及其区别
传输层最重要的两个协议TCP 和UDP
TCP 传输控制协议 是面向连接的,可靠的流协议。实行顺序控制和重发控制机制。采用TCP 可以保证发送的顺序,接受的完整性。并且具备流控制和拥塞控制 提高网络利用率。
UDP用户数据报协议 不具有可靠的数据传输,很多细微的处理都交给了应用层完成,只保证发送的大小,却不能保证消息一定会到达并接受。
虽然TCP 面向连接有保证的传输,但也是有缺点的 比方连接验证费时,数据传输过程稍有丢失就会重发。而对于一些要求高速传输和实时性较高的通信和广播 就先的力不从心。这是UDP 的优点就显现了出来,UDP 正是去掉了繁杂的验证和保障机制,时效性高,很多组播和广播通信都选择UDP 传输。
端口号
端口号的定义及其识别应用
端口号 (Port Number)好像门牌号,客户端请求可以通过端口号找到对应的服务。对于服务器端,每一个端口对应一个特定的服务 且没有重复。而且我们常见的服务对应的端口是默认不变的。
因此我们反过来可以根据端口号来识别不同的应用。传输层也正是通过端口号来为源端请求数据寻找对应服务程序的。
有时仅仅凭借目标端口还是无法区分服务,比方两个不同的源端主机发送到同一台服务器的web请求,请求的不同页面但端口都是80, 这个时候我们可以通过源端主机端口号来区分。 此外我们还可以根据源IP地址 协议号 等等来区分不同的通信。
所以区分和识别通信其实是可以综合查看源和目标端的IP 地址 端口号 和 协议号来进行的
端口号如何确定
在实际应用中确定端口号有两种方法
标准既定的端口号
这种也叫静态方法,就是每个应用程序都有其指定的端口号,而且不能随意使用任何一个,每个端口对应特定的使用目的或者服务,像 http telnet ssh ftp 等等这些应用都是用固定的端口号,一般不能被别的应用所占用,这些是具有代表性的知名端口号。除此之外,还有一些端口也被正式注册了,但这些是可以用于任何通信用途的。
时序分配法
也叫动态分配法,此时,服务端必须确认监听端口号,而接受服务的客户端不必确认端口号。这种情况下 客户端应用不用自己设置端口,完全交给操作系统进行分配。操作系统可以为每个应用程序分配互不冲突的端口号。
端口号与协议
端口号是由传输层协议处理的,所以即便是TCP 和 UDP 都使用了相同的端口也不会冲突。 应为在网络层通过协议号决定交给TCP 或者UDP 即使端口相同,也是由不同的协议加以处理。
但是那些知名端口 和协议就没关系了,比方 53 端口 无论是TCP还是 UDP都会交给 DNS服务。
下面列出常见的服务和对应的端口号:
TCP 具有代表性的知名端口
端口号 | 服务名 | 内容 |
7 | echo | Echo |
11 | systat | Active Users |
13 | daytime | Daytime |
20 | ftp-data | File |