传输层:TCP/UDP
-
- [1. TCP](#1. TCP)
-
- [1.1 TCP连接管理](#1.1 TCP连接管理)
- [1.2 TCP首部格式](#1.2 TCP首部格式)
- [2. UDP](#2. UDP)
- [3. 其他传输层协议](#3. 其他传输层协议)
-
- [3.1 SCTP](#3.1 SCTP)
- [3.2 DCCP](#3.2 DCCP)
传输层实现源端主机和目标端主机上对等实体间会话,TCP/IP中两个代表性的传输层协议分别是TCP 和UDP ,两者均使用端口来标识传输数据对应的应用程序。
通常使用源IP、目的IP、源端口、目的端口、协议号5个信息来标识一个通信。
1. TCP
TCP(Tranmission Control Protocol) 是面向连接的 、可靠的流协议 ,实行"顺序控制 "或"重发控制 "机制,还具备"流控制(流量控制) "、"拥塞控制"、提高网络利用率等众多功能。
1.1 TCP连接管理
- 建立一个TCP连接需要发送3个包,称作"三次握手"
- 断开一个TCP连接需要发送4个包,称作"四次握手"
1.2 TCP首部格式
- 源端口号(Source Port):发送端端口号,16位。
- 目标端口号(Destination Port):接收端端口号,16位。
- 序列号(Sequence Number):指发送数据的位置,每发送一次数据,就累加一次该数据字节数的大小,32 位。序列号在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机。再将每转发过去的字节数累加到初始值上表示数据的位置。
- 确认应答号(Acknowledgement Number):指下一次应该收到的数据的序列号,实际上是指已收到确认应答号减一为止的数据,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收,32位。
- 数据偏移(Data Offset):表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,也可看作TCP首部的长度,4位。
- 保留(Reserved):扩展时使用,4位,一般设置为0。
- 控制位(Control Flag):8位,每一位从左至右分别为CWR(Congestion Window Reduced)、ECE(ECN-Echo)、URG(Urgent Flag)、ACK(Acknowledgement Flag)、PSH(Push Flag)、 RST(Reset Flag)、SYN(Synchronize Flag)、FIN(Fin Flag)。
- 窗口大小(Window Size):用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小,16位。TCP不允许发送超过此处所示大小的数据。
- 校验和(Checksum) :用于校验和计算TCP的伪首部。接收端在收到TCP数据段以后,从IP首部获取IP地址信息构造TCP伪首部,再进行校验和计算。由于校验和字段里保存着除本字段以外其他部分的和的补码值,因此算校验和字段在内的所有数据的16位和以后,得出的结果是"16位全部为1"说明所收到的数据是正确的。
- 紧急指针(Urgent Pointer) :表示本报文段中紧急数据的指针,16 位,只有在URG控制位为1时有效。
- 选项(Options):用于提高TCP的传输性能,长度可变。由于根据数据偏移(首部长度)进行控制,因此其长度最大为40字节。
2. UDP
UDP (User Datagram Protocol)提供面向无连接的通信服务,是不具有可靠性的数据报协议,不能保证消息一定会到达。传输细节处理由上层应用完成,因此,应用会根据自己的需要进行重发处理。
由于 UDP面向无连接,它可以随时发送数据,主要用于那些对高速传输和实时性有较高要求的场景:
- 包总量较少的通信(DNS、SNMP等)
- 视频、音频等多媒体通信(即时通信)
- 限定于 LAN 等特定网络中的应用通信
- 广播通信(广播、多播)
UDP首部格式
- 源端口号(Source Port):发送端端口号,16位。该字段是可选项,有时可能不会设置源端口号,无源端口号时该字段的值设置为0,可用于不需要返回的通信中▼。
- 目标端口号(Destination Port):接收端端口号,16位。
- 包长度(Length):保存UDP首部的长度跟数据的长度之和。
- 校验和(Checksum):为提供可靠的UDP首部和数据而设计。接收主机在收到UDP数据报以后,从IP首部获知IP地址信息构造UDP 伪首部,再进行校验和计算。校验和字段的值是校验和字段以外剩下部分的1的补码和。因此,包括校验和字段在内的所有数据之和结果为"16位全部为1"时,会被认为所收到的数据是正确的。另外,UDP中也有可能不用校验和。此时,校验和字段中填入0。
3. 其他传输层协议
3.1 SCTP
SCTP (Stream Control Transmission Protocol,流控制传输协议)与TCP一样,都是对一种提供数据到达与否相关可靠性检查的传输层协议。
主要特点:
- 以消息为单位收发
- 支持多重宿主
- 支持多数据流通信
- 可定义消息的生存期限
SCTP主要用于进行通信的应用之间发送众多较小消息的情况。这些较小的应用消息被称作数据块(Chunk),多个数据块组成一个数据包。
主要应用场景:
- 电话信令方面:SCTP可以提供更加可靠的信令传输服务,适用于无线网络中的信令传输。
- 流媒体传输方面,SCTP能够支持多流传输,可以提供更好的数据传输质量。
3.2 DCCP
DCCP (Datagram Congestion Control Protocol,数据报拥塞控制协议)是一个辅助 UDP 的传输层协议。UDP没有拥塞控制机制,当应用使用 UDP发送大量数据包时极容易出现问题,于是出现了DCCP。
主要特点:
- 无法提供发送数据的可靠性传输。
- 面向连接,具备建立连接与断开连接的处理。在建立和断开连接上是具有可靠性。
- 能够根据网络拥堵情况进行拥塞控制。使用DCCP(RFC4340)应用可以根据自身特点选择两种方法进行拥塞控制,分别是"类似TCP(TCP- Like) 拥塞控制"和"TCP友好升级控制"(TCP-Friendly Rate Control)。
- 为了进行拥塞控制,接收端收到包以后返回确认应答(ACK)。该确认应答将被用于重发与否的判断。
DCCP可用于实时应用,如视频会议,聊天,电子游戏等。