运输层位于应用层与网络层中间,为不同主机上的应用进程之间的通信起着至关重要的作用。还有两个非常重要的协议:TCP和UDP运输层协议。
总结一下UDP和TCP最基本的责任:将两个端系统间IP的交付服务拓展为运行在端系统上的两个进程之间的交付服务。
将主机间交付拓展到进程间交付被称为运输层的多路复用(transport-layer multiplexing)
与多路分解(demultiplexing)
。
进程到进程之间的数据交付和差错检测是两种最低限度的运输层服务
多路复用与多路分解
网络层提供的主机到主机之间的服务 - 变成 - 运行在主机上的应用程序进程到进程之间的服务
- 多路分解
将运输层报文段中的数据交付到正确的套接字(socket)
- 多路复用
在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息(用于以后的多路分解)
无连接运输UDP
无连接的,运输层之间没有握手
选择UDP的原因:
关于发送什么数据以及何时发送的应用层控制更为精细
无需连接建立
无连接状态
分组首部开销小
TCP报文段有20字节的首部开销,UDP仅有8字节的开销
UDP报文段结构
只有四个字段:源端口号、目的端口号、长度、检验和
每个字段两个字节(16bit)
长度字段指示了UDP报文段中的字节数(首部+运送的数据)
检验和用来检查报文段中是否出现了错误,实际上,计算校验和时,还包括了IP首部的一些字段
UDP检验和
为什么UDP也要提供校验和?
因为不能保证源和目的之间所有的链路都提供差错检测
可靠数据传输机制
停止等待协议==》滑动窗口协议==》选择重传协议
机制 | 用途和说明 |
---|---|
检验和 | |
定时器 | |
序号 | |
确认 | |
否定确认 | |
窗口、流水线 |
面向连接的运输:TCP
TCP连接提供的是双全工服务
TCP报文段结构
1、序号和确认号
- 序号
TCP将数据看成一个无结构的、有序的字节流,所以序号是建立在传送的字节流之上的
一个报文段的序号(sequence number for a segment)应该是该报文段首字节的字节流编号
- 确认号
主机A填充进报文段的确认号是希望从主机B收到的下一个字节的序号
TCP只确认该流中至第一个丢失字节为止的字节,所以TCP被称为累计确认(cumulative acknowledge)
可靠的数据传输
流量控制
TCP连接管理
三次握手的详细过程
为什么需要初始序号?为什么需要三次握手而不是两次握手?
四次挥手的详细过程