IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络面试题目--1 -> 正文阅读

[网络协议]计算机网络面试题目--1

计算机网络

TCP和UDP的区别

首先,TCP和UDP都是传输层的协议,传输层需要为应用层提供服务。它们之间的区别有:

  1. 连接 TCP是面向连接的传输层协议,数据传输过程是:建立连接–传输数据–断开连接;而UDP无需建立连接就可以传输数据
  2. 可靠性 TCP是可靠交付的;而UDP是尽最大努力进行交付,不能保证可靠交付
  3. 服务对象 TCP服务于两个端点,是一对一的;UDP支持一对多或者多对多的交互通信
  4. 首部开销 TCP的首部比较长,有一定的开销;而UDP首部只有8个字节,是固定不变的,开销比较小
  5. 应用场景 由于TCP是面向连接的,能够保证数据的可靠交付,所以常用于FTP文件传输、HTTP/HTTPS等;UDP面向无连接,可以随时发送数据,简单高效,常用于音频、视频等多媒体通信

TCP三次握手

TCP是面向连接的传输层协议,在传输数据之前必须要先建立连接,TCP是通过三次握手的方式来建立连接。三次握手的过程:

  1. 第一次握手:服务器监听某个端口,处于Listen状态。客户端想要与服务器建立连接先要发送一个SYN报文,表示希望与服务端建立连接。这个SYN报文中SYN=1,序列号由客户端随机初始化(序列号为u)。
  2. 第二次握手:服务器端收到SYN报文之后,同意与客户端建立连接,发送SYN+ACK报文,该报文中SYN=1,ACK=1,序列号由服务器端随机生成(序列号为v),确认号=u+1。
  3. 第三次握手:客户端在收到SYN+ACK报文之后,要给服务器端回复一个ACK报文,ACK=1,确认号 =v+1,这次报文可以包含数据,也可以不包含数据。
    在三次握手之后,双方都处于ESTABLISHED状态,连接建立,双方可以互相发送数据。
    在这里插入图片描述

TCP四次挥手

TCP断开连接时通过四次挥手,双方都可以主动断开连接,这里假设客户端请求断开连接:

  1. 第一次挥手:客户端发送一个TCP首部FIN标志位为1的FIN报文;
  2. 第二次挥手:服务端收到FIN报文之后向客户端回复一个ACK应答报文;
  3. 第三次挥手:服务器端处理完数据之后向客户端发送FIN报文;
  4. 第四次挥手:客户端收到服务器端的FIN报文,回一个ACK报文,当服务端收到ACK应答报文之后,服务端就可以关闭连接,而客户端在经过2MSL时间之后完成关闭连接。
    在这里插入图片描述

TCP连接扩展问题

1.为什么是三次握手,不是两次也不是四次?

  1. **三次握手的首要目的就是为了阻止历史重复连接的初始化。**由于网络环境的复杂性,先发送的数据包不一定先到达目标主机,假设场景:
    (1)一个旧的SYN报文比最新的SYN报文早到达服务端;
    (2)服务端会针对旧的SYN报文发送一个SYN+ACK报文给客户端;
    (3)客户端收到该报文之后判断这是一个历史连接,那么就会发送一个RST报文给服务端。
    如果是两次握手的话,也就是没有(3),就不能判断当前连接是不是历史连接,三次握手可以在客户端准备发送第三个报文的时候去判断是不是历史连接。
  2. 如果只有两次握手,当客户端的SYN报文阻塞的时候,客户端没有收到ACK报文就会重新发送SYN报文,由于没有第三次握手,所以服务器端不清楚客户端是不是收到了ACK报文,所以每来一个SYN报文,服务器都会建立连接,这样就会导致很多冗余连接,造成资源浪费
  3. TCP通信的双方都需要维护一个序列号。服务器端收到客户端携带初始序列号的SYN报文后,会回复一个ACK应答报文,携带着服务器随机生成的序列号,表示客户端的SYN报文已被成功接收;客户端收到ACK报文之后,依然要回复一个ACK应答报文,这样一来一回就可以保证双方的初始序列号能被可靠的同步
    三次握手已经能够保证最少可靠连接建立,所以就不需要更多的通信次数来建立连接。

2.SYN攻击

攻击者在短时间内伪造多个IP地址,向服务器端发送SYN报文,服务端每收到一个SYN报文就回复一个SYN+ACK报文,但是这些SYN+ACK报文得不到ACK应答,久而久之就会导致服务器端SYN接收队列满了,无法再接收正常用户发送的SYN报文建立连接的请求。

3.为什么挥手需要四次?

关闭连接的时候,客户端向服务端发送FIN报文,表示的是客户端不再发送数据了,但是还可以接收数据。服务器回复一个ACK报文,但是服务器端可能还有数据需要发送。当服务器端不再发送数据的时候,向客户端发送FIN报文,表示同意关闭连接,而客户端回复ACK应答报文。需要四次握手。

4.为什么挥手的时候最后需要等待2MSL时间?

MSL(Maximum Segment Lifetime)是报文的最大生存时间,网络中可能存在来自发送方的数据包,当这些数据包被接收方处理后又向对方发送响应,所以一来一回就需要等待2倍的时间。

HTTP1.0和HTTP1.1

  1. 长连接 在HTTP1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接,都需要重新进行一次三次握手四次挥手的过程,开销比较大。而HTTP1.1默认使用长连接,开启Connection:keep-live,HTTP1.1的持续连接有非流水线形式和流水线形式这两种,前者是客户在收到HTTP的响应报文之就能发送新的请求报文,后者是客户收到前一次的响应之才能发送下一个请求。
  2. 节约宽带 HTTP1.0存在一些宽带浪费的情况,例如:客户端只是需要某个对象的一部分,而服务器会把整个对象都传过来,不支持断点续传;HTTP1.1中在请求头部加入了range头域,允许只请求资源的某一部分。
  3. 错误状态响应码 在HTTP1.1中增加了24个错误状态响应码,例如,410(Gone)表示服务器上某个资源被永久性删除,409(Conflict)表示请求的资源与资源的当前状态发生冲突。
  4. 缓存处理 在HTTP1.0中主要使用头部中的If-Modified,Expires作为缓存判断的标准,在HTTP1.1中加入了更多可供选择的缓存头部来控制缓存策略。

DNS解析IP的过程

DNS中的域名都是用句点来分隔的,比如www.server.com,这里的句点表示不同层次之间的界限。根域在最顶层,它的下一层就是com顶级域,再下面就是server.com,请求过程如图所示:
在这里插入图片描述

输入url到网页显示的过程

  1. URL解析 对URL解析完成之后就能确定WEB服务器和请求的文件名,生成HTTP请求消息。
  2. 域名—>IP地址转换 在操作系统将该请求发送给服务器之前,先要利用DNS协议通过迭代的方式确定域名所对应的ip地址。
  3. TCP协议传输 通过三次握手建立连接,数据会以MSS长度为单位进行拆分,拆分出来的每一个数据都会被放在单独的网络包中,加上TCP首部。
  4. IP模块封装 TCP模块在进行连接、收发数据、断开的过程中,都需要委托IP模块将数据封装成网络报发送给通信对象,加上IP包头部。
  5. 加MAC头部 网络包还需要在IP头部之前加上MAC头部(使用ARP协议完成MAC地址的查找),MAC头部就是以太网使用的头部,包含了发送方和接收方的MAC地址等信息,用于两点之间传输。
  6. 网卡 IP生成的网络包只是存在内存中的一串二进制数字,需要将数字信息转换为电信号,才能在网络上传输,网卡就负责从IP模块获取到包之后复制到网卡的缓存区中,在开头加上报头和起始帧定界符,在尾部加上检测错误的帧校验序列,最后网卡把电信号通过网线发送出去。
  7. 交换机处理 电信号到达网线接口,将电信号—>数字信号,交换机进行转发。
  8. 路由器处理 路由器端口会接收发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。
  9. 达到服务器 服务器查看数据包的MAC头部,看是否和自己的MAC符合,如果符合就将包收起来,接着扒开数据包的IP头部,发现IP头的协议项,发现自己的上层是TCP协议。扒开TCP的头部,查看里面的序列号是不是自己想要的,如果是就放入缓存中然后返回一个ACK,如果不是就丢弃,TCP头部里面还有端口号,HTTP的服务器正在监听这个端口号。服务器知道是HTTP进程想要这个数据包,于是将包发送给HTTP进程。服务器的HTTP进程看到是想要请求一个页面,于是就将这个网页封装在HTTP响应报文里。
  10. 服务器发送HTTP响应报文 HTTP响应报文也需要穿上TCP、IP、MAC头部,不过源地址是服务器端IP,目的地址是客户端IP地址。经过交换机–路由器的层层转发,由子网内的交换机转发给客户端。客户端收到服务器端的响应数据包开始层层扒皮,把收到的数据包扒剩HTTP响应报文,交给浏览器显示页面。
  11. 断开连接 客户端要断开连接,经过TCP四次挥手,双方连接断开。在这里插入图片描述 在这里插入图片描述
  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-05 11:23:21  更:2021-09-05 11:27:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/29 11:04:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计