OSI第四层:传输层功能及作用

时间:2024-04-10 11:31:04

原文:http://www.hcie.me/206
OSI七层模型第四层:传输层,Transport Layer

OSI传输层功能:主要提供端到端的连接方式,传输层主要功能如下:

可靠的传输方式(TCP)
不可靠的传输方式(UDP)
数据包分段
数据段重组
流量控制
数据确认和重传

OSI第四层:传输层功能及作用
OSI传输层的作用

端到端通信

端到端:end-to-end,指的就是数据传输路径中最两端的两台网络设备之间的通信。

端到端的概念不仅仅是一根网线两端的两台电脑,它是逻辑的,可能是跨地域的。

比如:你家在北京,你给你上海的一个朋友传一个文件,这时候你们俩之间需要建立一个连接,可能是通过qq,可能是通过FTP……虽然中间经过了电信、网通等ISP,但是对于通讯的两端来说,北京的你和你上海的朋友之间,这就是一个端到端的连接。

可靠的传输方式

传输层使用TCP来提供通信数据的可靠传输。

TCP:传输控制协议(Transmission Control Protocol)

TCP之所以称为可靠的传输方式,是因为TCP有很多机制能保证可靠,比如TCP提供了三次握手建立连接、确认机制、数据重传、分段重组、滑动窗口流控等机制。

在使用TCP传递数据之前,会双方各自建立一条相互信任的通道,用来传递数据。

以三次握手举例:
三次握手表示数据在传递前,TCP会先通过3个数据包确认通信双方都是正常的。

A、B使用TCP作为传输层传输方式传递数据,流程大致概括如下:

A向B打一个招呼,说:你好,我想跟你建立一个tcp的连接,可以吗?
B接收到A的招呼,如果愿意建立连接,会说:你好,可以的。
A给B发的连接就建立成功了。

B在向A回答的时候,也会同时向A提出建立连接的申请(因为TCP是全双工的,双向的):
B会向A说:你好,我也想跟你建立一个TCP的连接,可以吗?
A除了之前接收到B给自己的确认,还会接收到B发过来的申请,A收到这个申请后,会向B发出一个确认。
这时,B与A的连接也建立成功了。

这个过程叫做“TCP三次握手”,当双方都确认建立这个连接之后,就开始传递数据了。。
这就是可靠的传输方式。

不可靠的传输方式

传输层中不可靠的传输方式使用的是UDP协议

UDP:用户数据报协议(User Datagram Protocol)
如果选择UDP来传递数据,不会向TCP一样先建立一个连接,而是直接传递,不管对方是否存在,也不管对方是否正常。

比如A、B使用UDP传递数据,流程如下:
A直接将数据传递给B,之前不会打任何的招呼。
不管B能否接收到这个数据。

这样的传输方式并不可靠。

数据包分段

这是TCP的功能,当用户发送数据前的3次握手时,会协商出两端之间的MSS大小(Maximum Segement Size,最大报文段长度),然后数据发出去时会根据这个值进行分开。

MSS的作用主要是避免数据在传输过程中遇到链路带宽瓶颈,造成数据二次分段或分片。

比如用户A向用户B三次握手时,协商的MSS是200Byte,这时要发送一个1000Byte的数据,那么TCP会将这个数据分为5个200Byte的数据段,并进行数据范围标记,再一个一个的进行封装再发送给对方。

数据段重组

这个也是TCP的功能,对于接收方收到了上面例子发送过来的5个分段后的数据,就会将这5个数据按照数据范围的标记进行解封然后排序,重组为一个1000Byte的完整数据。

流量控制

TCP也有流量控制机制,主要是依靠TCP数据头部中的Windows Size参数进行调整。

用户的发送方和接收方都有一个缓存数据的buffer,用户发出数据前会将数据缓存到这个TCP buffer中,用户接收数据时也会将数据先缓存到这个TCP Buffer中。

当用户A只向用户B一个用户发送数据,而用户B也只从用户A接收数据,这时两者的TCP Buffer应该是一样大的,那么相同速率发送、接收即可。

如果用户B同时从多个用户接收数据,这时它会通过TCP数据包里的Windows Size参数通知用户A,自己能从用户A这里接收多大的数据包。

这就是TCP的流控手段。

数据确认和重传

TCP中还有一个确认机制,当用户A向用户B发送一个数据段时,会将这份数据在Buffer中备份一个,用户B如果收到了这个数据,就需要向A发送一个确认,告诉A自己收到了这个数据,这时A就会将上一个数据缓存清掉,再发送下一个数据。

如果用户B没有收到这个数据,用户A在等待一个传输超时的时间后没有收到确认,就会将Buffer的数据复制一份再发一次,直到对方发过来确认后用户A才会发送下一个数据。如果用户B一直没有发过来确认,那么用户A重传次数达到程序设置的上限了,可能会断开这个TCP连接。

OSI传输层的PDU为:Segement(数据段)