【Java校招面试】基础知识(六)——计算机网络

news2024/12/25 12:34:20

目录

  • 前言
  • 一、TCP协议 / UDP协议
  • 二、HTTP协议
  • 后记


前言

本篇主要介绍计算机网络的相关内容。

“基础知识”是本专栏的第一个部分,本篇博文是第六篇博文,如有需要,可:

  1. 点击这里,返回本专栏的索引文章
  2. 点击这里,返回上一篇《【Java校招面试】基础知识(五)——GC》

一、TCP协议 / UDP协议

1. 建立TCP连接为什么需要三次握手,两次可不可以,为什么?
在这里插入图片描述

三次握手的原因是确保双方都能够收发数据。两次握手的话,由于没有第三次确认,可能会出现以下情况:

  • 客户端发送了连接请求,但是等待了一段时间后没有收到服务器的确认,于是认为连接失败,重新发送连接请求。但是这个时候第一次请求已经失效了,如果服务器在这个时候收到了第一个请求,就会误认为这是一个新的连接请求,从而建立了两条连接。
  • 如果服务器发送了确认,但是没有收到客户端的确认,服务器就会认为连接建立失败,但是客户端依旧认为连接建立成功。这样服务器就会浪费资源,因为他认为这条连接已经建立成功,但是实际上并没有建立成功。

因此,通过三次握手,可以确保双方都能够收发数据,且正确初始化Sequence的值,sequence值标识两端传输的报文的序号,保证其不会乱序。避免了以上问题的发生。

02. TCP连接首次握手的风险
服务器收到客户机的SYN,回复SYN + ACK后未收到ACK确认。服务器会重发SYN + ACK直至超时,Linux下默认重试5次,间隔1s、2s、4s、8s、16s,在第5次发送至后等待32秒,直至共63秒后断开连接。

服务器会因此遭受 SYN Flood攻击风险。

SYN Flood攻击: 它利用TCP协议中的SYN包(同步包)来占用服务器资源。攻击者发送大量的SYN包给服务器,但不完成握手过程,从而耗尽服务器的资源,导致服务器无法响应合法的请求。这种攻击通常是通过多个IP地址或者使用伪造的IP地址来进行的,目的是使服务器无法正常工作,导致服务中断或者崩溃。

03. 针对SYN Flood攻击的防范措施
启用SYN Cookie: Linux下,SYN队列满后,通过tcp_syncookies参数回发SYN Cookie。若为正常连接,客户机会回发SYN Cookie,即使队列已满也可以直接建立连接。这样就可以过滤掉大量的伪造连接请求,减轻攻击影响。

04. 建立TCP连接之后,如果客户机或服务器出现故障,会发生什么?
TCP连接具有保活机制。如果在一段保活时间内,连接处于非活动状态,则向对方发送保活探测报文,如果没有收到响应报文,就继续尝试,直到达到保活探测数,仍未收到响应则中断连接。

05. 断开TCP连接时,客户机TIME_WAIT状态的作用是什么?
TIME_WAIT状态是指在TCP连接关闭后,等待一段时间以确保所有的数据包都被接收或重传后才彻底关闭连接的状态。它的作用是防止已经关闭的连接后续的数据包干扰新的连接,避免出现“错误的连接”问题。在TIME_WAIT状态下,该连接的端口号仍然被保留,以便能够处理该连接的任何遗留数据。一般来说,TIME_WAIT状态持续时间为2倍的MSL(Maximum Segment Lifetime),MSL通常为2分钟。

06. 断开TCP连接为什么需要四次挥手?
在这里插入图片描述

为了确保数据能够完整传输。
断开TCP连接需要四次挥手的原因是因为TCP是全双工协议,即双方都可以向对方发送数据。在断开连接时,双方都要发送确认信息,以确保对方已经收到自己的断开请求。因此,需要四次挥手来完成断开连接的过程。

07. 服务器出现大量CLOSE_WAIT状态的TCP连接的原因

  • 原因: 客户机关闭连接,但服务器忙于读或写数据,没有及时关闭连接。

  • 解决方案:
    1) 检查代码: 特别是释放资源的部分;
    2) 检查配置: 特别是处理请求的线程配置。

08. TCP/IP模型与OSI七层模型的对比

OSI七层模型TCP/IP模型功能协议数据单元(PDU)对应协议对应设备
应用层应用层文件传输,电子邮件,虚拟终端数据(data)HTTP、FTP、SMTP、DNS、DHCP、SNMP、Telnet 计算机
表示层数据格式化,代码转换,数据加密
会话层建立或解除与别的节点的联系
传输层传输层提供端对端的连接段(segment)TCP、UDP
网络层网络层为数据包选择路由包(package)IP、ICMP、RIP、OSPF、BGP、IGMP路由器
数据链路层链路层传输有地址的帧,错误校验帧(frame)SLIP、CSLIP、PPP、ARP、RARP、MTU交换机、网桥
物理层以二进制形式在物理媒介上传输数据比特(bit)ISO2110、IEEE802、IEEE802.2中继器、集线器

09. TCP协议如何实现可靠的传输?
1) 数据分段并编号: 应用数据被分成一个或多个TCP段,每个段都有一个序号确认号。接收方使用这些号码来确认已收到的数据和请求缺失的数据。
2) 校验和: TCP协议使用校验和来检测数据是否被损坏或篡改。如果数据被发现损坏或篡改,TCP会丢弃该数据,并要求重新发送。
3) 确认重传机制: 发送方使用超时重传机制来确保数据能够到达接收方。如果发送方没有收到确认信息,就会重传该数据。
4) 流量控制: 发送方和接收方都维护一个拥塞窗口大小的变量,以确保网络不会过载。如果网络拥塞,发送方会减小窗口大小,从而减少发送的数据量。
5) 拥塞控制: 通过监控网络的拥塞状态,动态调整数据传输速度数据包发送频率,以避免网络拥塞和丢包,从而保证数据传输的可靠性和高效性。

10. 确认重传机制是什么?
在发送一个数据之后,就开启一个定时器,若是在这个时间内没有收到发送数据的ACK确认报文,则对该报文进行重传,在达到一定次数还没有成功时放弃并发送一个复位信号。

  • 累计确认: 累计确认就是TCP协议的确认方法,TCP使用可变长度报文段来发送数据,重传时,报文段数据可能会比原报文段数据包含更多的数据,因此对数据报和报文段无法进行简单的确认。TCP使用流序号对流中的一个位置进行确认,即序号和确认号一一对应,接收方使用序号将报文段重新排序,且以正确接收到的流的最长连续前缀进行确认。

  • 超时重传: 超时时间计算是开启定时器的设定时间,从而保证网络资源利用率,避免因定时器的时间(RTO)不确定而影响网络传输效率。

  • 快速重传: 要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时捎带确认。

11. 流量控制中的滑动窗口协议是什么?
滑动窗口协议是一种流量控制机制,用于确保发送方和接收方之间的数据传输的可靠性。

其工作流程如下:
1) 发送方将数据分成多个数据包,并按顺序发送给接收方。
2) 接收方在接收到数据包后,将其存储在缓冲区中,并向发送方发送确认消息(ACK),表示已成功接收。
3) 发送方收到确认消息后,将窗口向前滑动一个位置,表示已成功发送了一个数据包,并准备发送下一个数据包。
4) 如果接收方未能接收到数据包,则不会发送确认消息。发送方会等待一段时间,如果仍未收到确认消息,则会重新发送该数据包。
5) 发送方的窗口大小取决于接收方的缓冲区大小。如果接收方的缓冲区已满,则发送方会停止发送数据包,直到接收方空出缓冲区。
6) 如果在数据传输过程中发生丢包或错误,发送方会收到接收方的重传请求,并重新发送丢失的数据包。
7) 如果发送方没有收到确认消息或重传请求,则会重新发送数据包,直到接收方确认已成功接收。

12. 接收窗口和发送窗口大小一样吗?设置越大越好吗?
接收窗口一般 >= 发送窗口,但不是越大越好。当接收窗口大到一定程度,非但对降低丢包率的不会有更大的影响,反而会增大内存消耗。

13. UDP协议的特点
1) 面向非连接;
2) 不维护连接状态,支持同时向多个客户端传输相同的消息;
3) 数据包报头只有8个字节,额外开销较小;
4) 吞吐量只受限于数据生成速率、传输速率传输速率以及机器性能;
5) 尽最大努力交付,不保证可靠交付,不需要维护复杂的链接状态表;
6) 面向报文,不对应用程序提交的报文信息进行拆分或者合并。

14. TCP协议和UDP协议的区别

协议是否面向连接可靠性有序性速度量级适用场景
TCP可靠有序重量级上传、下载文件等需要传输的数据具有高可靠性的场景
UDP不可靠无序轻量级视频流、音频流传输这类要求快、流畅、但数据可靠性要求不是很高的场景

二、HTTP协议

HTTP协议(Hypertext Transfer Protocol,超文本传输协议)是一种用于传输超文本数据的协议。它是一种客户端-服务器协议,客户端通过发送HTTP请求与服务器交互,服务器通过发送HTTP响应来响应客户端请求。HTTP协议是基于TCP/IP协议的,HTTP请求和响应的数据都是通过TCP连接传输的。HTTP协议是Web应用程序的基础,通过HTTP协议,浏览器可以获取Web服务器上的各种资源,如网页、图片、视频、音频等。

01. HTTP协议的主要特点
1) 支持支持额客户/服务器模式
2) 简单快速
3) 灵活,允许传输任意类型的数据对象。
4) 无连接,限制每次连接只处理一个请求,服务端处理完请求并收到客户端的应答之后就断开连接。
5) 无状态

02. 一个HTTP请求从发起请求到响应的过程
1) 客户端和服务端TCP端口(默认端口号80)建立一个TCP套接字连接;
2) 客户端发送HTTP请求;
3) 服务端接收请求并返回HTTP响应;
4) 服务端释放TCP连接(1.0版本中使用close方式,服务端直接断开连接;1.1中使用keep alive,服务端会保持连接一定的时间,在此期间客户端可以继续发送请求);
5) 客户端解析HTTP响应内容。

03. 在浏览器地址栏输入URL,按下回车键之后经历的流程
1) DNS解析: 浏览器根据URL逐层查询DNS缓存,解析域名所对应的IP地址。DNS缓存由近到远依次是:浏览器缓存、本地缓存、路由器缓存、IPS服务器缓存、根域名服务器缓存、顶级域名服务器缓存。
2) 建立TCP连接: 根据IP地址和对应的端口号建立TCP连接(三次握手)。
3) 发送HTTP请求;
4) 服务器处理请求并返回包含页面信息的HTTP响应;
5) 浏览器收到响应,解析渲染页面;
6) 断开HTTP请求: 浏览器释放TCP连接(四次挥手)。

04. 常见的HTTP状态码

  • 1xx: 指示信息,表示请求已接收,继续处理
  • 2xx: 成功,表示请求已被成功接收、理解、接受
    • 200, OK: 正常返回信息
  • 3xx: 重定向,要完成请求必须进行更进一步的操作
    • 301, 永久重定向: 请求的资源永久分配了新的url,以后应使用新url
    • 302, 临时重定向: 请求的资源临时分配了新的url
  • 4xx: 客户端错误,请求有语法错误或请求无法实现
    • 400, Bad Request: 客户端请求有语法错误,不能被服务器理解
    • 401, Unauthorized: 请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
    • 403, Forbidden: 服务器收到请求,但是拒绝提供服务
    • 404, Not Found: 请求资源不存在
  • 5xx: 服务器错误,服务器未能实现合法的请求
    • 500, Internal Server Error: 服务器发生了不可预期的错误
    • 503, Server Unavailable: 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

05. 常用的HTTP请求method
HTTP请求的method有GETPOSTHEADOPTIONSPUTPATCHDELETETRACECONNECT,最常用的是POSTGET

  • 区别:
    1) HTTP报文层面: GET将请求参数放在URL中,POST放在报文体(即Body)中。
    2) 幂等性: 符合密等性的请求,请求一次和请求多次的结果一致。使用GET的请求应该符合幂等性,使用POST的请求应该不符合幂等性。
    3) 其他层面: 使用GET的请求可以被缓存、被存储(因为参数都在URL中),而POST不行。

06. Cookie和Session的区别

  • Cookie
    由服务器发给客户端的特殊信息,以文本的形式存放在客户端。客户端再次请求的时候,会把Cookie回发。服务器接收后,会解析Cookie生成与客户端相对应的内容。

  • Session
    服务端的机制,在服务器上保存的信息。解析客户端请求并操作session id,按需求保存状态信息。

  • 区别

    • Cookie数据存放在客户端,Session存放在服务端;
    • Session相对于Cookie更安全;
    • 若考虑减轻服务器负担,可以使用Cookie。

07. HTTP和HTTPS的区别
由于HTTP使用明文传输数据,不具备安全性。HTTPS引入了SSL(Security Socket Layer,安全套接字层)来堆传输的数据进行加解密。

  • SSL:

    • 为网络通信提供安全及数据完整性的一种安全协议;
    • 位于TCP与应用层之间,是操作系统对外的API,SSL3.0后更名为TLS;
    • 采用身份验证和数据加密保证网络通信的安全和数据的完整性。
  • 区别:

    • HTTPS需要到CA申请证书,HTTP不需要;
    • HTTPS密文传输,HTTP明文传输;
    • 连接方式不同,HTTPS默认使用443端口,HTTP使用80端口;
    • HTTPS = HTTP + 加密 + 认证 + 完整性保护,比HTTP安全。

08. HTTPS传输数据的流程
1) 浏览器将支持的加密算法信息发送给服务器;
2) 服务器选择一套浏览器支持的加密算法,以证书的形式回发浏览器;
3) 浏览器验证证书合法性,并结合证书公钥加密信息加密信息发送给服务器;
4) 服务器使用私钥解密信息,验证哈希,加密响应信息回发浏览器;
5) 浏览器解密响应信息,并对信息进行验证,之后进行加密交互数据。

09. socket
是对TCP/IP协议的抽象,是操作系统对外开放的接口

socket通信的流程:
在这里插入图片描述
1) 创建socket: 首先要创建一个socket对象,该对象表示一个通信的端点,需要指定协议和地址族。
2) 绑定地址: 将socket绑定到一个具体的IP地址和端口上,以便其它的进程能够找到它。
3) 监听连接: 如果是服务器端,需要调用listen函数,来监听客户端的连接请求。
4) 接收连接: 当客户端请求连接时,服务器端会调用accept函数,来建立一个新的socket对象,用于与客户端进行通信。
5) 发送和接收数据: 用send函数来发送数据,用recv函数来接收数据。
6) 关闭连接: 通信结束后,需要调用close函数来关闭socket。

以上就是socket通信的基本流程。不同的协议或应用场景下,会有一些特别的处理,但基本流程是大致相同的。


后记

计算机网络相关的知识点是非常复杂多样的,汇聚了成千上万的先哲在开拓道路上的发现、研究和试验结果。上学的时候我们需要用一个学期去学完一本厚厚的书。因此这里不可能详尽得照搬书中的所有内容,仅将面试中的高频考点提出来列举在这里。如果想要系统化地学习计算机网络相关的知识,建议买一本书来读。

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

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

相关文章

Leetcode303. 区域和检索 - 数组不可变

Every day a leetcode 题目来源&#xff1a;303. 区域和检索 - 数组不可变 解法1&#xff1a;暴力 代码&#xff1a; class NumArray { public:vector<int> v;NumArray(vector<int> &nums){v nums;}int sumRange(int left, int right){int sum 0;for (in…

ChatGPT镜像网站【免费白嫖】

文章目录 前言说明网站 前言 ChatGPT是一种基于OpenAI GPT&#xff08;Generative Pretrained Transformer&#xff09;模型的聊天机器人&#xff0c;它可以对用户提出的问题做出回答&#xff0c;同时还能够进行精准的语言理解和回复&#xff0c;较好地满足了人们与机器人之间…

避免使用第三方工具完成电脑环境检测

0. 简介 在之前配置各种深度学习环境的时候经常需要先检测一下电脑的软硬件环境&#xff0c;其实整个过程比较重复和固定&#xff0c;所以我们是否有可能一键检测Python版本、PIP版本、Conda版本、CUDA版本、电脑系统、CPU核数、CPU频率、内存、硬盘等内容这是很多Deepper苦恼…

[架构之路-183]-《软考-系统分析师》-13-系统设计 - 高内聚低耦合详解、图解以及技术手段

目录 第1章 什么是高内聚低耦合 1.1 概念 1.2 目的 1.3 什么时候需要进行高内聚低耦合 1.4 什么系统需要关注高内聚、低耦合 第2章 分类 2.1 内聚的分类 2.2 耦合的分类 第3章 增加高内聚降低耦合度的方法 3.1 增加高内聚 3.2 降低耦合度 第1章 什么是高内聚低耦…

SpringCloud_Gateway服务网关

文章目录 一、SpringCloudGateway服务网关概论1、SpringCloudGateway服务网关概论2、SpringCloudGateway的三大核心概念 二、SpringCloudGateway的路由及断言1、子模块项目SpringCloudGateway的搭建2、SpringCloudGateway_Java API构建路由3、SpringCloudGateway的动态路由功能…

cmd 批量ping命令

cmd 批量ping命令 1、批量ping 1个网段2、批量ping多个网段 1、批量ping 1个网段 ping 1个网段 for /l %X in (2,1,254) do (ping -n 2 10.1.2.%X && echo 10.1.2.%X >> ok.txt || echo 10.1.2.%X >> no.txt)命令说明&#xff1a; %l 表示在(2,1,254) 按…

免费矢量图标网站都有哪些,推荐这10个

矢量图标是我们日常设计应用程序和网页过程中不可缺少的元素之一。通过小矢量图标&#xff0c;我们可以快速方便地实现视觉指导和功能划分。 但在创作中&#xff0c;设计师往往需要花费大量的时间和精力来寻找不同网站的矢量图标&#xff0c;以满足他们的设计需求&#xff0c;…

电子价签能给生鲜零售带来什么?

生鲜零售 变价难 超市中的水果、蔬菜、鱼肉海鲜等商品&#xff0c;往往会受季节变化、运输和储存成本、自然环境引起的生产成本、供需关系等因素影响&#xff0c;其商品价格变动比较频繁。如不能及时更新价格&#xff0c;容易影响商品的销售&#xff0c;进而影响超市的盈利能…

asp.net基于web的大学生交友网站shfw9294程序

为社会的和谐做出了贡献。 通过网络&#xff0c;不同地区的人员可跨越时间、地点进行交流。建设一个安全、可靠、开放、纯净的大学生交友网站系统&#xff0c;为中山市大学生提供一个使用方便的、 界面美观的交友园地是本系统的主要目的。 系统使用Visual studio.net2010作为系…

【计算机网络】总结复习(1)

本文主要记录在看小林coding 时的一些体会&#xff0c;会记录一些我认为重要的知识点以及感受 网络基础篇 osi 七层协议 tcp/ip 四层协议 应用层 传输层 网络层 网络接口层 实际场景&#xff1a; 输出网址 到 网页显示 过程url 解析&#xff08;协议web 服务器 数据源路径…

智慧城市规划数字化管理:数字孪生技术的创新应用

随着智能城市的不断发展&#xff0c;数字孪生技术也开始在智慧城市的建设中得到了广泛应用。数字孪生作为一种数字化的复制技术&#xff0c;它可以模拟真实世界中的实体和过程。 在城市规划方面&#xff0c;数字孪生可以帮助城市规划师更加直观地了解城市的整体规划和发展趋势&…

菜鸡shader2:L2基于BlinnPhong假环境反射,生锈材质

目录 假环境反射材质&#xff08;不锈钢材质&#xff09;生锈材质 假环境反射材质&#xff08;不锈钢材质&#xff09; 先放上最终图&#xff1a; 处理高光部分&#xff1a; 这里是phong模型不是blinnphong。应用观察方向的反射方向和光方向点乘算出高光&#xff0c;然后重…

PHP+vue大学生心理健康评价和分析系统8w3ff

本整个大学生心理健康管理系统是按照整体需求来实现各个功能的&#xff0c;它可以通过心理健康测评来检测大学生的心理健康&#xff0c;并且给予预警&#xff0c;还可以预约医生来解决问题。并且&#xff0c;管理员可以查看用户信息&#xff0c;发布一些关于心理健康的文章。该…

CVE-2023-29489 cPanel XSS漏洞分析研究

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 如果文章中的漏洞出现敏感内容产生了部分影响&#xff0c;请及时联系作者&#xff0c;望谅解。 一、漏洞原理 漏洞简述 cPa…

MySQL之Log Buffer详解

前言 本文已收录在MySQL性能优化原理实战专栏&#xff0c;点击此处浏览更多优质内容。 上一篇文章MySQL之Doublewrite Buffer详解首次提到Redo Log的概念&#xff0c;Redo Log是数据库体系架构中非常重要的一个模块&#xff0c;它能保证数据库的Crash-safe&#xff08;崩溃恢复…

Linux Docker 搭建WordPress个人博客(避坑篇)

本文主要参考文章&#xff1a;Docker实战&#xff1a;Docker安装WordPress&#xff0c;快速搭建自己的博客 但我在参考过程中踩坑较多&#xff0c;特此记录下 1、What is WordPress 官网&#xff1a;https://wordpress.com/zh-cn/ wordpress是世界上应用最广泛的开源CMS程序…

Kotlin中的密封类和密封接口

密封类和密封接口是 Kotlin 中允许创建受限类层次结构的两个特性。这两个构造用于定义一组有限的可能子类型&#xff0c;并防止在声明的层次结构之外定义其他子类型。 密封类 密封类是一个可以被子类化的类&#xff0c;但只能在声明它的同一个文件中进行子类化。这意味着密封…

内网穿透(ngrock)

什么是内网穿透&#xff1f; 内网穿透&#xff0c;即NAT穿透&#xff0c;网络连接时术语&#xff0c;计算机是局域网内时&#xff0c;外网与内网的计算机节点需要连接通信&#xff0c;有时就会出现不支持内网穿透。简单来说&#xff0c;就是让身处局域网的电脑&#xff0c;被大…

《基于深度学习模型的非接触式面部视频记录技术用于心房颤动的检测》阅读笔记

目录 一、论文摘要 二、论文十问 Q1: 论文试图解决什么问题&#xff1f; Q2: 这是否是一个新的问题&#xff1f; Q3: 这篇文章要验证一个什么科学假设&#xff1f; Q4: 有哪些相关研究&#xff1f;如何归类&#xff1f;谁是这一课题在领域内值得关注的研究员&#xff1f; …

python安装教程(新手)(超详细)

python安装教程 手把手&#xff0c;简单的教你搭建python的开发环境 1.环境下载 1.下载地址 下载的时候要注意自己电脑的版本和python版本之间的关系。 我的是win10&#xff0c;用的是3.9.0&#xff0c;目前最新的3.11.x 老电脑最好下载3.7.0版本及一下的 Download Python | P…