TCP和UDP的面试题理解

news/2024/5/18 16:08:40 标签: tcp/ip, udp, 网络协议

1、谈一谈对OSI七层模型和TCP/IP四层模型的理解?

首先谈谈为什么网络要分层:原因一各层之间相互独立,每一层有自己的职责,各层之间不用相互关心其它层是如何实现的,只需要知道自己要调用下层提供好的功能即可;原因二分层可以将复杂的网络问题分解成清晰简单的小问题进行处理和解决。

其次OSI七层模型是ISO组织定义的一个计算机标准分层模型,从上到下包括:

应用层:为计算机用户提供服务的;

表示层:进行数据处理的(比如:数据在网络中传输,有可能进行编码和解码,加密和解密等);

会话层:管理(建立、维护、重连)应用程序之间的会话;

传输层:为两台主机之间的通信提供数据传输服务;

网络层:定义IP和子网掩码,通过对IP和子网掩码进行与运算,判断是否在同一个子网中,再由路由器和交换机进行传输;

数据链路层:把比特流封装成帧数据的格式,数据通过网卡进行传输;

物理层:通过网线等物理方式将电脑连接起来,传送的数据是比特流。

但是因为七层模型由如下的缺点:缺乏实际经验;OSI定制的标准周期太长,无法及时进入市场;协议实现复杂,运行效率比较低。所以对七层模型进行了简化,简化成TCP/IP四层模型。

TCP/IP四层模型主要包括:

应用层:将OSI中的会话层,表示层,应用层进行了合并,主要的协议有:HTTP,HTTPS,FTP,SMTP,POP3,DNS等;

传输层:为两台主机进程提供数据传输服务,主要的协议有:TCP协议和UDP协议;

网络层:处理IP数据包的传输,路由,建立主机间的通信;

数据链路层:包含OSI中的数据链路层和物理层,连接电脑的。

2、谈谈TCP协议的3次握手过程?

3次握手就是客户端和服务器端建立连接的过程。

首先,由客户端发起请求,这个请求的数据包中TCP首部内容为SYN=1,代表发起一个建立连接的请求,这是客户端向服务器端发起的第一次握手请求;

然后,服务器端接受到了客户端发来的数据包后,根据SYN=1判断出这是一个请求加建立连接的数据包,如服务器同意建立连接,会给客户端发送一个数据包,这个数据包的TCP首部的内容为SYN=1,ACK=1,表示对这个建立连接的确认应答,这是服务器端向客户端发起的第二次握手请求;这两次的握手代表的是网络是畅通的

最后,客户端收到服务器的确认之后,会再给服务器发一个数据包,数据包的TCP首部内容为SYN=0,ACK=1,表示收到了服务器的确认数据包,这是客户端向服务器端发起的三次握手请求;

三次握手请求后客户端和服务器端就建立连接,可以发送和接收数据了。

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

TCP协议的前两次握手代表客户端和服务器端之间的网络是畅通的,第三次的握手可以的到一个确认的序列号,用于进行可靠性传输(第二次握手时,服务器会携带一个序列号seq和确认号ack,告诉客户端发送数据时,从哪里开始发送)。

3次握手是最可靠并且节省资源的,2次只能代表网络是畅通,不能得到可靠的传输,4次可以加强连接之间的可靠性,但是有点浪费资源,没有这个必要。

4、谈谈TCP协议的四次挥手过程?

首先,还是客户端先向服务器发送请求断开连接的数据包,数据包中TCP首部内容为FIN=1;

然后,服务器接受到这个数据包后,看见FIN=1,服务器就知道了这是个断开链接的请求,它会先向客户端发送一个数据包,数据包的内容为ACK=1,表示知道了客户端要断开连接;

但是可能数据还没有发送完,所以在发送确认应答后,会加速数据的传送,数据传送完毕后,会立马再向客户端发送一个数据包,数据包的内容为FIN=1,ACK=1,代表已经把数据发送完了,并且断开了服务器到客户端的连接;

最后,客户端再向服务器发送数据包,数据包的内容为ACK=1,表示收到服务器的确认报文,并同意服务器释放那个连接。

5、什么是流量控制?

为了控制发送方发送的速率,保证接收方来得及接受数据。流量控制是通过滑动窗口协议实现的

接收方通过自己TCP首部中窗口的大小,来控制发送方的窗口大小,保证发送方发送的数据接收方可以进行接收,以免导致包丢失等问题。

6、什么是滑动窗口?

TCP报文段的首部中有个字段叫窗口,占2个字节。这个字段是接收方告诉发送发自己可以处理多少数据,发送方就会按照接收方能接收的数量进行发送。发送方的窗口大小是根据接收方的窗口大小决定的。

发送方将窗口内容分为发生窗口和可用窗口。随着不断地数据发送和ACK确认应答,发送窗口和可用窗口将不断地向前滑动。TCP协议通过滑动窗口的机制,提高了通信效率

7、什么是拥塞控制?

发送方发送过多的数据包到网络中,接收方来不及接受,就会导致大量的数据包拥塞在网络中,导致包丢失,延迟传送等问题。拥塞控制就是为了防止大量的数据包注入到网络中,网络性能降低。

拥塞窗口(cwnd):是一个数值,相当于就是一次发送的数据包的个数

拥塞控制的四个算法:

慢启动:刚开始发送时不知道网络的情况,所以发送最初执行慢启动,令cwnd=1,发送方那个只能发送一个数据包,当收到确认应答后,以后发送的数据包个数成指数增加(2,4,8......)。

拥塞避免:慢启动每次将cwnd加倍,这样会让数据包的个数增长太快,网络拥塞的可能性增大。所以TCP会设置一个慢启动门限ssthresh,当cwnd>=ssthresh时,进行拥塞避免,每次让cwnd加1,降低数据包的增长个数。

拥塞发生:慢启动和拥塞避免还是会增加cwnd的个数,网络总会进入拥塞的,进入拥塞后就会出现丢包的情形,这时就需要对丢失的数据包进行重新传送,就会触发重传机制。

超时重传:设置ssthresh为cwnd/2;cwnd重置为1。这时重新进入慢启动。

快速重传:当接受方发现数据包丢失时,会连续三次发送ACK确认应答,这样发送端就会快速的重传。当发生快速重传时,设置cwnd=cwnd/2(cwnd设置为原来的一般,还要加上3个ACK确认数据包),ssthresh=cwnd。这时,会进入快速恢复。

8、TCP和UDP有什么区别?

TCP是面向连接的,而UDP是无连接;

TCP建立的是可靠传输,而UDP建立的是不可靠传输;

TCP的传输效率慢,而UDP的传输效率快;

TCP所需的资源多,而UDP所需的资源少;

TCP的首部大小为20-60;而UDP的首部大小为8个字节;


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

相关文章

【MATLAB源码-第36期】matlab基于BD,SVD,ZF,MMSE,MF,SLNR预编码的MIMO系统误码率分析。

1、算法描述 1. MIMO (多输入多输出):这是一个无线通信系统中使用的技术,其中有多个发送和接收天线。通过同时发送和接收多个数据流,MIMO可以增加数据速率和系统容量,同时提高信号的可靠性。 2. BD (块对角化):这是一…

为什么SQL预编译可以防止SQL注入攻击

前言 防范SQL注入攻击是每一位做后端开发的程序员必须会的基本功。本文介绍其中一种防范攻击的方法:SQL预编译。 本文大部分内容引用自这篇文章,部分内容有修改。 注入例子 先简单回顾下SQL注入攻击的过程,假设有一个SQL语句: …

深兰科技数字人商学院报名通道限时开启,快来成为运营合伙人吧

近日,深兰科技宣布数字人商学院运营合伙人招募计划启动,正式面向全国范围招募优秀的合伙人,共享AI数字人服务市场。加入后,所有合伙人都可以使用深兰科技硅基大脑SaaS平台快速打造属于自己的AI数字人,为客户提供数字人…

git同步其他分支方法

一、在这个分支改的东西,改错了,应该同步到其他分支,这个分支不需要改动 第一步,现在当前的分支上的修改暂存起来,当前分支dev-1 git stash第二步,暂存修改后,切换到其他分支 dev-2 git chec…

【云原生】配置Kubernetes CronJob自动备份MySQL数据库(单机版)

文章目录 每天自动备份数据库MySQL【云原生】配置Kubernetes CronJob自动备份Clickhouse数据库 每天自动备份数据库 MySQL 引用镜像:databack/mysql-backup,使用文档:https://hub.docker.com/r/databack/mysql-backup 测试、开发环境:每天0点40分执行全库备份操作,备份文…

蓝桥等考Python组别四级006

第一部分:选择题 1、Python L4 (15分) 在Python中,符号“\n”代表( )。 换行空格退格注释正确答案:A 2、Python L4 (15分) 已知大写字母A的ASCII码值为…

【图论C++】树的重心——教父POJ 3107(链式前向星的使用)

》》》算法竞赛 /*** file * author jUicE_g2R(qq:3406291309)————彬(bin-必应)* 一个某双流一大学通信与信息专业大二在读 * * brief 一直在竞赛算法学习的路上* * copyright 2023.9* COPYRIGHT 原创技术笔记:转载…

【Linux】分布式版本控制工具git

​ ​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:Linux 🎯长路漫漫浩浩,万事皆有期待 上一篇博客:【Linux】…