TCP和UDP的基础知识

前言

运输层两个协议TCP和UDP,真正做到主机进程到主机进程的传输,它的上层应用层定义的是和端到端无关的规定,它的下层网络层定义的是数据在网络间的转发。

学习首部格式的意义:

运输层就两个协议:TCP和UDP。UDP功能较少,用的也较少(幸运的是要学的也少)。TCP用的多,主要原因是他功能强大,如建立连接、保证可靠、实现流量控制和拥塞控制,所以要学的也多。TCP和UDP的这些功能能够实现是基于他们的首部数据,所以我们这节将先学习首部格式。

 

TCP和UDP的定义和区别

传输控制协议TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。仅支持单播传输。提供拥塞控制、流量控制等功能。首部最小20字节,最大60字节。大多数场景下使用

用户数据报协议UDP是一个简单的面向数据报的传输层协议,提供的是非面向连接的、不可靠,尽最大努力交付的数据传输。支持一对一、一对多和多对多的交互通信。没有拥塞控制,适合实时性强的应用 。首部开销小,仅8字节。适合实时视频回忆、DNS、TCP等协议的控制查询报文。

区别:

  TCP UDP
是否连接 面向连接的 无连接的
是否可靠 可靠的 不可靠,尽最大努力交付
连接对象个数 点对点的全双工通信 支持一对一、一对多和多对多的交互通信
传输方式 基于字节流的 面向报文的,即对应用层的报文不拆分也不合并
拥塞控制和流量控制 没有拥塞控制,适合实时性强的应用
首部开销 首部最小20字节,最大60字节 首部开销小,仅8字节
适用场景 除UDP的场景 功能少、要求低。适合实时视频回忆、DNS、TCP等协议的控制查询报文

 

UDP的用户数据报首部格式

TCP和UDP的基础知识

UDP长度:最小为8,即只有首部

UDP检验和:计算时会临时增加一个伪首部(包括源IP、目标IP、UDP长度等)计算后删除

伪首部, 又称为伪包头(Pseudo Header):是指在 TCP 的分段或 UDP 的数据报格式中,在数据报首部前面增加源 IP 地址、目的 IP 地址、IP 分组的协议字段、TCP 或 UDP 数据报的总长度等共12字节,所构成的扩展首部结构。此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。

TCP和UDP的基础知识

计算方法 发送方 1.检验和置0 2.把伪首部、首部和数据部分拆分为16位的字串 3.按二进制反码计算出这些16位字的和 4.将和求反填入校验和字段 接收方 1.按发送方2、3步计算出结果 2.无差错时结果为1,否则出错

 

TCP的报文段首部格式

TCP和UDP的基础知识

序号:TCP对字节流的每个字节都按顺序编号,序号指的是本报文段所发送的数据的第一个字节的序号

确认号ack:期望收到对方下一个报文段的第一个数据字节的序号,同时表明前面的所有数据都已经收到了

数据偏移:数据起始处距离报文段的起始处多远,实际指出的是TCP报文段的首部长度

保留:占6位,目前为0,没被使用

控制位:

  • 紧急URG:URG=1代表开启紧急指针

  • 确认ACK:ACK=1代表首部带确认好ack

  • 推送PSH(PuSH):URG=1立即把报文段发送出去,不再等到缓存都填满后再向上交付

  • 复位RST(ReSeT):RST=1释放连接,重新建立运输连接

  • 同步SYN:SYN=1说明在建立连接同步序号

  • 终止FIN:数据已发送完毕,释放连接

窗口(重点):发送本报文段的一方的接收窗口大小,让接收本报文段的接收方设置其发送窗口大小值。用于流量控制

检验和:和UDP一样,伪首部第四个字段为6

紧急指针:指出紧急数据的大小,即紧急数据的末尾(从0到末尾)

选项:最大报文段长度MSS、时间戳等等