MichaelBlog

double i = Double.MAX_VALUE; while(i == i + 1){ System.out.print ("学无止境");};

导航

计算机网络:传输层

计算机网络:传输层

传输层向应用层提供通信服务,属于通信部分的最高层,同时也是用户功能中的最低层。

传输层的两个主要协议

  1. 用户数据报协议 UDP(User Datagram Protocol)
    UDP 传送的数据单位协议是 UDP 报文或用户数据报。

  2. 传输控制协议 TCP(Transmission Control Protocol)
    TCP 传送的数据单位协议是 TCP 报文段(segment)

用户数据报协议 UDP(User Datagram Protocol)

用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。

UDP 用于:

  1. 对相对少量的数据进行直接的请求/响应通信,消除了对控制错误或数据包流的担忧多播,因为 UDP 可与数据包交换配合使用路由更新协议,如路由信息协议 (RIP)需要快速、顺利地交付信息的实时应用程序

  2. 传输层协议:
    域名系统
    网络时间协议
    网络新闻协议
    动态主机配置协议 (DHCP)、引导协议 (BOOTP)
    实时流协议 (RTSP)、普通文件传输协议 (TFTP)、RIP
    每日报价协议 (QOTD)

  3. 以下应用:
    记录路线
    跟踪路由
    时间戳

  4. 实时数据包接收至关重要的多媒体应用

  5. 使用广播或多播传输数据时

  6. 减轻计算机资源负担

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

面向连接,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。

TCP 连接的端点叫做套接字(socket)或插口。
 套接字 socket = (IP地址: 端口号) 

以下是工作方式:

1. 建立连接

请添加图片描述
TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。

TCP三次握手的过程如下:
客户端发送SYN(SEQ=x)报文给服务器端,进入SYN_SEND状态。
服务器端收到SYN报文,回应一个SYN (SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
客户端收到服务器端的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
三次握手完成,TCP客户端和服务器端成功地建立连接,可以开始传输数据了。

2.连接终止

请添加图片描述

建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。具体过程如下图所示。
(1) 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
(2) 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
注意:FIN的接收也作为一个文件结束符(end-of-file)传递给接收端应用进程,放在已排队等候该应用进程接收的任何其他数据之后,因为,FIN的接收意味着接收端应用进程在相应连接上再无额外数据可接收。
(3) 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
(4) 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。
既然每个方向都需要一个FIN和一个ACK,因此通常需要4个分节。

注意:

  1. “通常”是指,某些情况下,步骤1的FIN随数据一起发送,另外,步骤2和步骤3发送的分节都出自执行被动关闭那一端,有可能被合并成一个分节。
  2. 在步骤2与步骤3之间,从执行被动关闭一端到执行主动关闭一端流动数据是可能的,这称为“半关闭”(half-close)。
  3. 当一个Unix进程无论自愿地(调用exit或从main函数返回)还是非自愿地(收到一个终止本进程的信号)终止时,所有打开的描述符都被关闭,这也导致仍然打开的任何TCP连接上也发出一个FIN。
    无论是客户还是服务器,任何一端都可以执行主动关闭。通常情况是,客户执行主动关闭,但是某些协议,例如,HTTP/1.0却由服务器执行主动关闭。

UDP与TCP协议对比

UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同。TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。与TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据包的丢失,协议本身并不能做出任何检测或提示。因此,通常人们把UDP协议称为不可靠的传输协议。

TCP 是面向连接的传输控制协议,而UDP 提供了无连接的数据报服务;TCP 具有高可靠性,确保传输数据的正确性,不出现丢失或乱序;UDP 在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作;UDP 具有较好的实时性,工作效率较 TCP 协议高;UDP 段结构比 TCP 的段结构简单,因此网络开销也小。TCP 协议可以保证接收端毫无差错地接收到发送端发出的字节流,为应用程序提供可靠的通信服务。对可靠性要求高的通信系统往往使用 TCP 传输数据。

当数据从一个点传输到另一个点时,它被赋予一个标头,该标头告诉设备如何处理它。UDP 标头是一个简单的 8 字节固定标头。另一方面,使用 TCP 时,标头可以从 20 到 60 个字节不等。UDP 端口号的字段长度为 16 位,因此范围从 0 到 65535。标头由一个 16 位源端口、一个 16 位目标端口、一个 16 位长度和一个 16 位校验和组成。这是用于将数据报发送到其目标的信息。发送过程不涉及对源和目标之间的连接进行任何验证。

TCP的不同之处在于,它需要在数据的来源和数据的来源之间握手。这使得 TCP 比 UDP 更可靠。在 TCP 通信过程中,只有在目标和源正式链接后才能发送数据。使用UDP,由于不需要链接,因此可以立即发送数据。

TCP 和 UDP 通信之间的另一个区别是,使用 TCP,在传输开始之前,需要确认数据包的接收顺序。此外,TCP 还提供了数据包按预期到达的确认。如果数据包未到达,TCP 会指示需要再次发送。UDP 不需要任何确认、检查或重新发送。
如果应用程序使用 UDP,则用户将承担出错、数据无法到达其目标或被复制的风险。接受这种权衡的回报是更好的速度。UDP本身不一定是数据丢失的罪魁祸首。标头中的信息足以将数据获取到需要的位置,并且发送数据报的时间顺序应使它们保持顺序。
但是,大多数网络路由器无法进行到达确认或数据包订购。数据包可能会丢失或重复。TCP通过确保数据以正确的顺序到达目的地,在大多数网络路由器中解释了这个"弱点"。

posted on 2022-04-16 09:48  Michael_chemic  阅读(106)  评论(0编辑  收藏  举报