计算机网络(运输层)

news/2024/5/18 14:41:28 标签: 网络协议, 网络, tcpip, udp, 网络通信

运输层

1.运输层协议概述

在这里插入图片描述
IP层中真正进行通信的实体是在主机中的进程,IP协议虽然将分组发送到目的主机,但是这个分组停留在主机的网络层而没有交付主机的应用进程。从运输层来看,通信的真正端点是主机中的进程。一个主机中经常有多个应用进程同时分别和另一台主机中的多个应用进程通信。表明运输层具有复用和分用的功能,服用时在发送方不同的应用进程都可以使用同一运输层协议传送数据,分用指接收方的运输层在剥离豹纹的首部后能够将这些数据正确交付目的应用进程。
网络层为主机间提供逻辑通信,运输层为应用进程之间提供端到端的逻辑通信。
在这里插入图片描述
运输层为高层用户屏蔽下面网络核心的细节,使得应用进程看见的是在两个运输层实体之间有一条端到端的逻辑通信通道。
2、两个重要协议
TCP(传输控制协议)、UDP(用户数据包协议报)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、运输层端口
复用:应用层所有的应用进程都可以通过运输层再传送给IP层(网络层)
分用:运输层从IPC层收到发送给各应用进程的数据后,必须分别交付指明的各应用进程。
在这里插入图片描述
(1)服务器端使用的端口号
在这里插入图片描述
(2)客户端使用的端口号
49152-65535,这类端口号尽在客户进程运行时才动态选择,称为短暂端口号。

2.UDP用户数据报协议

1、概述
无连接,即发送数据前不需要建立连接;不保证可靠交付,主机不需要维持复杂的连接状态表;面向报文的。没有拥塞控制,因此网络出现的拥塞不会使得源主机发送速率降低。支持一对一、一对多、多对一、多对多的交互通信;首部开销小。
在这里插入图片描述
2、UDP的首部格式
在这里插入图片描述
运输层从IP层收到UDP数据报时,根据首部中的目的端口,将UDP数据报通过相应的端口,交给最后的终点-应用进程。
在这里插入图片描述
UDP计算检验和的方法和计算IP数据报首部检验和方法相似。但是UDP的检验和将首部和数据部分一起检验。
在这里插入图片描述

3.TCP传输控制协议

1、主要特点
面向连接的,在传输数据之前需要建立连接;
端到端的连接;
可靠通信,无差错、不丢失、不重复,按需到达;
全双工通信,两端都有发送缓存和接收缓存来临时存放数据,发送时,应用程序将数据传送到TCP缓存后做其他的事,TCP在合适的时候将数据发送出去,接收时TCP将收到的数据放入缓存,应用程序在合适的时候读取数据;
面向字节流
在这里插入图片描述
2、TCP连接
TCP连接的两个端点是套接字,套接字构成如下:
在这里插入图片描述
每条TCP连接唯一的被通信两端的两个端点所确定:
在这里插入图片描述
同一个IP地址可以有许多不同的TCP连接,同一个端口号可以出现在多个不同的TCP连接中。

4. 可靠传输原理

1、停止等待协议
就是每发送完一个分组就停止发送,等待对方的确认,收到确认后再发送下一个分组。
无差错情况:
在这里插入图片描述
出现差错:
在这里插入图片描述
A超过一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,重传前面发送过的分组。A在发送完一个分组后,必须暂时保留已发送的分组的副本,分组和确认分组都必须进行编号,超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长。
确认丢失和确认迟到:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2、连续ARQ协议
在这里插入图片描述
发送方每收到一个确认,就把发送窗口向前滑动一个分组,接收方采用累计确认方法,不必对收到的分组逐个确认,在收到几个分组后,对按序到达的最后一个分组发送确认。

5. TCP报文段首部格式

在这里插入图片描述

6. TCP可靠传输的实现

1、以字节为单位的滑动窗口
在这里插入图片描述
假定A收到B发来的确认报文段,其中窗口是20字节,确认号为31,说明B期望收到的下一个序号是31。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
TCP两端的缓存和窗口的关系:
在这里插入图片描述
发送缓存存放:
在这里插入图片描述
接收缓存存放:
在这里插入图片描述
2、超时重传时间选择
TCP使用一种自适应算法,记录一个报文段发出的时间,收到确认的时间。这两个时间之差是报文段的往返时间RTT。保留RPP的一个加权平均往返时间RTTs。当第一次测量到RTT样本时,RTTs值就取为所有测量到的RTT样本值,以后每个测量到一个新的RTT样本,就按照下是重新计算一次RTTs:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7.TCP流量控制

1、滑动窗口实现流量控制
让发送方的发送速率和接收方的接收速率一致。使用可变窗口进行流量控制:
在这里插入图片描述
A向B发送数据,建立连接后,rwnd=400表示发送发的发送窗口不能超过接收方给出的接收窗口的数值。每个报文段为100字节长,ACK表示手不中的确认位ACK,小写ack表示确认字段的值。
在这里插入图片描述
2、TCP传输速率
使用不同的机制控制TCP报文段的发送时机:
(1)TCP维持一个变量,等于最大报文段长度MSS。只要缓存中存放的数据达到MSS字节时,就组装成一个TCP报文段发送出去。
(2)由发送方应用进程指明要求发送报文段。
(3)发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入到报文段发出去。
TCP中的Nagle算法:
当发送应用进程将要发送的数据逐个字节发送到TCP的发送缓存,则发送方将第一个数据字节先发送出去,将后面到达的数据字节偶缓存起来。当发送方收到对第一个数据字符的确认后,再把发送缓存中的所有数据组装成一个报文段发送出去,同时继续对随后到达的数据进行缓存。只有字啊收到对前一个报文段的确认后才继续发送下一个报文段。当到达的数据以达到方窗口大小的一半或以达到报文段的最大长度就发送一个报文段。

8. TCP拥塞控制

1、一般原理
当对网络中某一资源(链路容量、交换节点中的缓存和处理机)的需求超过该资源所能提供的可用部分,就会出现拥塞。
拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制所要做的一个前提,网络能够承受现有网络负载。拥塞控制是一个全局性过程,涉及所有主机、路由器。
流量控制是指点对点通信量的控制,是端到端的问题。抑制发送端发送数据的速率,使得接收方来得及接收。
拥塞控制所起到的作用:
提供的负载:单位时间内输入给网络的分组数目。
吞吐量:单位时间从网络输出的分组数目。
在这里插入图片描述
在这里插入图片描述
2、TCP拥塞控制方法
(1)慢开始和拥塞避免
发送方维持一个叫做拥塞窗口的状态变量,大小取决于网络的拥塞程度,发送方让自己的发送窗口等于拥塞窗口。只要网络没哟拥塞,拥塞窗口就可以再增大一些,以便将更多的分组发送出去,这样就可以提高网络的利用率,当出现拥塞则将拥塞窗口减小,减少注入网络的分组数。只要发送发没有按时收到应当到达的确认报文,就可能出现拥塞,因此判断网络拥塞的依据是出现超时。
慢开始算法:当主机开始发送数据时,由于不清楚网络的负荷情况,因此由小到大逐渐增大发送窗口。
在每收到一个对新的报文段的确认后,可以将拥塞窗口增加最多一个SMSS值。
在这里插入图片描述
一个传输轮次所经历的时间其实就是往返时间RTT。
为了防止拥塞窗口cwnd增长过大引起网络拥塞,需要设置一个慢开始门限ssthresh:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拥塞避免阶段,拥塞窗口是按照线性规律增大的,常称为加法增大。一旦出现超时或3个重复确认,将门限值设置为当前拥塞窗口的一半,减小拥塞窗口的数值。
快重传机制:
在这里插入图片描述
在这里插入图片描述

TCP的拥塞控制过程如下:
在这里插入图片描述
接收方根据自己的接受能力设定接收方窗口rwnd,将其写入TCP首部中的窗口字段,传送给发送方。
在这里插入图片描述

9. TCP的运输链接

1、TCP连接建立
在这里插入图片描述
(1)首先,TCP服务器端创建一个传输控制块TCB,等待客户端发送的连接请求,这时服务器端进入listen状态。
(2)客户端也创建一个传输控制快TCB,客户端向服务器发出一个连接请求,SYN(同步)=1,seq(序号)=x,状态进入SYN-SENT。
(3)当服务器端接收到连接请求后,服务器端状态变为SYN-RCVD,并向客户端返回一个响应,SYN=1,seq=y,ack=x+1,ACK=1。
(4)客户端接收到服务器端发送的响应后,状态变为ESTAB-LISHEND,同时向服务器端发送一个确认收到响应,ACK=1,SYN=1,seq=x+1,ack=y+1。
(5)服务器端接收到客户端发送的确认响应后状态变为ESTAB-LISHED。
B发送给A的报文段,也可以拆成两个报文段,可以先发送一个确认报文段(ACK=1,ack=x+1),在发送一个同步报文段(SYN=1,seq=y)。
采用三次握手的原因是,当客户端向服务器端发送连接请求时,如果第一次发送的请求在发送的过程中丢失或延迟,则客户端会重新发送一次请求到达服务器端来建立连接进行数据传输。但是当出现异常时,在数据传输完毕断开连接后,第一次发送的连接请求到达服务器端,服务器误认为是客户端需要再一次建立连接,则向客户端发送响应,但是目前客户端并没有向服务器端发送连接请求,因此服务器端不会收到客户端发出的响应确认,则服务器会不断向客户端发送确认响应,使得服务器端资源浪费。
2、TCP连接释放
在这里插入图片描述
在TCP连接释放前,客户端和服务器端的状态都是ESTAB-LISHED,当客户端要断开连接时
(1)客户端向服务器端发出连接释放的请求,FIN=1,seq(序号)=u,u为连接释放前最后一个数据字节号,此时客户端状态变为FIN-WAIT-1。
(2)当服务器端收到客户端的连接释放请求时,服务器端向应用进程发送一个通知,向客户端发送一个连接释放确认响应,ACK=1,,ack=u+1,seq(序号)=v,此时服务器端状态变为CLOSE-WAIT,从客户端到服务器端的连接就断开了。
(3)当客户端收到服务器端发来的响应后,状态变为FIN-WAIT-2。此时服务器端还可以向客户端发送数据。
(4)当过了一段COLSE-WAIT时间后,服务器端不再需要向客户端发送数据,则服务器端向客户端发送一个连接释放请求,FIN=1,seq=w,ACK=1,ack=u+1,此时服务器端状态变为LAST-ACK。
(5)当客户端收到服务器端发送的连接释放请求后,向服务器端发送一个连接释放确认,ACK=1,seq=u+1(变为u+1可能是在CLOSE-WAIT时服务器端向客户端发送了数据),ack=w+1,此时客户端状态进入TIME-WAIT,要等待2msl(两个最长报文段时间)。
(6)当服务器端收到客户端的连接释放确认后,状态变为CLOSE。
(7)在2MSL后,客户端的状态也进入CLOSE。此时TCP 的连接释放。
需要等待2MSL时间的原因:
(1)在客户端向服务器端发送的最后一个ACK报文时,当该报文丢失,因此使得处在LAST-ACK状态的服务器端收不到对已发送的FIN+ACK报文段的确认。服务器端超时重传FIN+ACK,因此客户端能在2MSL时间收到重传的报文段。客户端再重传一次确认,重启2MSL计时器。客户端和服务器端都进入CLOSE状态。若客户端再发送完ACK后不等待2MSL直接关闭,则客户端就不会收到服务器端重新发送的FIN+ACK,就不会再一次发送ACK确认报文。服务器无法进入CLOSE状态。
(2)为了防止在建立连接时出现的问题,客户端发送ACK后再等待2MSL时间后就可以使本连接持续的时间内的所有报文段都消失,就可以使下一个新的连接中不会出现这种旧的连接请求报文。
3.TCP的有限状态机
在这里插入图片描述


http://www.niftyadmin.cn/n/1865526.html

相关文章

多线程与并发

1.缓存一致性问题,如何解决? 当程序在运行过程中,会将运算需要的数据从主存复制一份到 CPU 的高速 缓存当中,那么 CPU 进行计算时就可以直接从它的高速缓存读取数据和向其中 写入数据,当运算结束之后,再将…

数据库专题(优化查询)

一,优化查询的方法都有哪些? 1.使用索引: 应尽量避免全表扫描,首先应考虑在 where 及 order by ,group by 涉及的列上建立索引。 2.优化sql语句: 2.1 通过 explain(查询优化神器)用来查看 SQL 语句的执行效果&#x…

数据库专题(sql注入问题)

一,sql 语句应该考虑哪些安全性? 1.防止 sql 注入,对特殊字符进行过滤、转义或者使用预编译的 sql 语句绑定变量。 2.当 sql 语句运行出错时,不要把数据库返回的错误信息全部显示给用户,以防止 泄漏服务器和数据库相关…

数据库专题(关于连接/存储过程/锁/范式/事务的问题)

一,内连接和外连接为区别? 有如下两个表: 内连接只显示符合连接条件的记录 外连接分左外连接、右外连接、全外连接三种: 1)左外连接:即以左表为基准,到右表找匹配的数据,找不到匹…

数据库专题(有关索引的问题)

一,什么是数据库索引? 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息。 索…

数据库专题(有关索引引擎/数据库连接池的问题)

一,mysql 中 MyIsam 与 InnoDB 的区别 1.事务处理上方面 MyISAM 强调的是性能,查询的速度比 InnoDB 类型更快,但是不提供事务支持。 InnoDB 提供事务支持事务。2.外键 MyISAM 不支持外键,InnoDB 支持外键。3.锁 MyISAM 只支持表级…

操作系统专题

一,进程间通信方式有哪些,进程调度方法有哪些? 1.共享内存 可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存 空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式 需要依靠某种同步操作&a…

1.1Spring-SpringMVC-Mybatis框架简介

一.Spring框架 1.1SpringIOC IOC是一个容器,Spring中,一切java资源都是java Bean容器,容器的目标是管理Bean和他们之间的关系。在SpringIOC里装载着各种Bean,包含Java Bean的建立、事件、行为等都是由IOC容器管理。Spring依靠描述完成对象的…