传输层
1、传输层提供的服务
1.1、传输层的功能
- 传输层提供进程之间的通信(即端到端的通信)
- 复用和分用
- 差错检测(首部和数据部分),网络层只进行首部检测
- 提供两种不同的通信协议
1.2、传输层的寻址和端口
套接字
2、UDP协议
2.1、UDP数据报
UDP只是在IP的数据报服务之上添加了两个最基本的服务:复用和分用以及差错检测。
UDP提供尽最大努力的交付,即不保证可靠交付,因此维护传输可靠性的工作需要用户在应用层来完成。
UDP是面向报文的。一次完成一个完整的报文,报文是UDP传输的最小单位。
2.2、UDP的首部格式
2.3、UDP校验
在计算校验和时,要在UDP数据报之前添加12B的伪首部。
有错就丢弃。
3、TCP协议
TCP是在不可靠的IP层之上实现的可靠地数据传输协议,它主要解决传输的可靠、有序、无丢失和不重复问题。特点:
- 面向连接;
- 提供可靠交付服务;
- 全双工通信,设有发送缓存和接收缓存;
- TCP面向字节流。
3.1、TCP报文段
TCP传输的数据单元称为报文段。一个TCP报文段分为TCP首部和TCP数据两个部分,整个TCP段作为IP数据报的数据部分封装在IP数据报中。其首部的20B是固定的。
字段名 | 所占的位数 | 说明 |
---|---|---|
源端口号和目的端口号 | 各占16位 | 源端口号和目的端口号 |
序号字段seq | 32位 | TCP连接传送的数据流中的每个字节都编上一个序号,序号字段的值指的是本报文段所发送的数据的第一个字节的序号 |
确认号字段ack | 32位 | 是期望收到对方的下一个报文段的数据的第一个字节的序号。若确认号为N,则表明到序号N-1为止的所有数据都以正确收到 |
数据偏移 | 4位 | 它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远 |
确认位ACK | 1位 | 只有当ACK=1时确认号字段才有效,TCP规定,在连接建立后所有传送的报文段都必须把ACK置1 |
同步位SYN | 1位 | 同步SYN=1表示这是一个连接请求(SYN=1,ACK=0)或连接接收报文(SYN=1,ACK=1) |
终止位FIN | 1位 | 用来释放一个连接。FIN=1表明此报文段的发送方的数据已经发送完毕,并要求释放传输连接 |
校验和 | 16位 | 也要在前面加上12B的伪首部 |
3.2、TCP连接管理
3.2.1、TCP连接的建立(三次握手)
- SYN=1 seq=x
- SYN=1 ACK=1 seq=y ack=x+1
- ACK=1 seq=x+1 ack=y+1
3.2.2、TCP连接的释放(四次挥手)
- FIN=1 seq=u
- ACK=1 seq=v ack=u+1
- FIN=1 ACK=1 seq=w ack=u+1
- ACK=1 seq=u+1 ack=w+1
3.3、TCP可靠传输
TCP使用校验、序号、确认、重传等机制确保可靠传输。
3.3.1、校验
和UDP一样
3.3.2、序号
TCP首部的序号字段保证数据能有序地提交给应用层,TCP把数据视为一个无结构但有序地字节流,序号建立在传送的字节流之上。
3.3.3、确认
TCP首部的确认号是期望收到对方下一个报文段的数据的第一个字节的序号。
TCP默认采用累计确认。
3.3.4、重传
导致TCP重传的两个事件:超时和(3个)冗余ACK。
3.4、TCP流量控制
TCP提供一种基于滑动窗口的流量控制机制,来消除可能使接收方缓存区溢出的可能性。
接收方根据自己接收缓存的大小,动态地调整发送方的发送发送窗口的大小,这称为接收窗口rwnd;同时,发送方根据其对网络拥塞成都的估计而确定的窗口值,这称为拥塞窗口cwnd。发送方的发送窗口通常等于rwnd和cwnd的最小值。
3.5、TCP拥塞控制
TCP协议要求发送方维护一下两个窗口:
接收窗口rwnd:接收方根据目前接收缓存大小所许诺的最新窗口值,反映接收方的容量。由接收方根据其放在TCP报文的首部的窗口字段通知发送方
拥塞窗口cwnd:发送方根据自己估算的网络的拥塞程度而设置的窗口值,反映网络的当前容量。
发送窗口的上限值应该是rwnd和cwnd中较小的一个,即:发送窗口的上限值=min[rwnd,cwnd]