计算机网络笔记5-传输层

传输层主要功能是实现进程之间的端-端通信,实现传输层协议的软件称为传输实体,传输层之间传输的报文称为传输协议数据单元TPDU

分布式进程通信

要解决的两个基本问题:进程标识多重协议识别

端口号

0-65535

  • 0-1023 熟知端口号,给每种标准的Internet服务进程分配的一个确定的端口号
  • 1024-49151 注册端口号,用户开发新的网络应用时使用这些网络端口号
  • 49152-65535 临时端口号,由运行在客户端上的TCP/UDP软件随机选取,只对一次性进程通信有效

UDP熟知端口号

端口号 服务进程 说明
53 DNS 域名服务
67/68 DHCP 动态主机配置协议
69 TFTP 简单文件传输协议
161/162 SNMP 简单网络管理协议
520 RIP 路由信息协议

TCP熟知端口号

端口号 服务进程 说明
20 FTP 文件传输协议(数据连接)
21 FTP 文件传输协议(控制连接)
23 TELNET 网络虚拟终端协议
25 SMTP 简单邮件传输协议
80 HTTP 超文本传输协议
179 BGP 边界路由协议

客户-服务器模式

客户或服务器进程->套接字->传输层软件->IP地址->网络层软件->..Internet..->网络层软件->…->进程客户或服务器

UDP

一种无连接,不可靠的传输层协议,提供一种尽力而为的服务:

  • UDP在传输报文前不需要在通信双方建立连接,减少了协议的开销与传输延迟
  • UDP对报文除了一种可选的校验和之外,几乎没有其他的保证数据传输可靠性的措施
  • UDP检测出收到的分组出错则丢弃,既不确认也不通知发送端重传

UDP报文头部

UDP 伪头部

当UDP运行于IP协议之上时,为了能够计算校验和,需要在UDP的数据报上添加一个伪头部,包括了IP协议的一些信息,但是它并不是发送IP数据报时使用的头部,而只是用来计算校验和而已。

UDP适用范围

  • 视频播放
  • 简短的交互式应用
  • 多播与广播应用
  • 实时语音与视频传输

TCP

  • 支持面向连接的传输服务
  • 支持字节流的传输
  • 支持全双工通信
  • 支持同时建立多个并发的TCP连接
  • 可靠的传输服务

可靠传输

  • 理想信道:不会比特错误,不会丢包,接收方速度总是能匹配发送方速度
  • 发送方发送数据和接收方接收数据是相互隔离

TCP报文头部

  • 源端口目的端口:各占2字节,端口是传输层与应用层的服务接口
  • 序号字段:占4字节,TCP连接中传输的数据流中每一个字节都编上一个序号。值指的是本报文发送数据的第一个字节的序号
  • 确认号字段:4字节,期望收到对方一个报文段的数据的第一个字节序号
  • 头部长度:4位,指出TCP报文的首部长度,最小值5,最大值15
  • 保留字段:6位,全0
  • 紧急URG:URG=1时表面紧急指针字段有效,告诉系统此报文有紧急数据应当尽快传送
  • 确认ACK:ACK=1时,确认字段才会有效,ACK=0时无效
  • 推送PSH:接受TCP收到PSH=1的报文段,就应当尽快交付接受应用进程
  • 复位RST:RST=1时,表面TCP连接中出现严重差错,必须释放连接再重新建立连接
  • 同步SYN:SYN=1时,标识这是一个连接请求或连接接受报文
  • 终止FIN:释放一个连接,FIN=1表明此报文的发送端数据已经发送完毕并要求释放连接
  • 窗口:2字节,用来让对方设置发送窗口的依据,单位字节
  • 校验和:2字节,检验和字段检验范围包括首部和数据两部分,检验时需要在TCP报文前段加上12字节的伪头部
  • 紧急指针:16位,指出紧急数据末尾在本报文段中的位置
  • 选项:长度可变,最初只规定了一种选项,MSS最大报文段长度

TCP连接与释放

传输连接有三个阶段:连接建立数据传送连接释放

连接的建立过程要解决以下三个问题:

  1. 使得每一方能够确认对方的存在
  2. 允许双方协商一些参数
  3. 能够对运输实体资源进行分配

TCP连接建立

三次握手建立TCP连接

  1. 客户->服务器 SYN=1,seq=x,客户向服务器发送连接请求报文段,首部同部位SYN=1,选择序号seq=1,表面传送数据时的第一个数据字节序号为x
  2. 服务器->客户 SYN=1,ACK=1,seq=y,ack=x+1,服务器收到连接请求报文段后若同一,则发回确认,SYN=1,ACK=1,其中确认编号ack=x+1,自己选择的序号seq=y
  3. 客户->服务器 ACK=1,seq=x+1,ack=y+1,客户收到确认报文后向B给出确认,其中ACK=1,确认号ack=y+1,客户端再通知上层应用进程连接已经建立

TCP连接释放

四次握手释放TCP连接

  1. 客户->服务器 FIN=1,seq=u,数据传输结束后,客户端应用进程先向TCP发出释放链接报文段并停止发送数据主动关闭TCP连接,客户端将报文段首部FIN=1,seq=u,等待服务器确认
  2. 服务器->客户 ACK=1,seq=v,ack=u+1,服务器发出确认,确认号ack=u+1,序号seq=v,TCP服务通知高层应用进程,TCP处于半关闭状态,若服务器发送数据客户仍然会接收
  3. 服务器->客户 FIN=1,ACK=1,seq=w,ack=u+1,若服务器没有要发送的数据则通知TCP释放连接
  4. 客户->服务器 ACK=1,seq=u+1,ack=w+1,客户端收到连接释放报文段后也要发出确认

滑动窗口、确认、重传

TCP连接每一端必须要有:

  1. 两个缓存:发送缓存与接受缓存
  2. 一个窗口:接受端的接受窗口

发送缓存

用于暂时存放:

  • 发送应用程序给发送方TCP准备发送的数据
  • TCP已经发送但是尚未收到确认的数据

接受缓存

用于暂时存放:

  • 按序到达但是尚未被接受应用程序读取的数据
  • 不按序到达的数据

滑动窗口协议主要特点

  • 使用发送与接受缓冲区,以及滑动窗口机制控制TCP连接上的的字节流传输
  • 滑动窗口面向字节,起到差错控制的作用。
  • 接收端可以在任何时候发送确认,窗口大小可以由接收端根据需要增大或者减小
  • 发送窗口值可以小于接收窗口值,不能超过接收窗口值

TCP流量控制

让对方发送的速率不要太快,既要接收方来得及接受也不要使网络发生拥塞。利用滑动窗口机制可以方便地在TCP连接上实现流量控制

TCP拥塞控制

网络中对某资源的需求超过了该资源所能提供的可用部分,网络性能开始变差,产生拥塞