传输层

传输层

传输层的基本服务

核心任务
应用进程 之间提供 端到端逻辑通信 服务

只有 主机 才有传输层

网络核心中的 中间系统 只用到 下三层 的功能

传输层功能

  1. 对应用层报文进行分段和重组
  2. 面向应用层实现复用与分解
  3. 实现端到端的流量控制
  4. 拥塞控制
  5. 传输层寻址
  6. 对报文进行差错检测
  7. 实现进程间的端到端可靠数据传输控制

小口诀
分复流拥寻差错-可靠

传输层寻址与端口

一台计算机中,不同应用进程用 进程标识符(进程ID) 来区分

全网 范围内利用 IP地址+端口号 唯一标识一个通信端点(套接字)

在传输层使用协议端口号,通常称为 端口(port)

传输层端口号为 16 位整数,可以编号65536个(2的16次方)

服务器端使用的端口号
熟知端口号和登记端口号

客户端使用的端口号
临时性,在客户进行运行时由操作系统随机选择取唯一的未被使用的端口号

常用端口
端口号小于256的端口

端口号类型 名称 端口号范围
服务器端口号 熟知端口号 0 - 1023
服务器端口号 登记端口号 1024 - 49151
客户端端口号 短暂端口号 49152 - 65535

无连接服务与面向连接服务

无连接服务
数据传输之前:无需 与接收端进行任何信息交换,直接构造传输层报文段并向接收端发送
类似于 信件通信

面向连接服务
数据传输之前:需要 双方交换一些控制信息,建立逻辑连接,然后再传输数据,传输结束后还需要拆除连接
类似于 电话通信

传输层的复用与分解

复用与分解

多路复用与多路分解(复用与分解/复用与分用)
支持众多 应用进程共用 同一个传输层协议,并能够将接收到的数据准确交付给 不同的应用进程

无连接的多路复用与多路分解

用户数据报协议(User Datagram Protocol, UDP):Internet提供 无连接服务 的传输层协议

UDP套接字二元组:<目的IP地址, 目的端口号>

面向连接的多路复用与多路分解

传输控制协议(Transmission Control Protocol, TCP): Internet提供 面向连接服务 的传输层协议

TCP套接字四元组:<源IP地址, 源端口号, 目的IP地址, 目的端口号>

停-等协议与滑动窗口协议

可靠数据传输基本原理

不可靠传输信道在数据传输中可能发生

  1. 比特差错:1001 - 1000
  2. 乱序:数据块1、2、5、6、3、4
  3. 数据丢失:数据块1、2、5

很多网络应用希望传输层提供 可靠的数据传输服务

基于不可靠传输信道在数据传输采取的措施

  1. 差错检测:利用编码实现数据包传输过程中的比特差错检测
  2. 确认:接收方向发送方反馈接收状态。ACK(肯定确认)、NAK(否定确认)
  3. 重传:发送方重新发送接收方没有正确接收的数据
  4. 序号:确保数据按序提交
  5. 计时器:解决数据丢包问题

停-等协议

自动重传请求协议(Automatic Repeat reQuest, ARQ)的典型

工作流程

  1. 发送数据,等待确认:发送方发送经过差错编码和编号的报文段,等待接收方确认
  2. 确认结果(ACK、NAK):接收方如果差错检测无误且序号正确,则接收报文段,并向发送方发送 ACK,否则丢弃报文段,并向发送方发送 NAK
  3. 处理结果(发送后续数据、重传数据):发送方如果收到 ACK,则继续发送后续报文段,否则重发刚刚发送的报文段

滑动窗口协议

流水线协议(管道协议):允许发送方在没有收到确认前连续发送多个分组

最典型的流水线协议:滑动窗口协议

发送窗口(Ws
发送方可以发送未被确认分组的最大数量

接收窗口(Wr
接收方可以缓存的正确到达的分组的最大数量

GBN协议

发送窗口 Ws \geq 1,接收窗口 Wr = 1

特点
发送端缓存能力高,可以在没有得到确认前发送多个分组。
接收端缓存能力很低,只能接收一个按序到达的分组,不能缓存未按序到达的分组

GBN发送方响应的3类事件

  1. 上层(应用层)调用
  2. 收到1个ACKn,GBN采用 累计确认 方式,即发送方收到ACKn时,表明接收方正确接收序号n以及序号小于n的所有分组
  3. 计时器超时,发送方(发生多个分组)只使用 一个 计时器

SR协议

发送窗口 Ws > 1,接收窗口 Wr > 1

特点
发送端缓存能力高
接收端缓存能力高

SR发送方响应事件

  1. 上层调用
  2. 计时器超时,发送方对 每个 分组进行计时
  3. 收到ACKn,SR协议采取 逐个 方式

用户数据报协议(UDP)

英文全称:User Datagram Protocol

Internet 传输层 协议,提供 无连接不可靠数据报 传输服务

特点

  1. 应用进程 容易控制,发送什么数据以及何时发送,但是会出现分组的丢失和重复
  2. 不用建立连接
  3. 无连接状态
  4. 首部开销小,只有8个字节(Byte)

结构

UDP数据报首部

4 个字段,每个字段长度都是 2 个字节,共 8 个字节,分别为:

名称 所占位数 含义
源端口号 16 UDP实现复用和分解
目的端口号 16 UDP实现复用和分解
长度 16 指示UDP报文段中的字节数(首部和数据的总和)
校验和 16 接收方使用来检测数据包是否出现差错

UDP数据报数据

应用层数据

UDP校验和

提供差错检测功能,用于检测UDP报文段从源到目的地传送过程中,其中的数据是否发生了改变

二进制:相加逢二进一

UDP校验和计算的规则

  1. 所有参与运算的内容按 16位二进制对齐求和
  2. 求和过程中遇到 溢出(即进位)都被 回卷(即进位与和的最低位再相加)
  3. 最后得到的和 取反码,就是UDP的校验和,填入UDP数据报头部的 校验和 字段

UDP校验和计算的内容

  1. UDP伪首部(仅用于计算):源IP地址、目的地IP地址、协议号、UDP长度
  2. UDP首部
  3. 应用数据

传输控制协议(TCP)

英文全称:Transmission Control Protocol

Internet 传输层 协议,提供 面向连接可靠有序字节流 传输服务

特点

  1. 应用进程 先建立连接
  2. 每一条TCP连接只有 两个 端点
  3. 可靠交付:无差错、不丢失、不重复、按序到达
  4. 全双工 通信
  5. 面向 字节流

:序列。应用程序和TCP的交互是一个个数据块,TCP把他们看作是无结构字节流

TCP报文段结构

名称 所占位数 含义
源端口号 16 复用和分解上层应用的数据
目的端口号 16 复用和分解上层应用的数据
序号 32 TCP的序号是对每个应用层数据的 每个字节 进行编码
确认序号 32 期望 从对方接收数据的字节序号,即该字号对应的字节尚未收到,用 ack_seq 标识
首部长度 4 指出TCP段的首部长度,以 4字节 为计算单位
保留长度 6 保留为今后使用,目前值为0
URG 1 标志位字段,取值为 0 或 1;紧急 URG = 1,紧急指针 字段有效,优先传送
ACK 1 标志位字段,取值为 0 或 1;确认 ACK = 1,确认序号 字段是否有效
PSH 1 标志位字段,取值为 0 或 1;推送 PSH = 1,尽快将报文段中的数据交付接收应用进程,不要等待缓存满了再交付
RST 1 标志位字段,取值为 0 或 1;复位 RST = 1,TCP连接出现严重错误,释放连接,再重新建立TCP连接
SYN 1 标志位字段,取值为 0 或 1;同步 SYN = 1,该TCP报文段是一个建立新连接请求控制段或者同意建立新连接的确认段
FIN 1 标志位字段,取值为 0 或 1;终止 FIN = 1,TCP报文段的发送端数据已经发送完毕,请求释放连接
接收窗口 16 向对方通告我方接收窗口的大小,实现TCP的流量控制
校验和 16 计算方法同 UDP 的校验和
紧急指针 16 在 URG = 1 是有效,指出在本TCP报文段中紧急数据共有多少个字节
选项 长度可变 最短为0字节,最长为40字节
填充 长度可变 补充 选项 字段的长度为 4 的整数倍数

固定首部
展位20字节,排除 选项长度 字段的其他首部字段

TCP首部长度的最长最短
最短20字节,最长为60字节(选项字段长度可变)

TCP连接管理

三次握手

第一次握手
客户端向服务器发送连接请求段:SYN = 1, seq = x

SYN = 1:建立连接请求的控制段
seq = x:标识传输的报文段第一个数据字节的序列号是x,此序号列代表整个报文段的序号

客户端进入 SYN_SEND (同步发送)

第二次握手
服务器发回确认报文段:SYN = 1, ACK = 1, seq = y, ack_seq = x + 1

SYN = 1:同意建立新连接的确认段
ACK = 1:确认序号字段有效
seq = y:服务器告诉客户端确认报文段的序列号是y
ack_seq = x + 1:表示已经收到序列号为x的报文段,准备接收序列号为x + 1 的报文段

服务器由 LISTEN 进入 SYNC_RECV(同步收到)

第三次握手
客户端对服务器的 同意连接报文段 进行确认:ACK = 1, seq = x + 1, ack_seq = y + 1

ACK = 1:确认序号字段有效
seq = x + 1:客户端此次的报文段的序列号是 x + 1
ack_seq = y + 1:客户端希望接收服务器序列号为 y + 1 的报文段

当客户端发送ACK时,客户端进入 ESTABLISHED 状态
当服务器接收ACK后,服务器进入 ESTABLISHED 状态

第三次握手,可携带数据

四次挥手

第一次挥手
客户端向服务器发送释放连接报文段:FIN = 1, seq = u

FIN = 1:客户端数据发送完毕,请求释放连接
seq = u:传输的第一个数据字节的序号是u

客户端状态由 ESTABLISTHED 进入 FIN_WAIT_1(终止等待1状态)

第二次挥手
服务器向客户发送确认段:ACK = 1, seq = v, ack_seq = u + 1

ACK = 1:确认序号字段有效
seq = v:服务器传输的数据序号是v
ack_seq = u + 1:服务器期望接收客户数据序号为u + 1

服务器状态由 ESTABLISTHED 进入 CLOSE_WAIT(关闭等待)
客户端收到ACK段后,由 FIN_WAIT_1 进入 FIN_WAIT_2

第三次挥手
服务器向客户端发送释放连接报文段:FIN = 1, ACK = 1, seq = v + 1, ack_seq = u + 1

FIN = 1:请求释放连接
ACK = 1:确认序号字段有效
seq = v + 1:表示自己传输的第一个数据字节的序号为v + 1
ack_seq = u + 1:服务器期望接收客户数据序号为u + 1

服务器状态由 CLOSE_WAIT 进入 LAST_ACK(最后确认状态)

第四次挥手
客户端向服务器发送确认段:ACK = 1, seq = u + 1, ack_seq = v + 1 + 1

ACK = 1:确认序号字段有效
seq = u + 1:表示客户端传输的数据的序号是u
ack_seq = v + 1 + 1:表示客户端期望接收服务器数据序号为v + 1 + 1

客户端状态由 FIN_WAIT_2 进入 TIME_WAIT,等待2MSL时间,进入 CLOSED 状态
服务器在收到最后一个ACK后,由 LAST_ACK 进入 CLOSED

TCP可靠数据传输

可靠
保证接收方应用进程从缓冲区读出的字节流与发送方发出的字节流是完全一样的,即:无差错不丢失不重复按序到达

最大报文段长度
英文全称:Maximum Segment Size, MSS,报文段中封装的 应用层数据 的最大长度

TCP实现可靠数据传输服务的工作机制

分段
应用层数据被 分割 成TCP认为最适合发送的数据块

序号
发送方对发送的数据包进行 编号,确保数据按序提交给接收方

一个字节占一个序号
TCP报文段的序号 就是报文段中第一个字节的序号

确认
接收方向发送方 反馈 接收状态,确认是否正确接收数据

TCP通常采用 累计确认

差错检测
利用差错编码实现数据包传输过程中的 比特差错检测 (甚至纠正)

重传
发送方 重新发送 接收方没有正确接收的数据,主要针对:三次重复确认计时器超时

三次重复确认
TCP发送方接收到对相同序号的3次重复ACK(四次确认 = 1次正常确认 + 3次重复确认),则说明被重复确认的报文段已丢失,这时候即便计时器没有超时,也会重发该报文段(快速重传)

计时器
在发送方引入单一计时器,解决 数据丢失 问题

计时器超时时间设置
TimeoutInerval = EstimatedRTT(抽样RTT的加权移动平均值) + 4 * DevRTT(偏差RTT)

TCP生成ACK的策略

第一种
具有所期望序号的报文段按序到达,所有在期望序号及以前的报文段都已被确认。TCP延迟 500ms 发送ACK
例如:接收方收到123,且返回对123的确认。此时,4来了。则接收方等待500ms,再返回ACK5

第二种
具有所期望序号的报文段按序到达,且另一个按序报文段在等待ACK传输。TCP接收方立即发送累计ACK,确认以上两个按序到达报文段
例如:接收方刚刚收到4,正准备返回ACK5时,此时5来了,则接收方返回ACK6

第三种
拥有序号大于期望序号的失序报文段到达。TCP接收方立即发送重复ACK,提示下一个期望接收字节的序号。
例如:接收方返回ACK5时,但是6到了。则接收方在空间足够的情况下会先缓存6,否则丢弃6,同时接收方返回三次重复的ACK5

第四种
收到一个报文段,部分或完全填充数据间隔
例如:接收方收到123,且返回对123的确认。后来又收到了56,这时4来了。则接收方返回ACK7

TCP流量控制

流量控制
协调发送方与接收方的数据发送与接收速度

在通信过程中,接收方设置报文段的 接收窗口 字段来将窗口大小通知给发送方

TCP拥塞控制

拥塞
太多的主机以太快的速度向网络中发送太多的数据,超出了网络处理能力,导致大量数据分组拥挤在中间设备队列中等待转发,网络性能 显著下降的现象

拥塞控制
通过合理调度、规范、调整向网络中发送数据的 主机数量发送速率数据量,以 避免 拥塞或 消除 已发生的拥塞

拥塞窗口
CongWin,发送方一次性可以发送几个分组

连接开始,CongWin = 1MSS
MSS:Maximum Segment Size,1个最大报文段长度

阈值
临界值

怎么算是报文段丢失

  1. 收到三次重复确认
  2. 计时器超时

计时器超时后的变化

新的阈值:为当前 拥塞窗口 的一半
新的拥塞窗口:直接调整 1MSS

调整好新的阈值和新的拥塞窗口后,使用 慢启动拥塞避免 算法增加拥塞窗口的大小

例子:
发送计时器超时,拥塞窗口为24MSS,阈值为16MSS

新的阈值:24MSS / 2 = 12MSS
新的拥塞窗口:1MSS

拥塞窗口变化:
慢启动阶段:1 - 2 - 4 - 8 - 12
拥塞避免结点:12 - 13 - 14 - x

拥塞预防策略

流量整形技术
规范主机向网络发送数据的流量

TCP拥塞控制的算法

慢启动
在TCP连接建立时,每经过1个RTT时间,拥塞窗口 增大一倍,慢启动阶段的阈值为 16MSS

拥塞避免
当拥塞窗口 大于等于 阈值时,每经过1个RTT,拥塞窗口的值 加1

快速重传
接收端收到3次重复确认,则推断被重复确认的报文段已经丢失,于是 立即发送被重复确认 的报文段

快速恢复
当发生3次重复确认时,网络拥塞程度不是很严重

阈值和拥塞窗口的调整方法:
拥塞窗口不再重新从慢启动阶段开始,而是直接从 新的阈值(当前拥塞窗口的一半) 开始,直接进入拥塞避免阶段

窗口调整的基本策略

英文名称:Additive Increase, Multiplicative Decrease, AIMD

网络未发生拥塞时,逐渐“加性”增大窗口

网络拥塞时,“乘性”减小窗口

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • 【计算机网络】传输层 传输层协议概述 传输层协议为运行在不同host上的进程提供了一种逻辑通信机制。使得端到端不需...
    666真666阅读 2,004评论 0 4
  • 第一节 传输层的基本服务 传输层功能 传输层的核心任务: 应用进程之间提供端到端的 逻辑通信服务回顾:只有主机才有...
    我只会吃饭阅读 951评论 0 1
  • 传输层提供的服务 传输层的功能 从通信和信息处理的角度看 ,传输层向它上面的应用层提供通信服务,它属于面向通信部分...
    CodeKing2017阅读 3,631评论 1 9
  • 1. 传输层概述 ​ 传输层的功能是提供进程和进程之间的==通信==,实现==复用和分用==,对收到的...
    Benjamin_Lee阅读 404评论 0 0
  • 传输层是主机才会有的层次 传输层的功能 传输层提供进程和进程之间的逻辑通信。而网络层是提供的主机与主机之间的逻辑通...
    coolxc阅读 501评论 0 0