传输层功能
1、应用层与网络层操作的中介
2、提供进程间的通信
3、提供差错与流量控制
进程标识:IP头部的IP地址+传输层头部的端口号;
UDP 用户数据报协议
UDP头:
源端口(16)+目的端口(16)
总长度(16)+校验和(16);
总长度:65535-20(IP头)-8 (UDP头)= 65507
IP的校验和只校验头部,而UDP校验包含UDP整个报文:UDP伪首部+UDP首部+数据
UDP只与计算校验和有关,根据IP首部信息形成,不会与UDP一起发送;
校验和操作:可选,有时为了减少高可靠性网络上的传输开销;
伪首部信息存在的问题
源IP不确定(路由器上有多个输出端口);
计算过程:
1、封装的UDP发送给IP;
2、IP选路,得到源IP,送回给UDP;
3、UDP层计算校验和,再送给IP层;
UDP与IP:
都是无连接、不可靠,面向报文单元;
但IP不是针对进程,要完成进程间通信,就要增加UDP;
TCP
通用、可靠的进程到进程通信;
提供统一的数据流投递服务接口;
UDP
投递单元:报文;
有报文边界;
发送:报文,前后报文不可能合并
TCP投递单元:字节 //字节流
无报文边界;
发送:数据块或逐字节,前后可合并;
可靠传输的特点:
1、应用层使用自己认为的适宜的任意大小的数据片(最小1B)
2、 TCP协议软件:根据网络的情况选择合适的收发缓冲区;(合并或分割)
3、Push:强制滞留数据的发送;如要合并过程可能要等数据累积到一定程度才发送;
TCP为应用层提供的是字节流;对下层提供的是片;
TCP只有一种报文格式,完成:(因此报文比较复杂)
建立、拆除连接;
数据输出;
确认、流控、窗口滑动;
TCP报文段格式
报文与字节流:TCP是面向字节流,是指对上层提供字节流服务,内部处理也是字节;而TCP要将数据与IP层进行收发数据都是以报文段的为单元
TCP头部
4 HLEN + 6 Reserved(保留位) + (控制字段) URG + ACK + PSH + RST + SYN + FIN + 16 窗口大小
16 校验和(与UDP相同) + 16 紧急指针
填充位
控制字段
序号:是报文段的序号,第一个字节的流序号;
如当前报文段流序号:X,长度是L,则下一报文段序号为X+L;
序号有32比特,4GB,序号是不连续的;
紧急指针与带外数据
并不会在TCP的接收缓冲中排队,而是直接提交给上层
提供快速数据传递功能;
紧急指针:有带外数据时有效,指向带外数据的最后一个字节
TCP不提供独立的带外数据通道,而是直接将数据插入到正常数据流中进行传送,而紧急指针指向了这个带外数据的最后一个字节的后一位;
窗口大小
窗口大小=首部中定义的窗口大小*2^窗口比例因子
窗口比例因子最大值16比特;
窗口比例因子只能在连接阶段确定,窗口大小在传输阶段改变;
TCP可靠性
按序、无差错、不丢失不重复;
差错检测
检测:校验和、确认、超时;
纠正:重传
TCP确认机制
确认机制:带重传肯定的确认
累计确认:
ACK是接收方希望接收的下一个字节;(如发送的是1401序号,返回的ACK是1601,发送方接收到1601,则发送序号为1601的报文段)
ACK号以前的所有字节确认;
超时重传机制
发送方发送数据时启动一个定时器;
定时期间,收到确认后再发送后续数据;
定时期满,发送方重传未确认的数据;
未确认的数据:
受损或丢失的数据;
确认丢失的数据;
重复报文