6-传输层
来源:互联网 发布:maven编译java命令 编辑:程序博客网 时间:2024/05/22 03:46
6-传输层
6.1 传输层概述
6.1.1 传输层功能
完成主机进程-主机进程之间的报文传输。
6.1.2 传输层地位
位于网络体系结构的中间, 作为数据通信和数据处理的分水岭, 具有承上启下的作用。
6.1.3 传输层作用
传输层要彻底解决网络通信问题, 使得应用层不必关心通信问题
6.1.4 传输层是真正的端对端的通信
- 传输层协议在端主机上运行,路由器一般没有传输层。
- 传输层从主机层面上对网络层采取相应补救措施,可以提供更高质量的数据传输能力。
- 传输层独立于网络设备,可以提供标准的传输服务接口(原语)。
6.1.5 传输层协议涉及的内容
- 寻址: 传输地址及其发现。
- 差错控制: 分组顺序、差错检测、重传确认机制等。
- 连接管理: 连接建立、连接释放。
- 流量控制: 主机进程之间的流量控制。
6.2 传输服务质量
6.2.1 传输服务质量反映网络最终通信质量
6.2.2 传输服务质量参数
连接建立延迟:发出连接请求到连接建立成功之间的时间。
连接建立失败概率
吞吐量:在一条传输连接上,每秒传输有效数据的字节数。
传输延迟:从开始传输数据到该数据被收到为止的 时间。
残留差错率:传输连接上数据出错的概率。
保护性:传输过程中保障数据安全的能力,包括防止非法窃取、篡改数据等。
优先权:保证高优先权的传输连接优先传输数据、优先获得网络资源的能力。
回弹率:由于某种原因而自发终止传输连接的可能性。
6.3 传输层协议机制
6.3.1 传输协议数据单元
传输协议数据单元(TPDU) 是传输层的最小数据传输单位, 又称为“报文段” 。
TPDU类型
- CR:连接请求
- CC:连接确认, 对CR TPDU的确认
- DR:断连请求
- DC: 断连确认, 对DR TPDU的确认
- DT:数据( 高层数据)
- AK:数据确认, 对DT TPDU的确认
- REJ:拒绝接受请求, 或拒绝接受DT TPDU
6.3.2 传输地址
传输地址唯一地标识主机进程
传输地址=网络号+主机号+端口号, 端口号即传输服务访问点( TSAP), 用来标识应用进程。
在IP网络, 传输地址= IP地址+端口号
6.3.3 传输连接
传输连接实质
传输连接实质上是通过传输地址,建立两个主机进程之间的连接 。
三次握手
其他层上的连接一般采用“两次握手” , 建立传输连接过程比较复杂, 双方需进行反复协商, 通常采用“三次握手” , 其原因是:
建立传输连接过程
释放传输连接
6.4 TCP协议
6.4.1 TCP 概述
Internet的两个传输层协议
- TCP( Transmission Control Protocol) :在IP支持下, 为应用层提供面向连接的、 可靠的端到端字节流服务。
- UDP( User Datagram Protocol) :为应用层提供非面向连接的、 不可靠的传输服务。
TCP传输地址( 套接字) : IP地址+端口号
- TCP连接用四元组<源IP地址, 源端口号, 目的IP地址, 目的端口号>表示。
- 端口号16位, 端口号范围: 0 - 65535 ; 其中0-1023称为著名端口号,分配标准服务使用, 如FTP服务器端口号为21, HTTP服务器端口号80,TELNET服务器端口号为23, SMTP服务器端口号为25。
TCP发展
TCP最初在Unix环境下实现, 后来也在Windows环境下实现, 通过Socket提供服务, 见P.261。
数据帧格式
TCP提供的服务
TCP提供全双工数据传输服务, 如果主机进程A和主机进程B建立了一条传输链路, 则意味着A, B都可以同时发送和接收TCP报文段。
TCP不支持组播和广播。
TCP连接提供可靠的字节流服务
如果发送了4个有效载荷为512B的报文段, 接收方收到后, 向应用层提供2048B的字节流, 而不是4个报文段。 这是因为TCP是真正的端到端通信, 接收端无需再转发。
6.4.2 TCP报文段格式
源/目的端口号
各占16位, 表示发送方和接收方的端口号。
顺序号
32位, 表示TCP段中的数据部分第1个字节的编号。
确认号
32位, 表示期望接收数据的第1个字节的编号, 同时表示对确认号之前数据的确认。
数据偏移
4位, 表示TCP段头长度, 包括固定和可变部分, 单位为字( 32位)
URG
紧急数据标志。 当有紧急数据时, 该标志为“ 1”。
ACK
该标志若为“ 1”, 则表示确认号有效;若为“ 0”, 则确认号无效。
PSH
表示要求马上发送数据, 不必等到缓冲区满时才发送。例如, TELNET协议中, 每输入一个字符就必须立即发送。
RST
该标志用于对本次TCP连接进行复位。 通常在TCP连接发生故障时设置本位,以便双方重新同步,并初始化某些连接变量。 如接收方收到它不希望接收的报文段, 则将RST置“ 1 “。
SYN:用于建立TCP连接
- SYN置为“ 1” 且ACK置为“ 0” ,表示请求建立TCP连接
- SYN置为“ 1” 且ACK置为“ 1” ,表示确认TCP连接。
FIN
用于释放连接。 若FIN置为“ 1” , 则表示没有数据要发送了, 但仍可以接收数据。
窗口大小
16位, 用于TCP流量控制。 表示从确认的字节号开始还可以接收多少字节。 窗口大小也允许为“ 0” , 表示确认号以前的字
节已收到, 但暂停接收数据。
校验和
用于对TCP报文段进行校验( 类似于IP校验和) , 但校验范围包括头部和数据部分。 计算校验和需包括一个TCP伪头, 这样有助于检测分组是否被错误递交。
紧急指针
当URG为“ 1” 时, 紧急指针给出TCP段中紧急数据的长度,单位为字节;数据字段的起始位置( 顺序号) 作为紧急数据的开始位置。
选项
目前TCP只规定一种选项, 即最大的TCP段长( MSS) , 缺省值是556B。 TCP实体双方可通过协商确定一个特定的最大TCP段长。
若MSS选的太小, 则由于帧头和报头开销而网络利用率会降低;
若MSS选的太大, 则由于IP层分段而增加额外开销。 一般认为,MSS应尽可能选大些, 只要IP层不需要分段就行
填充
以0为填充位, 确保TCP头部以32位边界结束。
数据
TCP载荷数据, 由于IP分组长度限制, TCP最大载荷长度=65535B-20B-20B=65495B。
6.4.3 TCP连接管理
建立TCP连接的目的
- 发现对方是否存在
- 进行参数协商( 协议类、 MSS、 窗口大小、 服务质量等)
- 为TCP实体分配资源( 缓冲区、 连接表等)
TCP连接建立
TCP连接释放:仍采用”三次握手”
6.4.4 TCP流量管理
为什么要进行流量控制
发送方TCP实体发送数据过快, 接收方TCP实体来不及处理, 导致接收缓冲区溢出
TCP流量控制采用可变尺寸的滑动窗口协议
- 由于TCP为应用层提供字节流服务, 窗口尺寸以字节为单位。
- 应用进程根据处理能力读取TCP接收缓冲区中的字节流, 导致空闲的接收缓冲区( 接收窗口) 动态变化
TCP流量控制过程
类似于数据链路层的滑动窗口协议, 所不同的是:通过接收窗口当前尺寸调整发送窗口的上限值
6.4.5 TCP拥塞控制
TCP拥塞控制与流量控制的区别
- 拥塞控制是为了防止网络过载导致路由器缓冲区不足而造成IP分组的丢失
- 流量控制是为了防止发送端发送速度过快, 导致接收端缓冲区不足而造成TCP段的丢失
为什么不用网络层控制
从理论上讲, 网络过载( 即网络拥塞) 问题应由网络层( IP) 解决但IP没有实现拥塞控制功能, Internet拥塞控制实际上由TCP完成。
TCP拥塞控制策略
- 发送端设置拥塞窗口来反映网络容量, 通过拥塞窗口来限制发送方向网络注入数据的速度, 即发送端允许发送的数据既不能超过接收窗口的大小, 也不能超过拥塞窗口的大小; 前者是为了流量控制, 后者是为了拥塞控制。
- 通过慢启动和拥塞避免策略来控制拥塞窗口的大小。
TCP 拥塞控制过程
6.5 UDP协议
6.5.1 UDP概述
UDP是非面向连接, 不可靠的传输协议。
- 不需要建立连接。
- 不支持流量控制和拥塞控制。
- UDP段在传输过程中可能会丢失、 失序和延迟。
- 支持广播和组播, 这对多媒体传输是非常有用的
6.5.2 UDP实质
UDP实质上在IP基础上, 增加了端口机制, 实现了主机进程间的数据传输
6.5.3 UDP报文段
6.5.4 UDP校验和
UDP计算“校验和” 方法同TCP, 也需要包括一个UDP伪头;一旦发现出错, 则简单地丢弃, “重传” 由应用层完成。
6.5.5 UDP 原则
UDP采用尽力而为方式, 即不保证可靠传输, 既没有重传机制, 也没有流量控制和拥塞控制, 因此主机不需要维护具有许多参数、 复杂的连接状态表, 因此减少了开销和发送数据之前的延时, 适合很多实时应用, 如IP电话、 视频会议等。
- 6-传输层
- 第6章 传输层
- 第6章 传输层
- 传输层
- 传输层
- 传输层
- 传输层
- 传输层
- 传输层
- 传输层
- 传输层
- 传输层
- 传输层
- 传输层
- 读书笔记:计算机网路6章:传输层
- 《计算机网络》第6章 传输层
- 传输层概述以及传输层端口
- 传输层概述以及传输层端口
- 3-数据通信基础与物理层
- 标签的全选和反选
- 4-数据链路层
- 5-网络层
- Eclipse常用开发插件
- 6-传输层
- LintCode - 175.翻转二叉树
- 7-应用层
- 8-局域网(LAN)
- Unity输入系统
- 标签切换
- 1223
- 小白笔记-----------------------leetcode(8. String to Integer (atoi) )
- 9-网络安全