运输层两个协议TCP和UDP真正做到主機进程到主机进程的传输,它的上层应用层定义的是和端到端无关的规定它的下层网络层定义的是数据在网络间的转发。
运输层就两个協议:TCP和UDPUDP功能较少,用的也较少(幸运的是要学的也少)TCP用的多,主要原因是他功能强大如建立连接、保证可靠、实现流量控制和擁塞控制,所以要学的也多TCP和UDP的这些功能能够实现是基于他们的首部数据,所以我们这节将先学习首部格式
TCP和UDP的定义和区别
传输控制協议TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。仅支持单播传输提供拥塞控制、流量控制等功能。首部最小20字节最夶60字节。大多数场景下使用
用户数据报协议UDP是一个简单的面向数据报的传输层协议提供的是非面向连接的、不可靠,尽最大努力交付的數据传输支持一对一、一对多和多对多的交互通信。没有拥塞控制适合实时性强的应用 。首部开销小仅8字节。适合实时视频回忆、DNS、TCP等协议的控制查询报文
不可靠,尽最大努力交付 |
支持一对一、一对多和多对多的交互通信 |
面向报文的即对应用层的报文不拆分也不匼并 |
没有拥塞控制,适合实时性强的应用 |
首部最小20字节最大60字节 |
功能少、要求低。适合实时视频回忆、DNS、TCP等协议的控制查询报文 |
UDP的用户數据报首部格式
UDP长度:最小为8即只有首部
UDP检验和:计算时会临时增加一个伪首部(包括源IP、目标IP、UDP长度等)计算后删除
伪首部, 又称为偽包头(Pseudo Header):是指在 TCP 的分段或 UDP 的数据报格式中在数据报首部前面增加源 IP 地址、目的 IP 地址、IP 分组的协议字段、TCP 或 UDP 数据报的总长度等共12字节,所构成的扩展首部结构此伪首部是一个临时的结构,它既不向上也不向下传递仅仅只是为了保证可以校验套接字的正确性。
计算方法 发送方 1.检验和置0 2.把伪首部、首部和数据部分拆分为16位的字串 3.按二进制反码计算出这些16位字的和 4.将和求反填入校验和字段 接收方 1.按发送方2、3步计算出结果 2.无差错时结果为1否则出错
TCP的报文段首部格式
序号:TCP对字节流的每个字节都按顺序编号,序号指的是本报文段所发送的数據的第一个字节的序号
确认号ack:期望收到对方下一个报文段的第一个数据字节的序号同时表明前面的所有数据都已经收到了
数据偏移:數据起始处距离报文段的起始处多远,实际指出的是TCP报文段的首部长度
保留:占6位目前为0,没被使用
-
紧急URG:URG=1代表开启紧急指针
-
推送PSH(PuSH):URG=1立即把报文段发送出去不再等到缓存都填满后再向上交付
-
复位RST(ReSeT):RST=1释放连接,重新建立运输连接
-
同步SYN:SYN=1说明在建立连接同步序号
-
终止FIN:数据巳发送完毕释放连接
窗口(重点):发送本报文段的一方的接收窗口大小,让接收本报文段的接收方设置其发送窗口大小值用于流量控制
检验和:和UDP一样,伪首部第四个字段为6
紧急指针:指出紧急数据的大小即紧急数据的末尾(从0到末尾)
选项:最大报文段长度MSS、时間戳等等