TCP与UDP

TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用和通信传输。总之,根据通信的具体特征,选择合适的传输层协议是非常重要的。

传输层定义

IP首部中有一个协议字段,用来标识网络层(IP)的上一层采用的是哪一种传输层协议,根据这个字段的协议号,就可以识别IP传输的数据部分究竟是TCP的内容还是UDP的内容。

通信处理

两种传输层协议TCP和UDP

TCP

是面向连接的、可靠的流协议。所谓流就是指不间断的数据结构,可以类比水流。

TCP通过校验和、序列号、确认应答、重发控制、连接管理以及窗口等机制实现可靠性传输。

UDP

UDP是不具有可靠性的数据报协议,在这种情况下,虽然可以保证发送消息的大小,却不能保证消息一定到达。

应用场景:

  • 包总量较少的通信(DNS、SNMP)等
  • 视频、音频等多媒体通信(即使通信)
  • 限定于LAN等特定网络中的应用通信
  • 广播通信(广播、多播)

套接字(Soket)
在应用程序中利用套接字,可以设置对端的IP地址、端口号、并实现数据的发送与接收

端口号

定义

端口号用来识别同一台计算机中进行通信的不同应用程序,一次,它也被称为程序地址。

根据端口号识别应用

传输层利用端口号识别本机中正在进行通信的应用程序。

端口号如何确定

  • 标准既定的端口号
  • 时序分配法:例如每需要一个新的端口号就在之前的分配的号码的基础上加1

端口与协议

端口号由其使用的传输层协议决定,因此,不同的传输协议可以使用相同的端口号。

数据到达IP层后,会先检查IP首部中的协议号,再传给相应协议的模块。如果是TCP则传给TCP模块,由传输协议各自独立处理。

连接管理

UDP是一种面向无连接的通信协议,因此不检查对端是否可用痛殴更新,直接将UDP包发送出去。TCP相反。

UDP首部格式

  • 源端口号(Source Port):表示发送端口号,字段长16位。
  • 目标端口号(Destination Port):表示接收端口号,字段长度16位。
  • 包长度(Length):该字段保存了UDP首部的长度跟数据的长度之和。单位字节为8
  • 校验和(Checksum):校验和是为了提供可靠的UDP首部和数据而设计的。

TCP首部格式

  • 源端口号(Source Port):表示发送端端口号,字段长16位
  • 目标端口号(Destination Port):表示接受端口号,字段长度16位。
  • 序列号(Sequence Number):是指发送数据的位置。每发送一次数据,就累加一次该数据字节数的大小
  • 确认应答号(Acknowledgement Number):下一次应该收到的数据的序列号。
  • 数据偏移(Data Offset):表示TCP所传输的数据部分应该从TCP包的哪个位开始计算。也可看作TCP首部的长度。
  • 保留(Reserved):为 以后扩展
  • 控制位(Control Flag): 字段长8位,每一位从左至右分别为 CWR、ECE、URG、ACK、PSH、RST、SYN、FIN。
  • 窗口大小(Window Size):用于通知从农耕相同TCP首部的确认应答号所指位置开始能够接受的数据大小。TCP不允许发送超过此处所表示大小的数据。
  • 校验和(Checksum):如果计算校验和字段在内的所有数据的16位和以后,得出的结果是“16位全部为1”说明所收到的数据时正确的。
  • 紧急指针(Urgent Pointer):紧急指针指出了紧急数据的末尾在报文段中的位置。
  • 选项(Options):用于提高TCP传输性能。