• 计算机网络常见面试题


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

    OSI七层模型为:

    TCP/IP四层模型: 

    OSI七层模型TCP/IP四层模型功能协议
    应用层应用层文件传输,电子邮件,文件服务,虚拟终端FTP、HTTP、SNMP、SMTP、DNS、Telnet
    表示层数据格式化,代码转换,数据加密
    会话层解除或建立与别的接点的联系
    传输层传输层提供端对端的接口TCP、UDP
    网络层网络层为数据包选择路由IP、ICMP、RIP、OSPF、BGP、IGMP
    数据链路层网络接口层传输有地址的帧以及错误检测功能PPP、ARP、MTU、SLIP
    数据层以二进制数据形式在物理媒体上传输数据IEEE802

    总结来说,就是物理层通过物理手段把电脑连接起来,数据链路层对比特流的数据进行分组,网络层来建立主机到主机的通信,传输层建立端口到端口的通信,应用层最终负责建立连接,数据格式转换,最终呈现给用户。

    二、谈谈TCP协议的三次握手过程? 

     第一次握手:客户先向服务器发送一个请求建立链接的数据包,数据包的TCP首部内容为:(SYN=1,ACK=0,seq=x)

     第二次握手:服务器收到客户端发送的第一个数据包后,根据(SYN=1,ACK=0)判断出是主动建立链接的数据包,如果服务器同意连接,则服务器就会发送一个数据包进行回应,这个数据包的TCP首部包含(同步SYN=1,确认ACK=1,序号seq=y,确认号ack=x+1)

    第三次握手:客服端收到服务器的确认后,再给服务器发送一个数据包,数据包首部包含(同步SYN=0,确认ACK=1,序号seq=x+1,确认号ack=y+1),双方已同意建立连接。

    3次握手.webp

     这个过程就像我想和你一起去吃饭,我们素不相识,我不可能一上来就叫你去吃饭,如果我一上来就叫你一起去吃饭,你可能会想:这人谁呀,神经病吧!!!哈哈哈哈哈哈哈哈哈,那我要怎么做呢?

    我应该先发出想要认识你的请求“你好呀!我是何故逸”,就是第一次握手;然后你收到我的请求后,如果要同意我的请求就要返回给我一个确认信号,“你好呀!何故逸”,就是第二次握手;接下来我才叫你去吃饭,这个时候我们双方已经同意连接了,这就是第三次握手。

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

     其实在建立TCP连接过程中的前两次握手:(1)客服端发送请求(2)服务器向客服端确认这个请求,就足以证明客户端与服务器之间的网络是通畅的。但是如果没有第三次握手的话就可能会出现重复连接,旧的重复连接引起连接混乱的现象。

    并且通过三次握手可以得到一个确认的可靠初始化序列号seq,用于进行可靠性传输。而如果只有两次握手,则无法初始化序列号seq。

     当然TCP连接通过4次5次连接与可以,但是3次握手是最节省资源的连接方式。

    四、谈谈TCP连接的四次挥手过程? 

    4次挥手.png

    四次挥手就是释放连接的过程,

    第一次挥手:首先客户端向服务器发送连接释放的请求报文(终止FIN=1,确认ACK=0),并停止发送数据。

    第二次挥手:服务器收到连接释放的报文之后,给客户端发送确认报文(FIN=0,ACK=1,)。从客户端到服务器这个方向上的连接就释放了,TCP连接处于半关闭状态。此时客户端无法发送数据给服务器,但是服务器还可以发送数据给客户端,客户端仍可以接收。

    第三次挥手:若服务器已经没有向客户端发送的数据了,其应用进程就通知TCP释放连接,并向客户端发送确认报文(ACK=1,FIN=1)。

                            此后服务器不再向客户端发送数据,但能接收数据。

    第四次挥手:客户端收到服务器的连接释放报文段后,向服务器发出确认报文(ACK=1,FIN=0)。

    4次挥手.webp

    五、什么是流量控制? 

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

           TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失,从而实现流量控制。

            TCP使用的流量控制协议是可变大小的滑动窗口协议(即TCP利用滑动窗口实现流量控制

    六、什么是滑动窗口 

    滑动窗口是TCP协议用于实现流量控制的一种机制。

    发送发和接收方分别维护各自的缓冲区,这个缓冲区就是窗口。发送发的窗口大小由接收方的TCP首部的窗口字段决定。

    发送方的滑动窗口: 

    发送方将窗口内容分为两部分:发送窗口可用窗口

    随着不断的接收到ACK确认和数据发送,发送窗口和可用窗口将不断在向前滑动。

    • #1 是已发送并收到 ACK确认的数据:1~31 字节
    • #2 是已发送但未收到 ACK确认的数据:32~45 字节
    • #3 是未发送但总大小在接收方处理范围内(接收方还有空间):46~51字节
    • #4 是未发送但总大小超过接收方处理范围(接收方没有空间):52字节以后

    16.jpg

    当发送方把数据「全部」都一下发送出去后,可用窗口的大小就为 0 了,表明可用窗口耗尽,在没收到 ACK 确认之前是无法继续发送数据了。

    17.jpg

    当收到之前发送的数据 32~36 字节的 ACK 确认应答后,如果发送窗口的大小没有变化,则滑动窗口往右边移动 5 个字节,因为有 5 个字节的数据被应答确认,接下来 52~56 字节又变成了可用窗口,那么后续也就可以发送 52~56 这 5 个字节的数据了。

    18.jpg

  • 相关阅读:
    计算机谣言之网线的做法
    程序员应该专注技术还是转管理?
    银河麒麟系统下安装Kingbase数据库
    TypeScript基础之模版字面量类型
    找工作小项目:day16-重构核心库、使用智能指针(1)
    CLIP 论文逐段精读【论文精读】
    【微服务】springboot 整合dubbo3开发rest应用
    Github 2024-06-15Rust开源项目日报Top10
    node.js学习之cors跨域资源共享
    docker 转为docker-compose(composerize 命令)
  • 原文地址:https://blog.csdn.net/weixin_61430914/article/details/133174963