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

# 第三章 传输层

630760a46851b36a77844e67e601f34a.png

![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.滑动窗口协议

f0966e67607781019599cd3f566e386a.png

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

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

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

0b3ae57a209c57098cad6cda45f1281d.png

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

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

1. UDP特点

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

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

无需建立连接

无连接状态

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

2. UDP数据报结构

aab4ed9bc3d8a0602813852aeafce421.png

![](./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首部、应用数据

a335fd861d545a15cf7a61ca773027d1.png

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

876031ba447cbdde150d2f9b0ae093ad.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

```

d5d35c81e1a037d916a55238faf49e7b.png

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

五,传输控制协议 (TCP)

1. TCP报文段结构

c66c760503ebffa91d86fc1b0a05dc1b.png

![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连接的过程

61aa6afaf45a0a6376f4fd769667ac2e.png

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

4018f880e36cf5a871a7e57bb8647e76.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连接拆除

b76f816f10fe9b4e5e6cf7ce038fe5b3.png

![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确认。

caa029c7a41f0a94d191df451da21827.png

![](./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>)

②, 窗口机制

edae1cbd5a07fefb606da59d396dc9e5.png

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

阈 值

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

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

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

edae1cbd5a07fefb606da59d396dc9e5.png

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

快速启动状态

d4c5f1a3d1674ab17aa26d34484f41f4.png

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

快速恢复

566972bed0d4227ff40172e4727380bb.png

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

e004951a55988697ecd82cd1b54f1e93.png

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

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页