计算机网络传输层常见问题总结

文章目录


前言

为什么要实现网络分层?

1.各层之间相互独立:类似于JAVA中的接口一样,各层之间只需要关注自己如何调用下层提供好的功能,不必在乎下层的实现,这个和我们对开发时系统进行分层是一个道理。

2.灵活性好:各层都可以采用最适当的技术来实现,整体架构不会因为某一层的技术变动产生影响,也对应了高内聚、低耦合的原则。

3.大问题化小 :分层设计有助于我们把一些大的、复杂的网络问题拆分成一些小的、简单的问题来处理,这样使得复杂的计算机网络系统变得易于实现和标准化。


一、OSI七层模型和TCP/IP四层模型

OSI(Open System Interconnect)网络7层模型是ISO组织定义的一个计算机互联的标准分层模型,而我们平时使用的大多都是TCP/IP模型是OSI七层网络模型的简化版:


应用层协议负责定义应用进程间的通信和交互的规则,常见的应用层协议有:

超文本传输协议:HTTP、HTTPS;

电子邮件协议:SMTP、POP3;

域名解析协议:DNS;

文件传输协议:FTP;

传输层协议负责定义两台主机进程之间的通信,常见的传输层协议有:

面向连接的、可靠性高的TCP协议;(传输控制协议)

传输效率快,无需连接的UDP协议;(用户数据报协议)

二、TCP协议的3次握手过程

TCP协议通过三次握手来建立客户端与服务器之间的TCP连接:
第一次握手 :客户端向服务器发送一个TCP数据包,其中TCP首部标志位为SYN=1,ACK=0表示这是一次请求连接的数据包;
第二次握手 :服务器根据SYN=1,ACK=0,判断出这是一个请求连接,若同意连接,则会恢复一个首部标志位为SYN=1,ACK=1的数据包表示同意连接;
第三次握手 :客户端收到服务器的确认后,再给服务器发送一个首部标志位为ACK=1的数据包,代表双方均已同意创建连接,此时连接正式创建成功,双方都进入ESTABLISHED 就绪状态。

1. 在三次握手建立连接过程中为什么还要传递序号和确认号?

三次握手在建立连接时,传递序号和确认号是为了确保数据在传输过程中的可靠性和完整性,同时得到一个可靠的初始化序号seq,为正式的数据传输做准备。

2. TCP协议为什么要3次握手?2次,4次不行吗?

在连接过程中的前两次握手中,第一次握手 是客户端向服务器发出建立连接的请求,第二次握手 是服务器跟客户端确认了这个请求,这两次握手已经足以证明服务器与客户端之间的网络是通畅的。

但是如果没有第三次握手 ,如果客户端第一次向服务器发起连接请求时,因为网络的原因这次请求超出了客户端设置的超时时间RTO之后还没到达服务器,客户端没有收到确认信息,就发起了第二次连接请求,这一次请求很快就到达了服务器端,服务器也立即给出了确认信息。如果此时刚好第一个请求到达服务器,服务器会当作一个新的请求连接来出气,会发出一个确认信息给客服端,但是客户端此时不会处理这个请求,而服务器会一直无效等待,会消耗一定的资源,如果这种操作过于频繁也会导致服务器压力过大而宕机。
因此,三次握手是为了避免重复连接,防止旧连接引发的连接混乱问题。

此外,通过三次握手还可以得到一个可靠的初始化序号seq,用于进行接下来的可靠性传输,两次握手无法初始化一个可靠的序号。
综上,两次既不稳定,也无法得到稳定的序号,四次没必要,浪费资源。三次刚刚好。

三、TCP协议的四次挥手过程

TCP协议通过四次挥手来释放客户端与服务器之间的TCP连接:
第一次挥手 :客户端向服务器发起连接释放的请求数据包,并停止发送数据。

TCP首部标志位信息:FIN=1,ACK=0;
第二次挥手 :服务器收到客户端发送的连接释放的数据包,给客户端发送确认报文。此时TCP连接处于版关闭状态,客户端无法给服务器发送数据,但服务器还可以给客户端发,客户端还能接受。

TCP首部标志位信息:FIN=0,ACK=1;
第三次挥手 :服务器此时已经没有数据发送给客户端了,开始第二次释放连接:

TCP首部标志位信息:FIN=1,ACK=1;
第四次挥手 :客户端收到服务器发来的连接释放请求的数据包后,向服务器发送确认信息:

TCP首部标志位信息:FIN=0,ACK=1;

至此,通过四次挥手,连接释放成功。

四、什么是流量控制?

流量控制就是为了控制发送方发发送速率,保证接收方来得及接受。

TCP使用的流量控制协议时可变大小的滑动窗口协议。通过滑动窗口实现流量控制。

TCP连接中的发送方和接收方都有一块缓冲空间,接收方 只允许发送方 发送接收缓冲区可以容纳的数据,当接收方来不及处理发送方的数据时就会提示发送方降低发送速率 ,防止丢包,从而实现流量控制;

接收方可以通过数据包首部中的窗口字段指定下次发送方能发送的数据大小,从而影响发送速率。

五、什么是滑动窗口?

滑动窗口是实现流量控制的一种机制。

滑动窗口是TCP协议用于实现流量控制的一种机制。发送方和接收方分别维护各自的缓冲区,这个缓冲区就是窗口。发送方的窗口大小由接收方的TCP首部的窗口字段决定 。发送方将窗口内容分为:已发送并确认,已发送未确认,未发送未超出接收方窗口范围,未发送但超出接收方窗口范围。随着接收方的确认,发送方将不断在窗口内向前滑动。

接收方将窗口内容分为:接受已确认,未收到但可以接受。接收方读取窗口内容,并不断确认通知发送方,窗口向前滑动。接收方通过改变窗口大小,可以控制发送方的速率,从而实现流量控制。

这里其实是有一个误区的,我看了很多教材上说的都是:
TCP发送方的窗口=MIN[拥塞窗口,接受窗口],为了方便滑动窗口的理解,就先以接受窗口的方式理解。

六、什么是拥塞控制?

发送方需要维护一个叫做拥塞窗口(cwnd)的状态变量,来决定发送方可以同时发送多少数据包。数据包的数量多与少,将决定网络中产生拥塞的可能性大与小。TCP主要通过四个算法来进行拥塞控制:慢开始、拥塞避免、快重传、快恢复。

  • 慢开始 :拥塞窗口从1开始,采用加倍计算方式,由小到大逐渐增大。
  • 拥塞避免:慢开始每个轮次都将 cwnd 加倍,这样会让 cwnd增长速度非常快,从而使得发送方发送的速度增长速度过快,网络拥塞的可能性也就更高。设置一个慢开始门限 ssthresh,当 cwnd>= ssthresh 时,进入拥塞避免,每个轮次只将 cwnd加 1,降低拥塞窗口的增长速度。
  • 快重传:在接收方,要求每次接收到报文段后,都应该对最后一个已收到的报文段进行确认,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段。
  • 快恢复:快恢复是配套快重传使用,当执行快重传时,就执行"乘法减小(ssthresh × 0.5)"算法,把慢开始门限 ssthresh 减半,同时执行拥塞避免,使拥塞窗口缓慢地线性增大。

七、TCP和UDP有什么区别?

1.TCP协议需要建立连接,仅支持一对一通信;UDP协议无需建立连接,支持一对一、一对多、多对一和多对多的交互通信。

2.TCP是面向字节流的传输层协议,而UDP是直接将数据报文原封不动的打包发送,是面向报文的传输层协议。

2.TCP协议通过确认应答、连接管理、流量控制、拥塞控制来确保可靠性传输;UDP不保证可靠性传输。

  1. 性能效率:TCP协议传输效率慢,需要较多的资源开销。UDP协议传输效率快,需要较少的资源开销。

4.首部格式:TCP协议的首部需要20-60个字节,UDP协议需要8个字节。


相关推荐
报错小能手20 小时前
计算机网络自顶向下方法43——网络层 详解SDN控制平面
计算机网络·平面
JZZC22 天前
29. HTTP
计算机网络·http·ensp
报错小能手2 天前
计算机网络自顶向下方法33——网络层 路由器工作原理 输入端口处理和基于目的地转发 交换 输出端口处理
网络·计算机网络·智能路由器
Yurko132 天前
【计网】基于三层交换机和 RIP 协议的局域网组建
网络·学习·计算机网络·智能路由器
L.EscaRC2 天前
【复习408】计算机网络应用层协议详解
计算机网络
报错小能手3 天前
计算机网络自顶向下方法34——网络层 排队论 缓存大小调节 分组调度 网络中立性
计算机网络
0和1的舞者3 天前
网络通信的奥秘:HTTP详解 (六)
网络·网络协议·计算机网络·http·https·计算机科学与技术
甄心爱学习3 天前
计算机网络10
计算机网络
Wish3D3 天前
查看计算机网络端口是被哪个应用占用
计算机网络
磊 子3 天前
计算机网络概述
网络·计算机网络