计算机网络学习笔记(三)- 传输层(上)

本文详细介绍了计算机网络传输层的服务,包括多路复用与分用的概念,无连接传输协议UDP的特点与校验和计算,以及可靠数据传输原理,如RDT协议的不同版本,探讨了流水线机制和滑动窗口协议如GBN和SR。
摘要由CSDN通过智能技术生成

传输层服务概述

  1. 传输层协议为运行在不同host上的进程提供了一种逻辑通信机制
    (注:网络层是提供host之间的逻辑通信机制)
    • 位于网络层之上
    • 依赖于网络层服务
    • 对网络层服务进行(可能的)增强
  2. 端系统运行传输层协议
    • 发送方:将应用递交的消息分成一个或多个的segment,并向下传给网络层。
    • 接收方:将接收到的segment组装成消息,并向上交给应用层。
  3. 传输层可以为应用提供多种协议
    • TCP
    • UDP

多路复用与分用

  1. 接收端进行多路分用
    传输层依据头部信息将收到的Segment交给正确的Socket,即不同的进程

  2. 发送端进行多路复用
    从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层

  3. 无连接分用
    • 利用端口号创建Socket
    • UDP的Socket用二元组标识(目的IP地址,目的端口号)
    • 主机收到UDP段后
    • 检查段中的目的端口号
    • 将UDP段导向绑定在该端口号的Socket
    :UDP的Socket使用二元组标识仅能标识唯一的Socket,因此来自不同源IP地址和源端口号的IP数据包将被导向同一个Socket(下图中SP仅提供返回地址,并未起到标识作用)

  4. 面向连接分用
    • TCP的Socket用四元组标识
     源IP地址
     源端口号
     目的IP地址
     目的端口号
    • 接收端利用所有的四个值将Segment导向合适的Socket
    • 服务器可能同时支持多个TCPSocket
     每个Socket用自己的四元组标识
    • Web服务器为每个客户端开不同的Socket

无连接传输协议

UDP: User Datagram Protocol [RFC 768]

UDP概述

  1. 基于Internet IP协议
    • 复用/分用
    • 简单的错误校验
  2. “Best effort”服务,UDP段可能丢失
  3. 无连接
    • UDP发送方和接收方之间不需要握手
    • 每个UDP段的处理独立于其他段

UDP存在原因

  1. 无需建立连接(减少延迟)
  2. 实现简单:无需维护连接状态
  3. 头部开销少
  4. 没有拥塞控制: 应用可更好地控制发送时间和速率

UDP校验和(checksum)

  1. 目的:检测UDP段在传输中是否发生错误(如位翻转)
  2. 发送方
    • 将段的内容视为16-bit整数
    • 校验和计算:计算所有整数的和,进位加在和的后面,将得到的值按位求反,得到校验和
    • 发送方将校验和放入校验和字段
  3. 接收方
    • 计算所收到段的校验和
    • 将其与校验和字段进行对比
    • 不相等:检测出错误
    • 相等:没有检测出错误(但可能有错误)
    :最高位进位必须被加进去

可靠数据传输原理

可靠数据传输协议

  • 可靠数据传输对应用层、传输层、链路层都很重要
  • 信道的不可靠特性决定了可靠数据传输协议(rdt)的复杂性
    下图为可靠数据传输协议结构:
  • rdt_send():被上层应用调用,将数据交给rdt以发送给对方
  • udt_send(): 被rdt调用,在不可靠信道上向接收方传输数据
  • rdt_rcv(): 当数据包到达接收方信道时被调用
  • deliver_data(): 被rdt调用,向上层应用交付数据

RDT1.0:可靠信道上的可靠数据传输

  1. 假设底层信道完全可靠
    • 不会发生错误
    • 不会丢弃分组
  2. 采用状态机刻画传输协议,如下所示:
  1. 伪代码如下:
	// 发送端
	loop(forever)
		if(call from above)				// 应用层调用,传送数据给网络层
			rdt_send(data);
			packet = make_pkt(data);	//报文分段
			udt_send(packet);
		end
	end
	
	// 接收端
	loop(forever)
		if(call from below)				// 网络层调用,传送数据给应用层
			rdt_rev(packet);
			packet = extract(packet
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值