计算机网络----运输层(TCP/UDP协议)

运输层协议概述:

从通信和信息处理的角度看,    运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。注意应用层跟运输层是在非网络的条件下完成的(主机内部)。其中运输层跟网络层是重要的。IP协议在网络层,TCP协议在运输层。


运输层的两个主要协议:

运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。运输层还要对收到的报文进行差错检测。运输层需要有两种不同运输协议,即面向连接的TCP和无连接的UDP

TCP传输的数据单位协议是TCP报文段。UDP传输的数据单位是UDP报文协议或用户数据报。

区别:

运输层向上提供可靠和不可靠的逻辑通信信道。TCP是可靠的,UDP是不可靠的。


为什么呢?

UDP在传送数据之前是不需要先建立连接的。(无连接,无确认,不可靠)对方的运输层在收到UDP报文后,不需要给任何确认。虽然UDP不提供可靠的交付,但是在某些情况下UDP是一种最有效的工作方式。如:我们在优酷看视频的时候,视频是由一帧一帧的图像构成的,一张两张图像的损失是不会影响整体视频。而这种情况下我们需要的是视频的流畅性,所以选择UDP。

TCP则是面向连接的服务。(精度高,速度慢)TCP不提供广播或多播服务。由于TCP要提供可靠的,面向连接的运输服务,因此 不可避免的增加了许多开销。这不仅使协议数据单元的首部增大很多,所以要占用许多处理机的资源。如:QQ聊天记录的传送,文件的传送,必须确保信息传送的无误,采用TCP协议。

以上的运输层都是对下层进行了一个屏蔽,相当于运输层与运输层之间建立了一个虚拟的连接,对于底层是如何实现的并不需要知道。

运输层的端口:

端口就是运输层服务访问点(TSAP)。端口的作用就是让应用层的各种应用都能将其数据通过端口向下交付给运输层,运输层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。

从这个意义上讲,端口是用来标志应用层的进程。在网络层中,IP标识了是从哪个主机来的,一个主机上的应用进程是很多的,我们需要标识出是哪一个应用进程。应用进程的通信起一个名字叫端口。


端口用一个16bit端口号进行标志,端口号只具有本地意义,即端口号只是为了标识本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是没有联系的。

插口:

 TCP使用“连接”(而不仅仅是“端口”)作为最基本的抽象,同时将TCP连接的端点称为插口(socket),或套接字,套接口。插口和端口、IP地址的关系是:(即需要知道信息是从哪里来的,到哪个应用进程)




用户数据报协议(UDP)详解:

UDP只在IP的数据报服务之上增加了很少一点功能,即端口的功能和差错检测的功能。虽然UDP用户数据报只能提供不可靠的交付,但UDP在某些方面有其特殊点。

1.发送数据之前不需要建立连接。

2.UDP使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的连接状态表(这里面有很多参数)。


3.UDP是面向报文的,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。

4.UDP没有拥塞控制。

5.UDP支持一对一,一对多,多对一和更多的交互通信。

6.UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。



传输控制协议(TCP)概述:

TCP最主要的特点:


为了能够实现同时收发的功能,需要分配两块缓存区,一个是发送缓存,一个是接收缓存。

1.TCP是面向连接的运输层协议。

2.每一条TCP只能有两个端点,每一条TCP连接只能是点对点的。

3.TCP提供可靠交付的服务。

4.TCP提供全双工通信。

5.面向字节流。



TCP可靠传输的原理:

1.停止等待协议:每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

2.可靠传输协议:A只要超过一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因为重传前面发送过的分组。这就叫做超时重传。要实现它,就要在每发送完一个分组后设置一个超时计时器。如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器。


注意点:

1.A在发送完一个分组后,必须暂时保留已发送的副本(为发生超时重传时使用)。只有在收到相应的确认后才能清楚暂留的分组副本。

2.分组和确认分组都必须进行编号。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。

3.超时计时器设置的重传时间应当根据在分组传输的平均往返时间更长一些。


3.确认丢失和确认迟到

B所发送的对M1的确认丢失了。A在设定的超时重传时间内没有收到确认,但并无法知道已发送的分组出错、丢失,或者是B发送的确认丢失了。因此A在重传M1.假定B又收到了重传的分组M1,这时要采取两个行动。

第一,丢弃这个重复的分组M1,不向上层交付。第二,向A发送确认。不能认为已经发送过确认就不再发送,因为A之所以重传M1就标识A没有收到M1的确认。 

图中(b)也是一种可能的情况。传输过程中没有出现差错,但B对分组M1的确认迟到了。A会收到重复的确认。对重复的确认的处理很简单:收下后丢弃。B仍然会收到重复的M1,并且同样要丢弃重复的M1,并重传确认分组。

上述的这种可靠传输协议常称为自动重传请求ARQ。意思是重传的请求是自动进行的。接收方不需要请求发送方重传某个错误的分组。 

产生的问题:发送和接受时间短,而等待时间太长,导致信道利用率降低。


解决办法:



比如:发送1234567,如果成功发送,返回7,如果4丢失了,返回3,这样发送端就知道4发送失败,从4开始进行重传。

猜你喜欢

转载自blog.csdn.net/weixin_39003229/article/details/80867221