# 第三章 传输层

![transport](./img/transport.png)

一,传输层的基本服务

1. 传输层功能

传输层的核心人物是为<font color = 'red'>应用进程之间提供端到端</font>的逻辑通信服务。只有主机才有传输层;网络核心中的路由器点等只用到下三层的功能。

1. 传输层寻址

2. 对应用层报文进行分段和重组

3. 对报文进行差错检测

4. 实现进程间的端到端

5. 面向应用层实现复用与分解

6. 实现端到端的流量控制

7. 拥塞控制

2. 传输层寻址与端口

TCP/IP体系结构网络的解决方法就是在传输层使用协议端口号,通常简称为端口(port),在在全网范围内利用<font color='red'>“IP 地址+端口号”</font>唯一标识一个通信端点!

应用层和传输层抽象的需要端口是<font color='red'>软件端口</font>

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

|0--1023|熟知端口号||

|:---:|:---:|:---:|

|1024-49151|登记端口号|

|49152-65534|客户端口号,或短暂端口号)|

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

传输层端口号:

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

例如FTP服务器默认端口号21,HTTP服务器默认端口号是80等;

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

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

|无连接服务|面向连接服务|

|:---:|:---:|

|数据传输之前无需与对端进行任何信息交换,直接构造传输层报文段并向接受端发送|在数据传输之前,需要双方交换一些控制信息,建立逻辑连接,然后再传输数据,传输结束后还需要拆除连接|

|类似于信件通信|类似于电话通信|

二,传输层的复用与分解

1. 复用与分解

支持从多应用进程共用同一个传输层协议,并能够将接收到的数据准确交付给不同的应用进程,是传输层需要实现的一项基本功能,称为传输层的多路复用与多路分解,简称为复用与分解,也称为为复用与分用。

<font color='red'>多路复用:</font>在源主机,传输层协议从不同的套接字收集应用进程发送的数据块,并为每个数据块封装上首部信息(包括用于分解的信息)构成报文段,然后将报文段传递给网络层。

<font color='red'>多路分解:</font>在接收端,传输层协议读取报文段中的这些字段,标识出接收套接字,进而通过该套接字,将传输层的报文段中的数据交付给正确的套接字。

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

Internet传输层提供无连接服务的传输层协议是UDP.

UDP将应用层的数据块封装成一个UDP报文段,其中包括应用数据,源端口号,目的端口号等。

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

如果目的端口号一样

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

Internet传输层提供面向连接服务的是TCP。

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

如果源IP地址不一样,但是目的IP地址和目的端口号都一样?

|UDP|TCP|

|:---:|:---:|

|基于目的IP地址和目的端口号二元组唯一标识一个UDP套接字|基于源IP地址、目的IP地址、源端口号、目的端口号四元组唯一标识一个TCP套接字|

三, 停-等需要与滑动窗口协议

1. 可靠数据传输基本原理

基于不可靠信道实现可靠数据传输采取的五种措施:

<font color='red'>差错检测:</font>利用差错编码实现数据包传输过程中的比特差错检测。

<font color='red'>确认:</font>接收方向发送方反馈接收状态。ACK(肯定确认);NAK(否定确认)

<font color='red'>重传:</font>发送方重新发送接收方没有正确接收的数据。

<font color='red'>序号:</font>确保数据按序提交。

<font color='red'>计时器:</font>解决数据丢失问题。

2. 停-等协议

停-等协议工作流程

3.滑动窗口协议

![win](./img/win.png)

1)GBN协议(Go-Back-N):发送窗口较大,但接受窗口仅为1。未按序到达的数据都需要重传

2)SR协议(Selective Repeat):接收窗口大于1,仅要求发送方重传被接收方确认的分组

![win_gbn_sr](./img/win_gbn_sr.png)

四,用户数据报协议(UDP)

1. UDP特点

1、用户数据协议(UDP),Ineternet传输层协议,提供无连接、不可靠、数据报尽力传输服务。

应用进程更容易控制发送什么数据以及何时发送。实时网络多媒体应用,通常要求端到端吞吐量大于等于某个最小发送速率,不希望过分地延迟报文段的传送,且能容忍一些数据丢失,UDP则适合这类应用。故会出现分组的丢失和重复。

无需建立连接

无连接状态

首部开销小,只有8个字节。

2. UDP数据报结构

![](./img/udp_data_top.png)

1、UDP首部四个字段:每个字段长度都是2个字节。

源端口号和目的端口号:用于UDP实现复用和分解

长度:只是UDP报文段中的字节数(首部和数据的总和)。

校验和:接收方使用来检测报文段是否出现差错

3. UDP校验和

UDP校验和:提供了差错检测功能。

UDP的校验和用于检测UDP报文段从源到目的地传送过程中,其中的数据是否发生了改变(由于链路噪声干扰等引起)。

UDP校验和计算规则:

1、所有参与运算的内容(包括UDP报文段)按<font color = 'red'>16位对齐求和。</font>

2、求和过程中遇到任何<font color = 'red'>溢出</font>(即进位)都被<font color = 'red'>回卷</font>(即进位与和的最低为再加),最后得到的<font color = 'red'>和取反码</font>,就是UDP的校验和,填入UDP数据报的<font color = 'red'>校验和字段。</font>

3、UDP在生成校验和时,校验和字段全取0。

UDP校验和计算的内容包括3部分:UDP伪首部、UDP首部、应用数据

![](./img/udp_top_data_check.png)

![](./img/udp_top_struct.png)

<font color = 'red'>源IP地址、目的IP地址、协议号:</font>均是封装对应UDP数据报的IP分组的对应字段;

UDP长度字段:是该UDP数据报的字段,该字段参与计算两次。

对于UDP来说,协议号的值为17。

UDP计算校验和示例:

```

数值1:0110 0110 0110 0000

数值2:0101 0101 0101 0101

数值3:1000 1111 0000 1100

```

第一步 数值1加数值2

```

0110 0110 0110 0000

0101 0101 0101 0101

-------------------

1011 1011 1011 0101

```

第二步再加数值3

```

1011 1011 1011 0101

1000 1111 0000 1100

-------------------

1 0100 1010 1100 0001

=========================

0100 1010 1100 0001

1

-------------------

0100 1010 1100 0010

```

![](./img/udp_check_data_top.png)

五,传输控制协议 (TCP)

1. TCP报文段结构

![tcp_data_struct](./img/tcp_data_struct.png)

①、传输控制协议(TCP)是Internet一个重要的传输层协议。提供面向连接、可靠、有序、字节流传输服务。

第一、应用进程好似在”打电话“要先建立连接。

第二、每一条TCP连接只有两个端点。

第三、可靠交付。无差错,不丢失,不重复且按序到达

第四、全双工通信。

第五、面向字节流。流:字节序列。应用程序和TCP的交互是一个个数据块,但是TCP把他们看做是无结构字节流。

②, MSS数据长度说明

应用层数据块进行封装成为TCP报文段,最大报文段长度(Maximum Segment Size,MSS)是报文段中封装的应用层数据的最大长度。

TCP是面向字节流的

③, TCP报文段结构说明

1、源端口号字段,目的端口号字段分别占16位。多路复用/分解来自或送到上层应用的数据。

2、序号字段、确认序号字段分别占32位。范围[0,$2^{32-1}$]

序号字段:TCP的序号是对每个应用层数据的<font color='red'>每个字节</font>进行编号,

确认序号字段:是<font color='red'>期望</font>从对方接收数据的字节序号,即该序号对应的字节尚未收到。

3、首部长度字段占4位。指出TCP段的首部长度,以4字节为计算单位。

最短是20字节;最长是60字节。

4、保留字段占6位。保留为今后使用,目前值为0

<font color='red'>

5、URG、ACK、PSH、RST、SYN、FIN各占1位。

</font>

紧急URG=1,紧急指针字段有效,优先传送。

确认ACK=1,确认序号字段有效;ACK=0时,确认序号字段无效。

推送PSH=1,尽快将报文段中的数据交付接收应用进程,不要等缓存满了再交付。

复位RST=1,TCP连接出现严重差错,释放连接,再重新建立TCP连接。

同步SYN=1,该TCP报文段是一个建立新连接请求控制段或者同意建立新连接的确认段。

终止FIN=1,TCP报文段的发送端数据已经发送完毕,请求释放连接。

6、接收窗口字段占16位。向对方通告我方接收窗口的大小。

例如:发送一个确认号701,窗口字段是1000。

7、校验和字段占16位。

校验和字段检验的范围类似于UDP,

计算方法与UDP校验和的计算方法相同。TCP协议号是6。

8、紧急指针字段占16位。

URG=1时,才有效。指出在本TCP报文段中紧急数据共有多少个字节。

9、选项字段长度可变。最长为40字节。

<font color='red'>

最大报文段长度MSS:每一个TCP报文段中数据字段的最大长度。

</font>

10、填充字段,取值全为0,目的是为了整个首部长度是4字节的整倍数。

2. TCP连接管理

TCP连接的过程

![](./img/tcp_client_connect_send_syn_ack.png)

![](./img/tcp_client_connect_send_recv.png)

1、TCP连接管理:连接建立与连接拆除。

2、TCP建立连接通过“三次握手”过程。

以主机A上的一个应用进程与主机B上的一个应用进程建立一条TCP连接为例。(主机A的应用进程首先会通知主机A的TCP,它想建立一个与主机B上某个进程之间的连接。)

① TCP连接建立:

<font color='blue'>第一次握手:</font>主机A向主机B发送连接请求段,SYN报文段:(SYN=1,seq=x)

SYN=1:建立连接请求控制段

seq=x:表示传输的报文段的第1个数据字节的序列号是x,并以此序列号代表整个报文段的序号

<font color='red'>客户端进入SYN_SEND(同步发送)</font>

<font color='blue'>第二次握手:</font>主机B收到TCP连接请求段后,如同意,则发回确认报文段:

(SYN=1,ACK=1,seq=y,ack_seq=x+1)

SYN=1:同意建立新连接的确认段

ack_seq=x+1:表示已经收到了序列号为x的报文段,准备接收序列号为x+1的报文段。

seq=y:B告诉A确认报文段的第1个数据字节的序列号是y。

<font color='red'>服务器由LISTEN进入SYN_RCVD(同步收到)</font>

<font color='blue'>第三次握手:</font>主机A对主机B的同意连接报文段进行确认:(ACK=1,seq=x+1,ack_seq=y+1)

seq=x+1:A传输的报文段的第一个数据字节的序列号是x+1

ack_seq=y+1:A期望接收B序列号为y+1的报文段。

<font color='red'>当客户发送ACK时,客户端进入ESTABLISHED状态;

当服务收到ACK后,也进入ESTABLISHED状态;</font>

只有<font color='red'>第三次</font>握手可携带数据。

② TCP连接拆除

![tcp_client_fin_wait_close_2msl](./img/tcp_client_fin_wait_close_2msl.png)

<font color='blue'>第一次挥手:</font>主机A向主机B发送释放连接报文段:(FIN=1,seq=u)

首部的FIN=1:TCP报文段的发送端数据发送完毕,请求释放连接。

序号seq=u:表示传输的第一个数据字字节的序号是u

<font color='red'>客户端状态由ESTABLISHED进入FIN_WAIT_1(终止等待1状态)</font>

<font color='blue'>第二次挥手:</font>主机B向主机A发送确认段:(ACK=1,seq=v,ack_seq=u+1)

ACK=1:标识确认字号段有效。

确认序号ack_seq=u+1:表示主机B期望接收A数据包序号为u+1的包

序号seq=v:表示自己传输的第一个数据字字节的序号是v

<font color='red'>服务器状态由ESTABLISHED进入CLOSE_WAIT(关闭等待)

客户端收到ACK段后,由FIN_WAIT_1进入FIN_WAIT_2</font>

<font color='blue'>第三次挥手:</font>主机B向主机A发送释放连接报文段:(FIN=1,ACK=1,seq=w,ack_seq=u+1)

FIN=1:请求释放连接

ACK=1:标识确认字号段有效。

确认序号ack_seq=u+1:表示主机B期望接收A数据包序号为u+1的包

序号seq=w:表示自己传输的第一个数据字字节的序号是w

<font color='red'>服务器状态由CLOSE_WAIT进入LAST_ACK(最后确认状态)</font>

<font color='blue'>第四次挥手:</font>主机A向主机B发送确认段:(ACK=1,seq=u+1,ack_seq=w+1)

ACK=1:标识确认字号段有效。

确认序号ack_seq=w+1:表示主机A期望接收B数据包序号为w+1的包

序号seq=u+1:表示自己传输的第一个数据字字节的序号是u+1

<font color='red'>客户端状态由FIN_WAIT_2进入TIME_WAIT,等待2MSL时间,进入CLOSED状态,释放连接

服务器在收到最后一次ACK段后,由LAST_ACK进入CLOSED,释放连接</font>

3. TCP可靠数据传输

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

1)应用数据被分割成TCP认为<font color='red'>最适合发送的数据块。</font>

2)TCP发出一个段后,启动一个<font color='red'>计时器</font>,等待目的端确认收到这个报文段。

3)TCP首部中设有<font color='red'>校验和字段</font>,用于检测数据在传输过程中是否发生差错。

4)TCP报文段的到达也可能会失序。如果必要,TCP会<font color='red'>重新排序</font>。

5)存在网络延迟和重传机制,接收端可能会收到多个重复的报文段,这时接收端需要根据序号把<font color='red'>重复的报文段丢弃</font>。

6)TCP能够提供<font color='red'>流量控制</font>。

② 发送方的上层应用程序接收数据、定时器超时、收到ACK都会引发发送和重传。

1、上层应用程序接收数据

发送窗口是否已满,缓存;

发送窗口是否未满,则TCP从应用程序接收数据。并封装交给IP,启动定时器。

<font color='red'>2、定时器超时时间设置合理。

定时器超时和RTT的关系</font>

3、收到ACK

③,定时器超时时间设置:

估计一个典型RTT,指数加权移动平均的方法来计算一个SampleRTT的时间:

α指数加权系数,典型值是0.125

EstimatedRTT=(1-α)·EstimatedRTT+ α·SampleRTT

RTT变化剧烈,网络不稳定;RTT变化小,网络平稳;

定义RTT的偏差DevRTT表示RTT变化程度:加权系数β的推荐值是0.25

DevRTT=(1- β) ·DevRTT+ β ·|SampleRTT-EstimatedRTT|

定时器的超时时间:4

TimeoutInerval=EstimatedRTT+4×DevRTT

定时器超时时间设置:

一般TimeoutInerval初始值为1s。当出现超时,TimeoutInerval值加倍。

一旦报文段收到更新EstimatedRTT,TimeoutInerval就又通过上述三个公式更新计算。

发送方的上层应用程序接收数据、定时器超时、收到ACK都会引发发送和重传。

1、上层应用程序接收数据

发送窗口是否已满,缓存;

发送窗口是否未满,则TCP从应用程序接收数据。并封装交给IP,启动定时器。

2、定时器超时时间设置合理。

定时器超时和RTT的关系

3、收到ACK

下三页PPT是TCP发送数据,确认以及重传的典型例子

④ , TCP在实现中关于定时器超时时间的设置策略:

1、每当超时,就会重发最小序号还未被确认的报文段。每次重传,将下一次超时时隔设置为与原来的两倍。

2、每当TCP因收到上层应用数据或收到ACK两个事件之一启动计时器,超时时间需要用EstimatedRTT、DevRTT计算得到。

如果超时时间较长时,存在一定问题。如果某一报文段丢失,发送方会收到多个重复ACK。

⑤, TCP接收方生成ACK的策略主要有4种:

1)具有所期望序号的报文段按序到达,所有在期望序号及以前的报文段都已被确认。

2)具有所期望序号的报文段按序到达,且另一个按序报文段在等待ACK传输,TCP接收方立即发送单个累积ACK,以确认以上两个按序到达的报文段。

3)拥有序号大于期望序号的失序报文段到达,TCP接收方立即发送重复ACK,即对当前接收窗口基序号进行确认,指示下一个期待接收字节的序号。

4)收到一个报文段,部分或完全填充接收数据间隔(缺失)。

TCP在实现中关于定时器超时时间的设置策略:

每当超时,就会重发最小序号还未被确认的报文段。每次重传,将会把下一次超时时隔设置为原来的两倍。超时时间较长时,报文段丢失,发送方会等待很长的时

间才去重传。增加了时延,降低有效吞吐量。在这种接收方生成ACK的策略下,发送方会收到多个对同一个序号的多次ACK确认。

![](./img/tcp_trsanters.png)

可以根据重复ACK的情况,判断报文段是否丢失。

TCP发送方接收到<font color='red'>对相同序号的3次重复ACK</font>,就说明被重复确认的报文段<font color='red'>已丢失</font>,这时候即便没有超时,也会<font color='red'>重发</font>该报文段。

3,TCP流量控制

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

基于滑动窗口协议实现流量控制时,<font color='red'>发送窗口的大小</font>反映了接收方接收和处理数据的能力。

4, TCP拥塞控制

①, 拥塞控制的定义:

通过合理调度、规范、调整向网络中发送数据的<font color ='red'>主机数量、发送速率、数据量</font>,以避免拥塞的发生 ,就称为(<font color ='red'>拥塞控制</font>)

②, 窗口机制

![](./img/tcp_win_mss_rtt.png)

阈 值

阈值之后的阶段我们称之为<font color='red'>拥塞避免阶段</font>

拥塞避免阶段每隔1RTT,拥塞窗口大小增加1

拥塞避免阶段每隔RTT,拥塞窗口大小增加1。

![](./img/tcp_mss_win_rtt_add.png)

快速启动状态

![](./img/tcp_win_recv_ack_win.png)

快速恢复

![](./img/tcp_timer_win.png)

![](./img/tcp_win_control.png)

传输层端口号的范围是多少?被分为哪两部分_第三章, 传输层相关推荐

  1. 传输层端口号的范围是多少?被分为哪两部分_Cu2ZnSnS4纳米晶做空穴传输层经配体改性将低温可喷涂碳电极基钙钛矿太阳能电池的性能提高到17.71...

    创新点 1.短链有机配体代替长链油胺可促进CZTS纳米粒子的电荷传输.本文证明了,己硫醇修饰的CZTS纳米颗粒表现出优异的电荷传输性能,使得CZTS纳米颗粒具有更好的空穴提取能力. 2.采用FAPbI ...

  2. 传输层端口号的范围是多少?被分为哪两部分_青岛家用电器检测费用多少

    青岛家用电器检测费用多少 施工分层检测按照不同原料和分施工的层次,分为打磨,筛孔,腻子层,腻子粉层. ( 因此,墙体检测不是办理房屋所有权证前的必备程序,不能开工,可办理房屋所有权登记证.如果是预售房 ...

  3. 传输层端口号的范围是多少?被分为哪两部分_根据资金习性可以把资金分为哪几类?_中级会计职称考试视频...

    根据资金习性可以把资金分为哪几类?资金习性预测法,是指根据资金习性预测未来资金需要量的一种方法.所谓资金习性,是指资金的变动同产销量变动之间的依存关系.按照资金同产销量之间的依存关系,可以把资金区分为 ...

  4. 传输层端口号的范围是多少?被分为哪两部分_6.传输层协议

    前言 传输层定义了主机应用程序之间端到端的连通性.传输层中最为常见的两个协议分别是传输控制协议TCP ( Transmission Control Protocol )和用户数据包协议UDP ( Us ...

  5. 《计算机网络 自顶向下》第三章==传输层==随堂笔记

    文章目录 第三章 传输层 3.1 传输层概述 传输层提供什么服务? 传输层协议 3.2 多路复用和解复用 多路复用 解复用 3.3 UDP(User Datagram Protocol) 3.4 可靠 ...

  6. [计算机网络]第三章——传输层

    文章目录 [计算机网络]第三章--传输层 3.1 概述和传输层服务 传输层概述 3.2 多路复用与多路分解 无连接的多路复用与多路分解 有连接的多路复用与多路分解 3.3 UDP|User Datag ...

  7. Windows下修改redis端口号的方法及修改后redis的两种启动方式

    1.win+R输入cmd,然后打开Redis所在的文件路径,并输入redis-server.exe启动Redis. 如图我们可以看到现在的端口号为6379,也就是redis的默认端口号.我们可以记住这 ...

  8. CN笔记:第三章 链路层

    目录 第三章 数据链路层 3.1 任务 3.2 封装成帧 3.3 透明传输 3.4 差错检测 3.5 PPP协议 3.6 HDLC 协议 3.7 局域网/以太网 3.8 MAC子层和LLC子层 3.9 ...

  9. AMBA5 AHB协议规范(AHB5,AHB-Lite)中文版-第三章 传输

    第三章 Transfers 本章描述读写传输.它包括以下部分: – 基本传输 on page 3-28. – 传输类型 on page 3-30. – 锁定传输 on page 3-32. – 传输大 ...

最新文章

  1. 2022年科学突破奖,9人共获奖金1500万美元,mRNA 新冠疫苗2位奠基人获奖
  2. [性能优化]UITableView性能优化的一点感悟及计算UILabel高度的新方法
  3. 用C语言实现三子棋游戏
  4. 注水法比特功率分配介绍及MATLAB实现
  5. Ubuntu彻底删除MySQL重装MySQL
  6. 变电站通信网络与系统-特定通信服务映射(SCSM)
  7. 剑指offer七:两个链表的第一个公共结点
  8. 机器人学导论 二、正运动学,MDH法
  9. 单片机c语言论文,基于51单片机的C语言程序设计论文.doc
  10. 全网最全 Chrome浏览器插件推荐大全 持续更新中
  11. proteus仿真常见报错信息
  12. python里冒号什么意思_在Python中冒号等于(:=)是什么意思?
  13. 分别用Java应用程序和Applet程序实现星星三角形图案的绘制
  14. Tapestry的使用
  15. 用vue2写的开发者在线简历导出
  16. jsp程序设计(一)-jsp入门
  17. 自研数据库CynosDB存储系统如何实现即时恢复
  18. 【Python】利用tkinter开发测手速小游戏
  19. ElasticSearch入门:使用ES来实现模糊查询功能
  20. 金蝶EAS 客户端查询分析器 geninsert 用法

热门文章

  1. 【Elasticsearch】es 一个数据精度引发的血案
  2. 【Elasticsearch】 Full text queries query_string 等 字符串查询
  3. 【nginx】nginx 反向代理 指令说明
  4. 【Linux】linux grep过滤中,不包含某些字符串
  5. 一次List对象去重失败,引发对Java8中distinct()的思考
  6. Java优雅的记录日志:log4j实战篇
  7. 【2019.09.14】2019icpc沈阳网络赛
  8. vue中的 $children 和 $parent
  9. overflow+文档流
  10. [数据库笔记]规范化(Normalization)-把数据冗余降下来