计网面试复习自用

news2024/11/20 0:48:56

五层:

  1. 应用层:应用层是最高层,负责为用户提供网络服务和应用程序。在应用层,用户应用程序与网络进行交互,发送和接收数据。典型的应用层协议包括HTTP(用于网页浏览)、SMTP(用于电子邮件)、FTP(文件传输协议)等。用户应用程序产生数据,这些数据被封装成应用层数据包。

  2. 传输层:传输层位于应用层之下,主要负责数据的可靠传输和端到端通信。常见的传输层协议包括TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供可靠的、面向连接的通信,确保数据的完整性和顺序,而UDP提供不可靠的、面向无连接的通信。传输层将应用层数据包封装成传输层数据包,添加源和目标端口信息。

  3. 网络层:网络层是网络通信的下一层,它负责数据包的路由和转发,以确保数据能够跨越不同网络段到达目标主机。网络层使用IP地址来标识主机和路由器的位置。网络层将传输层数据包封装成网络层数据包,并添加源和目标IP地址信息。网络层的设备,如路由器,负责根据目标地址决定数据包的路径。

  4. 数据链路层:在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。
  5. 物理层:实现相邻节点间比特流的透明传输,尽可能屏蔽传输介质和物理设备的差异。

在实际情况中,数据在这三个层次之间依次封装和解封装。例如,当您在网页浏览器中请求一个网页时,应用层生成HTTP请求,然后将其传递给传输层,通常使用TCP。传输层将数据包封装,并在数据包中添加源和目标端口信息。然后,传输层数据包传递给网络层,网络层将其封装,并在数据包中添加源和目标IP地址信息。最后,数据包在网络中路由和转发,经过网络层设备(如路由器),最终到达目标主机,然后在相反的顺序解封装,直到数据到达应用层,网页被显示在浏览器中。这个过程确保了数据的可靠传输和目标定位。

TCP的三次握手四次挥手

是的,三次握手和四次挥手是TCP(Transmission Control Protocol)协议中的重要概念,用于建立和终止TCP连接。

三次握手(Three-Way Handshake)

  1. 客户端向服务器发送一个SYN(同步)标志的数据包,表示客户端想要建立连接。
  2. 服务器收到客户端的SYN数据包后,回复一个ACK(确认)标志的数据包,同时也发送一个SYN标志的数据包,表示接受连接请求。
  3. 客户端收到服务器的ACK和SYN数据包后,回复一个ACK数据包,表示连接建立成功。此时,TCP连接已经建立。

四次挥手(Four-Way Handshake)

  1. 客户端发送一个FIN(结束)标志的数据包,表示不再发送数据。
  2. 服务器收到客户端的FIN数据包后,回复一个ACK数据包,表示确认收到客户端的结束请求。
  3. 服务器继续发送数据(如果有未发送完的数据),然后发送一个FIN数据包,表示服务器已经完成发送。
  4. 客户端收到服务器的FIN数据包后,回复一个ACK数据包,表示确认收到服务器的结束请求。此时,TCP连接被完全终止。

三次握手用于建立TCP连接,而四次挥手用于优雅地终止TCP连接。这些过程确保了数据的可靠传输和连接的安全关闭。

为什么四次挥手时服务端要发送两次,也就是为什么会有第三的个步骤

在TCP四次挥手中,服务端发送两次数据包的目的是确保数据的可靠传输和连接的正确终止。具体来说,第三个步骤(服务端发送第二个FIN数据包)是为了处理可能的延迟数据传输或未完成的数据包。让我详细解释:

  1. 客户端发送FIN:客户端首先发送一个带有FIN标志的数据包,表示不再发送数据,但仍愿意接收数据。

  2. 服务端发送ACK:服务端收到客户端的FIN后,发送一个ACK数据包,确认收到客户端的结束请求。

  3. 服务端继续传输:在一些情况下,服务端可能还有未发送完的数据,因此它继续发送数据,但这些数据不再包含应用层数据,而是用来填充TCP缓冲区的数据。

  4. 服务端发送第二个FIN:一旦服务端完成了所有数据的传输(包括填充的数据),它发送第二个FIN数据包,表示它已经完成数据传输,愿意关闭连接。

  5. 客户端发送ACK:客户端接收到服务端的第二个FIN后,发送一个ACK数据包,确认收到服务端的结束请求。此时,TCP连接被完全终止。

这个额外的步骤(第三个步骤)是为了确保在连接关闭之前,服务端有足够的时间将所有未完成的数据传输完毕。它也可以处理可能的数据包延迟或重排序的情况,以确保数据的可靠传输和连接的正确终止。通过这种方式,TCP提供了一种可靠的方式来结束连接,同时保证数据的完整性。

四次挥手时为什么有第三步

在一些情况下,服务端可能会在四次挥手的第三步(发送第二个FIN之前)继续发送数据,但这些数据通常是用来填充TCP缓冲区或处理未完成的数据传输的情况。以下是一些可能的案例:

  1. 延迟数据传输:在某些情况下,服务端可能会有一些数据包在等待传输给客户端,而在关闭连接之前,服务端希望确保这些数据包已经成功发送。这可以包括应用层数据的最后一部分,如果这些数据在连接关闭之前没有被传输,它们可能会丢失。服务端继续传输这些数据,直到它们全部被发送。

  2. TCP缓冲区数据:TCP协议使用缓冲区来管理数据的传输。有时,这些缓冲区可能包含尚未发送的数据或等待确认的数据。服务端需要等待客户端确认接收这些数据,以确保它们已经成功传输。

  3. 未确认数据包:如果服务端发送了一些数据包但尚未收到客户端的确认,它可能会继续发送这些数据包,以确保客户端已经成功接收它们。这是TCP的可靠性机制的一部分。

总之,服务端在第三步(发送第二个FIN之前)继续发送数据的情况通常是为了处理未完成的数据传输,确保数据的可靠传输,以及正确终止连接。这有助于避免数据的丢失或不完整,同时保持连接的可靠性。

例子:

  1. 客户端发送消息:用户在前端输入并发送一条聊天消息。

  2. 后端接收消息:Spring Boot应用接收到这条消息。

  3. 处理消息:Spring Boot应用可能需要对这条消息进行一些处理,例如验证、加工或路由。这个处理过程可能需要一些时间,特别是如果有多个用户在同时发送消息,Spring Boot需要适当地处理所有这些消息。

  4. 实际传输:一旦后端完成了消息的处理,它会将这条消息发送给聊天中的其他用户。这个传输是实时的,但是在第3步中可能存在一些延迟,因为后端需要完成消息的处理。

所以,延迟数据传输在这个示例中是指在消息从客户端发送到实际传递给其他用户之间的时间延迟,这个延迟是由于消息在后端进行处理而引起的。这个延迟可以是短暂的,但在一些繁忙的聊天环境中,可能会积累一些时间。希望这个解释更加清晰

在日常生活中,有许多应用程序示例可以帮助解释客户端发起的第一次挥手操作。以下是一些具体操作的示例:

  1. Web浏览器关闭标签页:当您在Web浏览器中打开一个网页标签页并完成了阅读后,您可以通过单击标签页上的关闭按钮来关闭该标签页。这个操作等同于客户端(浏览器)发起的第一次挥手,客户端表明不再需要与该网站的连接。

  2. 手机应用关闭:当您使用手机上的应用程序(例如社交媒体应用、游戏、电子邮件应用等)时,当您不再需要应用程序时,您可以通过按下主屏幕按钮、滑动应用程序关闭或使用操作系统提供的应用程序关闭功能来关闭应用程序。这是类似于客户端发起的第一次挥手,表明客户端不再需要与服务端的连接(服务器)。

  3. 电子邮件客户端:在电子邮件应用程序中,当您完成了发送或接收邮件的操作并关闭应用程序时,这等同于客户端发起的第一次挥手。客户端表明它不再需要与电子邮件服务器的连接。

  4. 文件传输应用程序:在文件传输应用程序中,例如FTP或P2P文件共享应用程序,当您完成文件上传或下载操作后,关闭应用程序就像客户端发起的第一次挥手,表示客户端不再需要与服务器的连接,因为文件传输已经完成。


TCP为什么不是两次握手

  1. 双向连接确认:三次握手确保了双方都同意建立连接。客户端发起第一次握手,服务端回应第二次握手,然后客户端再回应第三次握手。这种双向确认减少了因意外连接或恶意攻击引起的不必要连接。

  2. 避免失效连接的问题:如果TCP只使用两次握手,客户端发送第一次握手,服务端回应第二次握手后建立连接。但如果第一次握手丢失,客户端将不知道连接是否建立,而服务器已经认为连接已建立。这可能导致不一致性和潜在的问题。通过三次握手,客户端能够确认连接已建立。2.1连接不一致性:假设客户端发送了第一次握手,但该握手丢失,服务器未收到。客户端不会知道连接建立的情况,而服务器会认为连接已经建立。这会导致不一致性,因为客户端和服务器之间的连接状态不匹配。2.2资源泄漏:客户端未能知道连接的状态,可能会导致资源泄漏。如果客户端在认为连接已经建立的情况下开始发送数据,但实际上连接并未建立,服务器将浪费资源尝试接收和处理这些数据。2.3数据不完整性:如果连接状态不一致,客户端可能会认为连接已建立,但服务器可能不会接收客户端的数据。这可能导致客户端的数据丢失或未处理,导致数据不完整性。2.4安全性问题:连接不一致性可能会被恶意利用,例如中间人攻击,其中攻击者可能会伪造一个连接并开始发送数据,而客户端不知道连接状态不正确,从而可能接受来自攻击者的数据。

Http与Https之间的区别:

1 http 协议是免费使用的,而 https 协议需要到CA机构申请证书,需要缴纳费用
2 http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl/tls 加密传输协议,信息是密文
3 http 的连接很简单,是无状态的;https 协议是由SSL/TLS+HTTP协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全
4 和 http 通信相比,https 通信会由于加减密处理消耗更多的CPU和内存资源
5 http 和 https 使用的端口也不一样,前者是80,后者是443

什么事对称加密与非对称加密,以及常见的加密协议

对称加密非对称加密是两种不同的加密技术,用于保护数据的机密性。它们在加密和解密过程中使用不同的密钥体系,以及具有不同的用途。

  1. 对称加密

    • 使用相同的密钥来加密和解密数据。
    • 加密和解密速度通常较快,因为使用的密钥简单,但存在共享密钥的问题。
    • 适用于大量数据的加密,例如数据传输的加密和存储设备的加密。
    • 常见的对称加密算法包括AES(高级加密标准)、DES(数据加密标准)和3DES等。
  2. 非对称加密

    • 使用一对密钥,包括公钥和私钥,其中公钥用于加密,私钥用于解密。
    • 加密和解密速度通常较慢,因为使用的密钥复杂,但提供了更好的安全性。
    • 适用于密钥交换、数字签名和身份验证等场景。
    • 常见的非对称加密算法包括RSA、DSA、ECC(椭圆曲线密码学)等。

常见的加密协议通常结合了对称和非对称加密技术以提供综合的安全性,其中对称加

Tcp的长连接短连接

连接和短连接:

  • HTTP1.0默认使用的是短连接。浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
  • HTTP/1.1起默认使用长连接。要使用长连接,客户端和服务器的HTTP响应头部的Connection要设置为keep-alive,才能支持长连接

 GET与POST的区别

  • GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
  • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  • GET参数通过URL拼接传递,POST参数通过请求体传递
  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。{1GET请求对参数的数据类型有限制,因为它们需要出现在URL中,因此只能包含ASCII字符,而对于非ASCII字符(如汉字或特殊符号),需要进行URL编码。2POST请求的参数通常包含在请求的正文中,因此可以包含各种数据类型,包括二进制数据、JSON、XML等,而不仅限于ASCII字符。

    例子: 假设您正在开发一个网站的搜索功能。如果用户在搜索框中输入了搜索关键字"购物",则可以使用GET请求来向服务器发送请求,如下所示:

     

    perlCopy code

    GET http://example.com/search?keyword=%E8%B4%AD%E7%89%A9

    在这个例子中,搜索关键字"购物"被URL编码为%E8%B4%AD%E7%89%A9,以适应GET请求的要求。这个关键字以明文形式显示在URL中。

  • }

TCP和UDP区别和应用

  • TCP是可靠传输,UDP是不可靠传输;
  • TCP面向连接,UDP无连接,即发送数据之前不需要建立连接
  • TCP传输速度相对UDP较慢;
  • TCP连接只能是一对一的(端到端);UDP支持一对一、一对多、多对一和多对多的通信方式。

浏览器输入URL到页面返回详细过程

1 输入网址 输入要访问的网址,即URL
2 缓存解析 浏览器获取URL后,先去缓存中查找资源,从浏览器缓存-系统缓存-路由器缓存中查看; 如果有就从缓存中显示界面,不再发送请求; 如果没有,则发送http请求;
3 域名解析 发现缓存中没有资源,发送http请求; 在发送http请求之前,需要进行DNS解析(域名解析); DNS解析:域名到IP地址的转换过程,域名的解析工作由DNS服务器完成,解析后可以获取域名相应的IP地址;
4 tcp连接 三次握手在域名解析后,浏览器向服务器发起了http请求,tcp连接; 因为tcp协议时面向连接的,所以在传输数据前必须建立连接,即三次握手;tcp连接建立后,浏览器开始向服务器发送http请求报文
5 收到请求 服务器收到浏览器发送的请求信息,返回响应
6 页面渲染 浏览器收到服务器发送的响应,显示页面内容。

什么是Cookie和Session,二者区别

 什么是SQL注入

SQL注入就是将原本的SQL语句的逻辑结构改变,使得SQL语句的执行结果和原本开发者的意图不一样;
比如说我们通过账号密码进行登录,首先需要进行查询判断:
"select * from t_user where name = "张三" and password = "123456"
如果我们把or 1 = 1作为拼接在密码末尾传入进来,执行查询的时候sql会变成
"select * from t_user where name = "张三" and password = "123456" or 1 = 1
密码永远都是成立的,所以,前面无论密码正确与否都会成功登录
我们使用预编译语句就可以避免这个问题,例如:JDBC中的PrepareStatement或MyBatis中#{}
将sql预编译,传参数的时候,不会改变sql语句结构,就可以避免注入。
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1094938.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

操作系统学习笔记5-内存管理

文章目录 1、CPU执行程序的基本过程2、CPU位数、OS位数、内存地址总线数、内存数据总线数目、逻辑地址位数、物理地址位数3、内存管理逻辑图4、编译、链接5、装入操作6、绝对装入7、静态重定位装入8、动态重定位装入9、内存保护10、单一连续分配10、固定分区分配11、动态分区分…

Java并发面试题:(三)sleep和wait方法区别,notify 和 notifyAll方法

sleep和wait wait, notify 和 notifyAll这些方法不在thread类里面? JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。如果线程需要等待某些锁那么调用对象中的wait()方法就有意义了。如果wait()方法定义在Thread类中,线…

文件操作合集 - C语言

前言 由于我们每次打开程序写入的数据都是在内存中处理,关闭程序就直接没有了,下次还需要重新进行操作录入数据等,这里我们就可以使用文件来保存数据,更加持久化,下面我们基于c语言来介绍一些文件操作. 文件指针: 文件的打开和关闭 文件在读写之前应该先打开文件,在…

Linux:进程控制

目录 一、进程创建 写时拷贝 二、进程终止 echo $? 如何终止进程 _exit与exit 三、进程等待 进程等待的必要性 进程等待的操作 wait waitpid status 异常退出情况 status相关宏 options 四、进程程序替换 1、关于进程程序替换 2、如何进行进程程序替换 程序…

记录一次典型oom的处理过程

背景 有同学反馈收到应用RT的报警,其中的流量都来自于网关集群中的一台机器。因为负责网关,就上去看了下并进行排查。整体是一个比较明显的oom,这里只是记录下排查过程,老司机可以略过了。 初步现象 常规步骤,使用t…

maven 新建模块 导入后 按Ctrl 点不进新建模块pom定义

新建的ruoyi-common-mybatisplus 模块,导入一直不正常 画出的模块一直导入不进来 这是提示信息 这是正常的提示信息 加上 <version>3.6.3</version> 后,才一切正常

Bootstrap的导航菜单组件相关知识

目录 01-最基本的导航示例02-设置导航的对齐方式02-1-设置导航在水平方向上的对齐方式 02-2-设置导航在垂直方向上进行布局03-设计标签页导航04-带下拉菜单的标签页导航05-设计胶囊式导航05-1-基本的胶囊式导航05-2-带下拉菜单的胶囊式导航 06-让导航菜单项可以切换(激活导航菜…

精品基于django的高校竞赛比赛管理系统Python

《[含文档PPT源码等]精品基于django的高校竞赛管理系统》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#xff1a;JavaScri…

宝塔面板部署express以及MySql项目

第一次在宝塔面板上部署express和MySql项目&#xff0c;部署过程一直跑不通接口&#xff0c;特此记录一下。 在部署的时候&#xff0c;建议第一步把数据库MySql给跑通&#xff0c;中间好多原因是由于数据库的原因给引起的。 一.连接数据库 &#xff08;1&#xff09;在宝塔面…

IP 协议的相关特性(部分)

IP 协议的报文格式 4位版本号&#xff1a; 用来表示IP协议的版本&#xff0c;现有的IP协议只有两个版本&#xff0c;IPv4&#xff0c;IPv6。 4位首部长度&#xff1a; 设定和TCP的首部长度一样 8位服务类型&#xff1a; &#xff08;真正只有4位才有效果&#xff09;&#xf…

教你快速解决unity无法添加脚本bug

原因一 就是报错的字面意思&#xff0c;文件名与类名不一致&#xff01; 原因二 与版本不兼容的汉化导致系统出错&#xff01; 解决办法一 使用原版本自带的英文显示 解决办法二 更换汉化包 我其实更加推荐使用英文版本的Unity&#xff01;

Rust闭包 - Fn/FnMut/FnOnce traits,捕获和传参

Rust闭包: 是一类能够 捕获周围作用域中变量 的 函数 |参数| {函数体} 参数及返回值类型可推导&#xff0c;无需显示标注类型唯一性&#xff0c;确定后不可更改函数体为单个表达式时&#xff0c;{}可省略 文章目录 引言1 分类 Fn / FnMut / FnOnce2 关键词 move3 闭包作为参数…

MySQL8安装步骤

本次安装所需版本为MySQL8.0.24,客户端工具选用的是Navicat11. 大家可以进入官网下载其它版本&#xff0c; 1.双击安装文件 2.等待一段时间进入以下界面 3.选择Custom,点击Next 4.进入以下界面&#xff0c;需要C2019的环境&#xff0c;选中此行然后Execute执行。 5.点击Exe…

论文解析——一种多核处理器直连接口QoS的设计与验证

作者 罗莉&#xff0c;周宏伟&#xff0c;周理&#xff0c;潘国腾&#xff0c;周海亮&#xff08; 国防科技大学&#xff09; 刘彬 &#xff08; 武警贵州省总队&#xff09; 摘要 多核处理器直接互连构建多路并行系统&#xff0c;一直是提高高性能计算机并行性的主要方式。…

【Hello Algorithm】暴力递归到动态规划(三)

暴力递归到动态规划&#xff08;三&#xff09; 最长公共子序列递归版本动态规划 最长回文串子序列方法一方法二递归版本动态规划 象棋问题递归版本动态规划 咖啡机问题递归版本动态规划 最长公共子序列 这是leetcode上的一道原题 题目连接如下 最长公共子序列 题目描述如下…

三种对象注入的区别以及@Autowired和@Resource的区别

文章目录 1. 对象注入1.2 属性注入1.2.1 属性注入的优缺点 1.3 Setter方法注入1.3.1 Setter注入的优缺点 1.4 构造方法注入&#xff08;官方推荐&#xff09;1.4.1 构造方法的优缺点 1.5 Resource与Autowired区别 1. 对象注入 获取Bean对象也称为对象注入/对象装配&#xff0c…

Linux:Termius连接本地虚拟机与虚拟机快照

Termius连接本地虚拟机与虚拟机快照 1. Termius连接本地虚拟机2. 虚拟机快照与还原2.1 设置快照以及恢复 附录 1. Termius连接本地虚拟机 ifconfig -a 查看配置 连接成功 2. 虚拟机快照与还原 在学习阶段我们无法避免的可能损坏Linux操作系统。 如果损坏的话&#xff0c;重新…

FPGA复习(功耗)

减小功耗 就得减小电流 电流和CF有关&#xff08; C: 电容&#xff08;被门数目和布线长度影响&#xff09; F:时钟频率&#xff09; 方法大纲 减小功耗&#xff1a;1 时钟控制 2输入控制 3减小供电电压 4双沿触发器 5修改终端 同步数字电路降低动态功耗&#xff1a;动态禁止…

零食百货经营商城小程序的作用是什么

零食可以只指某款单品&#xff0c;也可以是一堆各品牌食品&#xff0c;其行业涵盖人群广泛&#xff0c;主要以零售和批发为主&#xff0c;不受限制&#xff0c;各地从业商家也非常多&#xff0c;但随着线上电商崛起&#xff0c;零食经营痛点也逐渐凸显。 通过【雨科】平台搭建零…

Elasticsearch实现检索词自动补全(检索词补全,自动纠错,拼音补全,繁简转换) 包含demo

Elasticsearch实现检索词自动补全 自动补全定义映射字段建立索引测试自动补全 自动纠错查询语句查询结果 拼音补全与繁简转换安装 elasticsearch-analysis-pinyin 插件定义索引与映射建立拼音自动补全索引测试拼音自动补全测试繁简转换自动补全 代码实现demo结构demo获取 自动补…