计算机网络学习(三)— 传输层
一、传输层协议的应用场景
- TCP保证可靠传输,需要分段,并对每个分段编号,具有流量控制功能,需要建立会话。
- UDP传输不编号,一个数据包就能完成数据通信,不建立会话,多播。
1.1 场景分析
在使用微信聊天与传输文件时分别采用什么协议?
在聊天时不需要知道对方是否存在,是面向无连接的通信,因此使用UDP协议进行通信。而在传输文件时,一个数据包并不能传输完成,并且要求文件的正确性与可靠性,因此,传输文件采用的是TCP协议。
二、传输层与应用层的关系
应用层协议其实就是传输层协议TCP或UDP加上相应的端口号,例如以下常用的应用层协议与其对应的传输层协议加端口。
应用层协议 | 传输层协议 + 端口 |
---|---|
http | TCP + 80 |
HTTPS | TCP + 443 |
FTP | TCP + 21 |
SMTP | TCP + 25 |
POP3 | TCP + 110 |
RDP | TCP + 3389 |
DNS | UDP/TCP + 53 |
应用层协议与服务的关系就是:服务运行后在TCP或UDP的某个端口来侦听客户端的请求。
2.1 三类端口
- 众所周知的端口:数值一般为0~1023
- 登记端口号:1024~49151(魔数常量)
- 客户端口号:49152~65535
在使用客户端访问服务端的指定端口时,服务端的端口号是指定的,而客户端的端口号是随机的
,例如可以用客户端的任意端口去连接服务端的web服务80端口。
三、UDP协议
UDP在传输数据之前不需要先建立连接,对方的运输层在收到UDP报文后不需要给出任何确认,虽然UDP不提供可靠交付,但在某些情况下是一种最有效的工作方式。
3.1 UDP的特点
- 面向无连接的,即发送数据前不需要建立连接
- 不保证可靠交付,同时也不具有拥塞控制
- 面向报文的,适合多媒体通信需求
- 支持一对一、一对多、多对一、多对多的交互通信
- 首部开销小,只需8个字节,有四个字段,每个字段两字节:
- 源端口
- 目的端口
- 长度:UDP数据包长度
- 检验和:检测UDP用户数据报在传输中是否有错。有错就丢弃。
四、TCP(传输控制协议)协议
TCP则提供面向连接的服务,TCP不提供广播或多播服务,由于TCP要提供可靠的、面向连接的运输服务,因此不可避免的增加了许多开销。
4.1 TCP特点
- 面向连接的传输层协议
- 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的(一对一)
- 提供可靠交付的服务:通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。
- 提供全双工通信
- 面向字节流
TCP把连接
作为最基本的抽象,每一条TCP连接有两个端点,TCP连接的端点叫做套接字(socket),一个socket其实就是一个IP+端口号(IP:端口号)。每一条TCP连接唯一地被通信两端的两个端点(即两个套接字或叫套接字组)所确定。
4.2 TCP如何实现可靠传输
TCP发送的报文段是交给IP层传送的,但IP层只能提供尽最大努力服务,也就是说,TCP下面的网络所提供的是不可靠的传输。TCP利用停止等待协议
保证可靠传输。“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
4.2.1 停止等待与超时重传
在没有出现差错的情况
下,发送端A发送完一组数据就停止发送,等待接收端B发送一个确认信号,A在收到B的确认信号之后继续发送下一组数据,之后等待确认,一次循环此操作。
接收端B接收到了有差错的数据包,或者某一个数据包在传输过程中丢失了,这就是有差错的情况
,在此情况下接收方B将此数据包丢弃,或什么也不做,不会发送任何信息。为了保证可靠传输,发送方A采用超时重传机制
(A只要超过了一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面发送过的分组)。
要实现超时重传,就要在每发送完一个分组时设置一个超时计时器
。如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器。
- A在发送完一个分组后,必须暂时保留已发送的分组的副本,只有在收到相应的确认后才能清除暂时保留的分组副本。
- 分组和确认分组都必须进行编号,这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。
- 超时计时器设置的重传时间应当比数据在分组传输的平均往返时间(RTT)更长一些。
运输层的超时计时器的超时重传时间究竟应设置为多大呢?TCP采用了一种自适应算法,它记录一个报文段发出的时间,以及收到相应的确认的时间。这两个时间之差就是报文段的往返时间RTT 。TCP保留了RTT的一个加权平均往返时间 R T T S RTT_S RTTS。
新 的 R T T s = ( 1 − α ) × (