传输层——tcp和udp的区别

传输层:是负责端与端之间的数据传输(即负责主机中两个进程之间的通信,数据传输的单位是报文段)。传输层著名的两个协议就是udp和tcp,接下来我们就了解一下tcp和udp的区别。

UDP

1.udp:全称是用户数据报协议

2.udp端协议格式:16位源端口--16位目的端口--16位udp数据报长度--16位udp校验和(如果校验和失败,直接丢掉数据)

udp能够传输的最大数据长度不超过64k(65535),如果超过64k我们需要在应用层手动分包,多次发送,并在接收端手动拼装。因为udp没有一个机制来保证报序

3.udp的特点:无连接的不可靠的,面向数据报的传输。

  • 无连接:知道对端的ip地址和端口号就可以直接传输,不需要建立连接。
  • 不可靠:没有确认机制也没有重传机制,如果有错误信息,udp协议层不会向应用层返回任何错误信息。
  • 面向数据报:客户端发送多少对端一次性就接收多少,不能灵活的控制读写数据的次数和数量。优点是数据有明显的 间隔。

4.udp的缓冲区:每个socket都有一个发送缓冲区和接收缓冲区。udp没有真正意义上的发送缓冲区,通过sendto发送给内核,内核再传给网络层进行数据传输;udp有接收缓冲区,但不能够保证udp的报序,如果缓冲区满了就直接丢弃数据包。

5.udp有一个下层实现的广播机制(主机地址全为1,即255)

6.基于udp的应用层协议:

         NFS: 网络文件系统

        TFTP: 简单文件传输协议

         DHCP: 动态主机配置协议

        BOOTP: 启动协议(用于无盘设备启动)

        DNS: 域名解析协议

TCP

1.tcp的全称:是传输控制协议。

2.tcp段的协议格式:16位源端口-号-16位目的端口号--32位序号--32位确认编号--4位首部长度--6位保留为--6位标志位

                                  --16位窗口大小---16位校验和---16位紧急指针

32位序号:对每一个字节数据编序,按序到达

4位首部长度:tcp的报头长度,表示tcp有多少个32位比特位(最大长度为4字节*15=60字节)

3.tcp的特点:

  • 有连接:在与对端连接时,必须发起连接请求,连接成功后才能建立通信。
  • 可靠传输:有确认机制和重传机制,如果有错误信息,tcp协议层会向应用层返回错误信息
  • 面向字节流:传输灵活,比如发送100字节的数据,可以一次发送10个字节,重复10次;也可以一次发送100字节。

TCP是如何保证可靠传输呢??

有以下几个机制才保证了tcp的可靠传输:

  • 连接管理机制:tcp通过三次握手建立连接,四次挥手断开连接。
  • 确认应答(ACK)机制:tcp将每个字节数据进行编序,发送对端之后,ACK有个确认应答机制,就是发送着发送之后,ACK会回复对端我已经收到数据了,下一次你应该从哪里发。
  • 超时重传机制:有可能因为网络拥堵客户端发送的数据服务端接收不到,或者回复数据包丢失,引起客户端接收不到服务端的ACK,这时客户端就会进行重发。

(超时重传使服务端接收了许多重复的包,因为有序列号,可以识别出重复包,把这些重复包自动丢弃)

因为可靠传输的确认机制和超时重传机制导致传输性能下降,那么可以通过哪些方法来提高效率呢??

  • 滑动窗口机制
  • 流量控制
  • 拥塞控制
  • 延迟应答
  • 捎带应答

(1)滑动窗口机制:确认机制是必须一发一答,这样造成了等待回复时间太长,降低性能。通过滑动窗口机制,即一次发送多条数据,集中等待,来提高效率。

滑动窗口机制

如上图所示,详细说明一下滑动窗口机制。窗口大小就是指不需要应答一次能够传输数据的最大值(上图的4000字节),当发送前四个数据时不需要等待ACK,直接发送,发送完最大值的数据时,开始等待一个段的回复,收到回复之后,滑动窗口向后移动,主机A可以继续向B发送数据。

注意:操作系统内核为了维护这个滑动窗口, 需要开辟发送缓冲区来记录当前还有哪些数据没有应答; 只有确认应答过的数据, 才能从缓冲区删掉。

思考:如果在主机A向主机B发送过程中,丢失数据包,或者丢失ACK回复包,怎么进行重传呢?

当丢失数据包1001-2000时,主机A就接收不到回复包2001,一直接收1001的回复包,但是这个时候发送端并不会立马重传1001-2000,会等待,避免网络拥堵的情况。等待三次的重复确认应答,如果还是1001回复包,这个时候就需要重传1001-2000;接收端收到1001后,再次返回ACK就是7001(2001-7000之前都被收到了,只不过放到了缓冲区)。

当丢失回复包ACK2001时,不影响下面的数据包,因为可以通过后续的ACK进行确认。(如果接收到3001,说明2001也接收到了)。

(2)流量控制:TCP支持根据接收端能力来决定发送端的发送速度。接收端可以通过把缓冲区放入tcp首部的“窗口大小“字段”,回复给发送端还可以发送多大的数据包;当缓冲区满了,窗口置为0,这时候,发送端就会停止发送。因为TCP首部还有一个窗口扩大因子,可以定期的发送一个窗口探测数据段,使接收端把窗口大小回复给发送端。这样就减少丢包。

(接收端向发送端主机通知自己可以接受数据的大小,这个大小限制就叫做窗口大小)

(3)拥塞控制:虽然有滑动窗口提高了发送效率,但是大量数据一起发送造成阻塞,就有了拥塞控制机制----TCP引入了慢启动机制,才开始定义阻塞窗口大小为1,然后让阻塞窗口成指数增长,当阻塞窗口超过阈值(tcp启动时,阈值等于窗口的最大值)时,它就按线性增长。这样就减少网络拥塞(大量丢包)。

(4)延迟应答:如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小,所以当接收到数据时,不要立马回复ACK包,而是稍作等待,让缓冲区把数据处理下再回复,这样就可以使返回的窗口变大,提高网络吞吐量。

(5)捎带应答:TCP的确认数据和回执数据可以通过一个包发送。通过这种机制,可以使收发的数据量减少。

如果没有启用延迟确认应答就无法实现捎带应答。延迟确认应答是能够提高网络利用率从而降低计算机处理负荷的一种较优的处理机制。正是因为延迟确认和捎带应答机制,让TCP断开连接的时候四次挥手有时候变成三次挥手。

4.基于TCP应用层协议:(来源于百度)

HTTP :超文本传输协议

HTTPS :可以理解为HTTP+SSL/TLS, 即 HTTP 下加入 SSL 层,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL,用于安全的 HTTP 数据传输。

SSH :安全外壳协议,专为远程登录会话和其他网络服务提供安全性的协议

Telnet :是Internet远程登陆服务的标准协议和主要方式。

FTP :是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务器上的目录。

SMTP:简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。

猜你喜欢

转载自blog.csdn.net/snowyuuu/article/details/81663691
今日推荐