传输层基本服务
- 传输层核心任务是为应用进程之间提供端到端的逻辑通信服务
- 传输层主要实现功能:传输层寻址、对应用层报文进行分段和重组、对报文进行差错检测、实现进程间的端到端的可靠数据传输控制、面向应用层实现复用与分解、实现端到端的流量控制、拥塞控制
传输层寻址与端口
- TCP/IP体系结构寻址的解决方案:“IP地址+端口号”标识一个通信端点
- 端口号为16位整数、0-1023为数字端口号;1024-49151为登记端口号,必须在互联网数字分配结构(IANA)登记,避免重复;49152-65535为客户端口号或短暂端口号,留给客户进程或用户开发的非标准服务器暂时使用
- FTP默认端口号21,HTTP默认端口号80、SMTP默认端口号25、DNS默认端口号53
传输层的复用与分解
- 一个网络应用进程通过一个或多个套接字,实现与传输层之间的数据传递即发送数据和接收数据
无连接的多路复用与多路分解
- 为UDP分配端口号的两种方法:创建一个UDP套接字时,传输层自动为该套接字分配一个端口号;创建一个UDP套接字后,通过调用bind()为该套接字绑定一个特定端口号
- UDP套接字是一个二元组(源端口号,目的端口号)
面向连接的多路复用与多路分解
- TCP套接字是一个四元组(源端口号,目的端口号,源IP地址,目的IP地址)
停-等协议与滑动窗口协议
- 实现可靠数据传输的措施:
- 差错检测:利用差错编码实现数据包传输过程中的比特差错检测(甚至纠正)
- 确认:接收方向发送方反馈接收状态
- 重传:发送方重新发送接收方没有正确接收的数据
- 序号:确保数据按序提交
- 计时器:解决数据丢失问题
- 停–等协议基本工作过程:发送方发送经过差错编码和编号的报文段,等待接收方的确认;接收方如果正确接收报文段,即差错检测无误且序号正确,则接收报文段,向发送方发送ACK,否则丢弃报文段,并向发送方NAK
- 滑动窗口协议:发送方和接收方各维护一个窗口,分别为发送窗口Ws和接收窗口Wr
- GBN协议——回退N步;发送窗口Ws>=1,接收窗口Wr=1
- GBN必须响应三种类型的事件:上层调用、收到1个ACKn、计时器超时
- 工作流程简述如下:发送方连续发送多个帧,接收方一个一个按序接收,若是碰到超时或未收到,则重发该帧及其后所有帧
- SR协议——选择重传
- SR协议工作流程简述:接收方发现某帧出错后,后续收到的帧可以暂时先存起来,将出错的帧位置留出相应空位
注意:SR可以以排队给没来的人留空位理解,GBN可以简单理解为数据库中的事务操作(“取钱一系列操作”——要做都做,要不做都不做)
用户数据报协议UDP
- 用户数据报协议UDP是Internet传输层协议,提供无连接、不可靠、数据报尽力传输的服务
- 应用UDP的原因:
- 应用进程更容易控制发送什么数据以及何时发送
- 无需建立连接
- 无连接状态
- 首部开销小
- UDP数据报结构:
- UDP首部只有4个字段,每个字段由两个字节组成,源和目的端口号用于UDP实现复用和分解
- UDP校验和求解过程:
- 按照16位进行按位求和
- 运算中有溢出回卷
- 将得到的结果求反码
传输控制协议TCP
- 传输控制协议(TCP)是Internet一个重要的传输层协议,提供面向连接、、可靠、有序、字节流传输服务
- 为了实现可靠传输,TCP采用的措施如下:差错检测、重传、累积确认、定时器以及序号和确认序号等
- TCP报文段结构
- 源端口号和目的端口号,占16位,用于多路复用/分解来自或送到上层应用的数据
- 序号和确认序号,占32位,序号哦是对每个应用层数据的每个字节进行编号,确认序号是期望从对方接收数据的字节序号,TCP采用累积确认机制
- 首部长度(数据偏移),占4位,长度可变最大位60字节,选项字段最多为40字节
- 保留,占6位,目前值为0
- URG、ACK、PSH、RST、SYN、FIN各占1位,共6位
- URG=1——紧急指针字段有效,尽快传输
- ACK=1——确认序号有效,反之无效
- PSH=1——尽快将报文段中的数据据交付接收应用进程
- RST=1——出现严重差错,必须释放连接,再重新建立连接
- SYN=1——建立新连接请求控制段或同意建立新连接的确认段
- FIN=1——释放一个TCP连接
- 接收窗口,占16位,向对方通告接收窗口大小
- 校验和字段,占16位
- 紧急指针,16位,URG=1时有效
- 选项字段,最大段长度MSS,用于对付TCP通告其缓存能够接受的数据段的最大长度是MSS个字节
- 填充字段,长度为0-3字节,取值全为0,目的是为了使整个首部长度是4字节的整数倍
- TCP连接管理:
- 三次握手
- 详细解释如下:
- 客户端作为连接建立发起端,选择客户端初始序列号,向服务器发送(SYN=1,seq=x)的SYN段
- 服务器收到SYN后,选择服务器初始序列号y,向客户发送(syn=1,ack=1,seq=y,ack_seq=x+1)
- 客户端收到服务器发送报文,向服务器发送(ACK=1,seq=x+1,ack_seq=y+1)的ACK段,当服务器收到ACK后,连接建立
- 四次挥手
- 详细解释如下:
- 客户向服务器发送完最后一个数据段后,发送一个FIN段(FIN=1,seq=u),请求断开客户到服务器的连接
- 服务器收到后,发送一个ACK段(ACK=1,seq=v,ack_seq=u+1)
- 服务器发送完最后一个数据段后,服务器向客户发送FIN段(FIN=1,ACK=1,seq=w,ack_seq=u+1)
- 客户收到服务器发送的FIN段后,向服务器发送ACK段(FIN=1,ACK=1,seq=w,ack_seq=u+1),断开连接
- TCP能够提供可靠的数据传输服务,是通过一下工作机制来实现的:
- 应用数据被分割为TCP任务最适合发送的数据库(MSS),封装为TCP段
- TCP发出一个段后,启动一个计时器
- 校验和字段,用于检测数据在传输过程中是否发生差错
- 根据序号程序排序
- 重复报文段丢弃
- 流量控制
- TCP流量控制:协调协议发送方和接收方的数据发送和接收速度,避免因发送方发送数据太空,超出接收方的数据接收和处理能力,导致接收方被数据“淹没”
- 拥塞控制:通过合理调度、规范、调整向网络中发送数据的主机数量、发送速率或数据量,以避免拥塞或尽快消除已发生的拥塞