TCP/UDP协议总结与应用层常见协议及端口


TCP/UDP协议总结与应用层常见协议及端口

1、TCP协议

TCP协议概述

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

TCP的应用场景

需要将传输的文件分段传输,建立会话。具体应用场景如下:

  • 效率要求相对低,但对准确性要求相对高的场景,因为传输中需要对数据进行确认,重发,排序等操作,效率没有UDP高。
  • 文件传输:FTP\HTTP对数据的准确性要求高,速度可以相对慢。
  • 发送或接收邮件:POP3\IMAP\SMTP对数据准确性要求高,非紧急应用。
  • 远程登陆:TELNET\SSH对数据准确性有一定要求,有连接概。

TCP的特点

  • TCP是面向连接的传输协议。
  • 每一条TCP连接只能有2个端口。每一条TCP连接只能是点对点的。
  • TCP提供可靠通信。
  • TCP是全双工通信。
  • 面向字节流。

TCP的报文格式

TCP/UDP协议总结与应用层常见协议及端口

  • 源端口:源端口和IP地址的作用是标识报文的返回地址。
  • 目的端口:端口指明接收方计算机上的应用程序接口。
  • ***:序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。
  • 确认号:即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。
  • 数据偏移/首部长度:4位,该字段的值是TCP首部(包括选项)长度除以4。
  • 保留:为将来定义新的用途保留,现在一般置0。
  • 控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。
    1.URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
    2.ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
    3.PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
    4.RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
    5.SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
    6.FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
  • 窗口:滑动窗口大小,用来告知发送端接受端的缓存大小。
  • 校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据。
  • 紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

TCP三次握手

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

TCP四次挥手

  • 某个应用进程首先调用close,称该端执行“主动关闭”(active close)。该端的TCP于是发送一个FIN分节,表示数据发送完毕。
  • 接收到这个FIN的对端执行 “被动关闭”(passive close),这个FIN由TCP确认。
  • 一段时间后,接收到这个文件结束符的应用进程将调用close关闭它的套接字。这导致它的TCP也发送一个FIN。
  • 接收这个最终FIN的原发送端TCP(即执行主动关闭的那一端)确认这个FIN。

2、UDP协议

UDP概述

User Data Protocol用户数据包协议,是传输层中一种无连接协议。提供面向报文的简单不可靠信息传送服务。UDP在IP报文的协议号是17。UDP不对数据包分组、组装以及不能对数据包进行排序,当报文发送之后,UDP是无法得知其是否安全完整到达的。

UDP的应用场景

UDP运用在一个数据包就能够完成数据通信,不需要分段,不需要建立会话,不需要流量控制,是不可靠的传输协议。绝大多数UDP应用都不需要可靠机制,甚至可能因为引入可靠机制而降低性能。流媒体、即时多媒体游戏和IP电话就是典型的UDP应用。如果某个应用需要很高的可靠性,那么可以用传输控制协议(即TCP协议)来代替UDP。

UDP的特点

  • UDP是无连接的,传输数据之前源端和终端不建立连接不需要建立连接。
  • 吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制。
  • UDP支持一对一、一对多、多对一和多对多的交互通信。
  • UDP是面向报文。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付给IP层。既不拆分,也不合并,而是保留这些报文的边界,因此,应用程序需要选择合适的报文大小。
  • UDP信息包只有8个字节,相对于TCP的20个字节信息包而言UDP的额外开销很小。

UDP报文格式

TCP/UDP协议总结与应用层常见协议及端口
UDP报头由4个域组成,其中每个域各占用2个字节,具体包括源端口号、目标端口号、数据报长度、校验值。

  • 源端口号:发送端口。
  • 目标端口号:接受端口。
  • 数据报长度:保存了UDP首部的长度跟数据长度之和。
  • 校验值:提供可靠的UDP首部和数据。

3、协议对比

UDP和TCP协议的主要区别是两者在如何实现信息的可靠传递方面不同:

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

4、应用层常见协议及端口

常见服务 协议 端口号
POP3 TCP 110
IMAP TCP 143
SMTP TCP 25
Telnet TCP 23
RDP TCP 3389
PPTP TCP 1723
HTTP TCP 80
HTTPS TCP 443
FTP TCP 20/21
NTP UDP 123
RADIUS UDP 1645
DHCP UDP 67
DNS TCP/UDP 53
SNMP UDP 161
TFTP UDP 69
L2TP UDP 1701
ipsec UDP 500