网络层、数据链路层与物理层实现了网络中主机之间的数据通信
传输层的主要功能是实现分布式进程通信
网络层的IP地址标识主机、路由器的位置信息;
IP协议通过路由选择算法和链路组成的传输路径完成IP分组数据的传输;
传输层协议是利用网络层所提供的服务,在源主机的应用进程与目的主机应用进程之间建立 端到端 的连接,实现分布式进程通信
Internet 中的路由器与通信线路构成传输网。提高传输服务可靠性的两个方面:
一是 电信公司提高传输网的服务质量
二是 传输层对分组丢失、线路故障进行检测,并采取相应差错控制措施,以满足分布式进程通信对服务质量(Qos)的要求
点到点通信 到 端到端 通信是一次质的飞跃
传输层中实现传输层协议的软件称为传输实体
传输层之间传输的报文称为传输协议数据单元(TPDU)
TPDU有效载荷是应用层数据—>
传输层在有效载荷TPDU上加上TPDU头形成TPDU传输协议数据单元—>
网络层 为TPDU+IP分组头 后形成IP分组—>
数据链路层 加上 帧头、帧尾形成帧—>
物理层 传输帧到目的主机
帧头部 | 分组头部 | TPDU头部 | TPDU有效载荷 | 帧尾部
关系示意图:
客户或服务器 客户或服务器
进程 <--------------------------> 进程
套接字 套接字
传输层软件 传输层软件
IP地址 IP地址
网络层软件 -------Internet------ 网络层软件
进程号(Process ID) 唯一标识进程,进程号 也称为端口号
套接字:IP地址:端口号
1,进程标识的基本方法
TCP 和 UDP 规定用不同的端口号来表示不同的应用程序
2,端口号的分配方法
端口号的取值范围 0 - 65535
端口号类型
熟知端口号 0 - 1023
注册端口号 1024 - 49151
临时端口号 49152 - 65535
3,熟知端口号
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 | 边界路由协议 |
4,多重协议的识别
事先约定好使用的传输层协议类型
三元组:协议 本地地址 本地端口号 TCP 121.2.21.2 80
五元组:协议 本地地址 本地端口号 远程地址 远程端口号
例如:
客户端套接字 202.1.2.5:30022 服务器端套接字 121.2.21.2:80
五元组:TCP 202.1.2.5:30022 121.2.21.2:80
TCP/IP 协议允许多个不同的应用程序的数据,同时使用一个IP地址和物理链路来发送和接收数据
多路复用 与 多路分解
发送端:IP 协议将多个 TPDU 封装成一个IP分组发送
接收端:IP 协议将IP分组中拆开的TPDU 给传输层,传输层根据不同TPDU端口号,区分不同属性,分别传给多个应用进程
关系有三种类型:
1,应用层协议依赖于TCP协议(需要大量传输交互式报文)
2,依赖于UDP协议(简单网络管理协议)
3,都依赖(域名服务协议)
1,UDP 协议是一种无连接的传输层协议
尽力而为的传输服务,没有必要的差错控制机制
2,UDP 协议是一种面向报文的传输层协议
应用程序报文 应用层
UDP头部|UDP用户数据报数据部分 传输层
IP头部 IP分组的数据部分 网路层
UDP 用户数据报的格式
------0 8 16 24 31
UDP 源端口号 目的端口号 U
报头 UDP总长度 校验和 DP
数据 报
数据不是16位倍数时需要增加填充位 文
伪报头
计算时临时加上去的
不传输
防止IP分组头出错时,分组传送到错误的主机
UDP校验和校验的伪报头与报头的结构:
-----0 8 16 24 31
伪头部 源IP地址
目的IP地址
00000000 协议号(17) UDP长度
UDP 源端口号 目的端口号 U
报头 UDP总长度 校验和 DP
数据 报
数据不是16位倍数时需要增加填充位 文
1,视频播放应用
2,简短的交互式应用
3,多播与广播应用
1,支持面向连接的传输服务
传送数据前在源进程端口与目的进程端口之间建立一条TCP传输连接
2,支持字节流的传输
流相当于一个管道
为了支持字节流传输,发送端和接收端双方都需要使用缓存
3,支持双全工通信
TCP协议允许通信双方的应用程序在任何时候都可以发送数据。
4,支持同时建立多个并发的TCP连接
一个服务器与多个客户端同时建立多个TCP连接
一个客户端与多个服务器同时建立多个TCP连接
5,支持可靠的传输服务
使用确认机制检查数据是否安全和完整到达,并且提供拥塞控制功能
TCP 报文格式:
TCP 头部 数据
源端口号(16位) 目的端口号(16位) --
序号(32位) 固定
确认号(32位) 长度
头部长度 保留 URG ACK PSH RST SYN FIN 窗口大小(16位) 部分
4位 6位
检验和(16位) 紧急指针(16位) --
可边长
选项及填充 部分
1,TCP 报头格式
TCP报头长度20-60B,固定长度 20B(16位=2B)
端口号
表示发送该报文段的应用进程的源端口号与接收进程的目的端口号
序号
TCP是面向字节流的,为发送字节流中的每个字节都按顺序编号
确认号
确认号表示一个进程已经正确接收序号为N的字节,要求发送端下一个应该发送序号为N+1字节的报文段
报头长度
保留
保留字段长度为6位
控制
控制字段定义了6中不同的控制位或标志,用于TCP的连接建立和终止,流量控制,以及数据传送过程
紧急位(URG,urgent) 表示报文段高优先级,需尽快发送。与紧急指针字段一起使用
确认位(ACK) TCP连接建立后,发送的所有报文段的ACK位都要置为1
推送位(PSH) 希望对方立即响应,将PSH置为1
复位位(RST) RST置为1,主机崩溃导致TCP连接出错需要释放连接,重建连接;拒绝一个非法TCP报文或拒绝释放一个连接
同步位(SYN) 在连接时用来同步序号
终止位(FIN) 释放一个TCP连接
窗口
窗口字段值表示下一次传输接收端还有多大接收容量
紧急指针
当URG=1 的时候有效,这是的报文段中包含紧急数据
选项
TCP报头可以有多达40B的选项字段
单字节选项:选项结束和无操作
多字节选项:最大报文长度,窗口扩大因子以及时间戳
检验和
计算校验和过程和UDP相同
2,TCP的最大段长度
MSS是TCP报文中数据部分的最大字节数限定值,不包括报头长度
TCP三次握手建立连接
客户端 <<--TCP 连接/ Internet-->> 服务器端
CLOSE LISTEN
---SYN(SYN=1,seq=-x)--->
SYN-SEND SYN-RCVD
<---SYN+ACK(SYN=1,ACK=1,seq=y,ack=x+1)---
-----(ACK=1,seq=x+1,ack=y=1)ACK----->
ESTABLISHED ESTABLISHED
-------DATA-----> (保持计时器)
......
<------DATA------
注意:
seq=x,随机产生,但不能为0,避免因TCP连接非正常断开而可能引起的混乱
四次挥手释放连接
接上图:
------(FIN=1,seq=u)FIN---->
FIN-WAIT-1
<-------DATA--------
<------ACK(ACK=1,seq=v,ack=u+1)-----
CLOSE-WAIT
FIN-WAIT-2
<---FIN(FIN=1,ACK=1,seq=w,ack=u+1)---
(时间等待计时器) LAST-ACK
-------(ACK=1,seq=u+1,ack=w+1)ACK---->
CLOSE
TIME-WAIT(指向上面的CLOSE)
1,TCP协议的差错控制
TCP协议通过滑动窗口机制来跟踪和记录发送字节的状态,实现差错控制功能
2,字节流传输状态分类与窗口的概念
滑动窗口的基本概念
TCP协议使用以字节为单位的滑动窗口协议,来控制字节流的发送,接收,确认与重传过程
a,TCP使用两个缓存和一个窗口来控制字节流的传输过程
b,接收端通过TCP报头通知发送端:已经正确接收的字节号以及发送端还能够连续发送的字节数
c,发送窗口大小取决于接收窗口的大小。接收窗口大小取决于接收缓存剩余空间大小和应用进程读取数据的速度
d,将字节流分成段进行打包
传输的字节流状态分类
第一类:已经发送,且已得到确认的字节
第二类:已发送,但未收到确认的字节
第三类:尚未发送,但是接收端表示接收缓冲区已经准备好,可随时发送
第四类:尚未发送,且接收端也为做好接受准备
发送窗口与可用窗口
发送端在每一次发送过程中能够连续发送字节数取决于发送窗口的大小
发送可用窗口字节之后字节的分类与窗口的变化
处理确认并滑动发送窗口
TCP滑动窗口协议的特点
TCP 使用发送与接收缓冲区,以及滑动窗口机制来控制TCP连接上的字节流传输
TCP 滑动窗口是面向字节的,他可以起到差错控制的作用
接收端可以在任何时候发送确认,窗口大小可以有接收端来根据需要增大或减少
发送窗口值可以小于接收窗口的值,不能超过接收窗口值
3,选择重传策略
报文段丢失造成接收字节流序号不连续:拉回方式与选择重传方式
拉回方式
从丢失的开始,把后面的不管是否丢失都再传一遍(效率很低)
选择重传方式(selective ACK,SACK)
只重传丢失的报文段
4,重传计时器
发送之后在一定时间内未收到确认,就准备重传该报文
5,超时重传时间的选择
当前最佳往返时间RTT值的估算
超时重传时间 应略大于加权计算出的RTTs估计值
1,TCP 窗口与流量控制
利用滑动窗口进行流量控制的过程
接收端根据接收能力发送一个接收窗口值给发送端
发送端根据接收窗口值的大小进行数据发送
a,当接收端应用进程从缓存中读取数据的速度快与数据到达的速度时,
接收端需要在每个确认中发送一个“非零的窗口”通知
b,当发送端速度快于接收端速度时,缓冲区将全部被占用,之后到达的字节将因缓冲区溢出而丢弃,
这时,接收端发出一个“零窗口”通知,发送端收到后停止发送数据,直到收到“非零的窗口”通知
利用滑动窗口进行流量控制举例。
详情见图6.24 TCP协议利用窗口进行流量控制的过程
坚持计时器
发送端收到“零窗口”通知后,启动计时器,一定时间后发送一个零窗口探测报文
防止因为非零窗口通知丢失而造成死锁
传输效率问题
2,TCP 窗口与拥塞控制
拥塞控制的基本概念
拥塞控制用于防止由于过多的报文进入网络而造成路由器与链路过载。
流量控制的重点:点-点 链路的通信量的局部控制上
通塞控制的重点:进入网络报文总量的全局控制上
造成网络拥塞的条件:对网络资源的需求 > 网络可用资源
拥塞控制算法通过动态地调价用户对网络资源的需求来保证网络系统的稳定运行
拥塞窗口的概念
TCP协议滑动窗口是实现拥塞控制最基本的手段
拥塞窗口(cwnd)是发送端根据网络拥塞情况确定的窗口值
实际发送的窗口值就是 接收窗口(rwnd)与拥塞窗口(cwnd)中最小的一个
3,慢开始与拥塞避免算法
慢开始
主机发送数据时,不了解网络负载状态,采用从小到大逐步增加拥塞窗口的方法
避免拥塞窗口(cwnd)增长过快,设定慢开始阈值(ssthresh)
拥塞避免算法
当cwnd > ssthres时,停止使用慢开始算法,使用拥塞控制算法
拥塞避免算法的改变每增加一个往返就将拥塞窗口值加倍的方法,而是采取每增加一个往返就将拥塞窗口值增加1
只要出现超时就将ssthresh 减少一半的算法叫做 “乘法减少”
在执行拥塞避免后,使拥塞窗口缓慢增大,以防止网络很快出现拥塞,算法为“加法增大”
两种方法结合起来就是 用于TCP拥塞控制的 AIMD算法
4,快重传与快恢复
快重传
接收端在按顺序接收时未接收到中间顺序报文,向发送端连续三次发出前一个顺序的报文重复确认
快恢复
a,当发送端收到第一个对M2的“重复确认”时,发送端立即将拥塞窗口(cwnd)设置为最大拥塞窗口值的1/2,
执行“拥塞避免”算法,拥塞窗口按线性方式增长
b,当发送端收到第二个对M2的“重复确认”时,发送端立即减小拥塞窗口(cwnd)值
执行“拥塞避免”算法,拥塞窗口按线性方式增长
c,当发送端收到第三个对M2的“重复确认”时,发送端立即减小拥塞窗口(cwnd)值
执行“拥塞避免”算法,拥塞窗口按线性方式增长
详情见
图6.27 快重传与快恢复的研究背景
图6.28 连续收到三个重复确认的拥塞控制过程
5,发送窗口的概念
实际的发送窗口的上限值等于 接收窗口(rwnd)与拥塞窗口(cwnd)中最小的一个
发送窗口上限值 = Min(rwnd,cwnd)
rwnd,cwnd中较小的一个限制发送端的报文发送速度
计算机网络的本质活动是实现分布在不同地理位置的联网主机之间的应用进程通信,
传输层的主要作用就是要实现分布式进程通信