TCP/IP(5)--TCP与UDP

来源:互联网 发布:数控钻床钻孔编程范例 编辑:程序博客网 时间:2024/04/29 05:31

传输层

既然有了IP协议,能将数据发送到指定的主机为什么还要由传输层。原因有两点:

  • IP协议提供的是不可靠的传输协议,它只是尽力将数据发送到目标主机,但是如果数据丢包,数据损坏,它都不能提供任何解决办法;

  • IP协议只是将数据发送到了目标主机,但是应该由哪个应用程序来接受这个数据包呢?IP协议没有办法告诉我们。
    因此传输层的作用就是为了实现以上两点目的。

传输层协议有 TCP 协议和 UDP 协议。TCP 协议是面向有连接的协议,也就是说在使用 TCP 协议传输数据之前一定要在发送方和接收方之间建立连接。一般情况下建立连接需要三步,关闭连接需要四步。

TCP概述: TCP 协议是面向有连接的协议,还有数据重传、流量控制等功能,TCP 协议能够正确处理丢包问题,保证接收方能够收到数据,与此同时还能够有效利用网络带宽。然而 TCP 协议中定义了很多复杂的规范,因此效率不如 UDP 协议,不适合实时的视频和音频传输。

UDP概述: UDP 协议是面向无连接的协议,它只会把数据传递给接收端,但是不会关注接收端是否真的收到了数据。但是这种特性反而适合多播,实时的视频和音频传输。因为个别数据包的丢失并不会影响视频和音频的整体效果。

IP 协议中的两大关键要素是源 IP 地址和目标 IP 地址。而刚刚我们说过,传输层的主要作用是实现应用程序之间的通信。因此传输层的协议中新增了两个要素:源端口号,目标端口号。再加上IP首部中的协议号,通过这五个信息,可以唯一识别一个通信。用一句话来概括就是:“源 IP 地址,目标 IP 地址,源端口号,目标端口号和协议号”这五个信息只要有一个不同,都被认为是不同的通信。

端口号

作用:用于区分同一台主机中正在通信的不同应用程序,因此也被称为程序地址。不同的端口用于区分同一台主机上不同的应用程序。假设你打开了两个浏览器,浏览器 A 发出的请求不会被浏览器 B 接收,这就是因为 A 和 B 具有不同的端口。

分为两种:
1. 知名端口号:这种端口号是固定的,用于服务器程序,使用对应协议的程序就将端口号设为对应的数字。比如DNS的端口号就是53.
2. 动态端口号:这种端口号是不固定的,用于客户端程序,客户端程序对端口号要求不高,只要该端口号在本机中唯一就行。

常见的知名端口号:

端口号 协议 53 DNS 80 HTTP 20 FTP数据 21 FTP控制 23 SSH 25 SMTP

TCP与UDP区别

  • TCP基于有连接,UDP基于无连接。有连接就是TCP在传输前先发送连接请求和应答包,确定双方能够正常传输后,才开始进行数据传输。无连接就是UDP在发送数据之前,并不考虑对方能否接受到,甚至目的地址可能都是无效;

  • TCP能保证可靠传输,UDP不能保证可靠传输TCP。所谓可靠就是TCP能保证把数据一定送到目的地址。为了实现可靠,TCP采用有连接的,超时重传,应答机制等。而UDP则没有这些,也不能保证数据一定能送到;

  • TCP结构复杂,消耗资源多,建立过程较慢较复杂。UDP结构简单,消耗资源少,建立过程较快

  • TCP基于流模式,UDP是数据报模式。TCP把数据看成一连串无结构的字节流,没有边界,一段段传输构成了整个数据块。通过发送缓冲区和接受缓冲区来存储数据流。而UDP数据报模式,每一个数据报都是一个独立的对象,有着指定的大小。

  • TCP连接只能是点到点,而UDP可以一对一,一对多或者多对多。TCP只能是点到点原因很简单,因为TCP的传输前要先建立连接。因此,广播和多播只能采用UDP数据报的方式。

  • TCP有确认,重传,拥赛控制机制,UDP在没有建立连接或者对方已经退出的情况下任然会继续发送数据,导致通信流量的浪费

用途

TCP:用于实现可靠传输的情况,文件非常重要,对网络拥堵有较高要求的情况。

UDP:
1. 用于高速传输和实时性较高的场合(即时通信)。对于采用UDP的实事视频通信,如果出现丢包也只会出现短暂卡顿,但是如果采用TCP丢包后需要重发,会导致很长时间的卡顿。
2. 包总量较少的通信(DNS),客户端较多
3. 广播通信

UDP首部

这里写图片描述

  • 源端口号:表示发送端端口号,不需要时设为0
  • 目标端口号:表示接收端端口号
  • 包长度:表示整个UDP包的长度
  • 校验和:为了提供可靠的UDP首部和数据而设计,只要源IP地址,目标IP地址,源端口号,目标端口号,协议号有一个发生了篡改校验和都会不正确。

TCP首部

这里写图片描述

  • 源端口号:发送端端口号
  • 目标端口号:接受端端口号
  • 序列号:发送数据时,表示发送数据的位置,发送完一次数据后,序列号的值都等于原来的序列号加上数据的长度
  • 应答号:用于接受端告诉发送端下次应该从哪个位置开始发送,表示前面的数据已经都收到了
  • 数据偏移:实际就是TCP首部长度
  • 保留:一般设置为0,用于后续扩展
  • 控制位:长度为8,从左到右分别是CWR,ECE,URG,ACK,PSH,RST,SYN,FIN
  • 窗口大小:能够发送数据的最大值,为0时可以发送探测窗口
  • 校验和:与UDP校验和作用相同
  • 紧急指针:用于处理紧急情况
  • 选项:其他控制设置
0 0
原创粉丝点击