计算机网络

发布于:2024-12-09 ⋅ 阅读:(122) ⋅ 点赞:(0)

1.网络协议是什么?

在计算机网络要做到有条不紊地交换数据,就必须遵守一些约定好的规则,比如交换数据地格式,是否需要发送一个应答信息。这些规则被称为网络协议。

分层结构

  1. 应用层:为计算机用户提供服务
  2. 表示层:数据处理,比如编解码,加密解密,压缩解压缩等
  3. 会话层:管理,建立,维护,重连应用程序之间的会话
  4. 传输层:为两台主机进程之间的通信提供通用的数据传输服务
  5. 网络层:路由和寻址(决定数据在网络的游走路径)
  6. 数据链路层:帧编码和误差纠正控制
  7. 物理层:透明地传送比特流传输

重要性

网络协议保证了网络通信的有序性和准确性。没有协议,网络设备之间就无法有效地进行通信。

2.三次握手 

三次握手本质就是确认通信双方收发数据的能力,是TCP用于建立可靠连接的过程。

  • 第一次握手:客户端想要和服务器建立连接,首先会向服务器发送一个带有SYN标志的TCP数据包,这个数据包还包含和客户端的初始序列号seq,称为x,序列号用于在后续的数据传输过程中对数据进行排序和确认。
  • 第二次握手:服务器收到客户端的SYN包后,会向客户端发送一个带有SYN和ACK标志的TCP数据包。这个数据包包含了服务器自身的初始序列号,称为y,同时确认收到客户端的序列号x,ack就是在收到的序列号基础上+1.
  • 客户端收到服务器的SYN和ACK包后,会向服务器发送一个带有ACK标志的TCP数据包。数据包中的确认号为y+1,表示收到服务器的序列号,到这,tcp连接建立成功,双方可以开始数据传输。

3.如果已经建立连接,客户端出现故障怎么办?

TCP保活机制

tcp协议设有保活计时器,服务器每收到一次客户端的数据,都会重新复位这个计时器,一般时间设置为2小时,若超过两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒发送一次,若一连发送10个探测报文都没有反应,服务器就认为客户端出现故障,就关闭连接。

应用层心跳机制

应用层可以自定义心跳机制,客户端定时向服务器发送心跳包,告知服务器自己仍处于活跃状态。若服务器在特定时间没有收到心跳包,则认为客户端出现故障,关闭连接。

服务器端超时设置

服务器在等待客户端数据时,设置一个合理的超时时间。一旦超过这个时间仍未到达任何客户端信息,服务器就认为客户端出现故障,中断连接。

4.四次挥手

四次挥手是TCP连接释放的过程。TCP是一种面向连接的,可靠的,基于字节流的传输层通信协议.当通信双方完成完成数据传输后,需要通过四次挥手来断开连接。

第一次挥手:客户端发送一个FIN报文段,其中FIN标志位为1,序列号为seq=“u‘,其中u是客户端的发送序列号。

第二次挥手:服务器收到报文段之后,会发送一个ACK报文段作为回应。ACK标志位被设置为1,确认序列号是收到的FIN报文段的序列号+1,这表示服务器已经收到客户端的关闭请求,但是服务器可能还有数据要发送给客户端。

第三次挥手:当服务器的数据也发送完毕后,它会发送一个FIN报文段给客户端,FIN标志位被设置为1.这个报文段的序列号是服务器当前发送的序列号。这表示服务器现在也没有数据要发送了,请求关闭连接。

第四次挥手:客户端收到服务器的FIN报文段后,会发送一个ACK报文段作为回应。ACK标志位被设置为1,确认序列号是收到的FIN报文段的序列号+1.这表示客户端已经收到服务器的关闭请求,连接正式关闭。

5.为什么TCP连接的时候是3次?2次不可以吗?

在两次握手中,服务端收到客户端的连接请求并回应后,就认为连接已经建立,但是无法确认客户端是否收到自己的回应。通过三次握手,客户端再次向服务端发送确认报文,服务端就能明确客户端已收到自己的相应,且客户端的接收和发送能力均正常,从而确保双方的收发能力都得到确认。

网络可能存在延迟,丢包等问题,导致客户端发送的第一个连接请求报文在网络中滞留。若两次握手,当滞留的请求报文延迟到达服务端时,服务端就认为这是一个新的连接请求并建立连接,分配资源,但此时客户端可能早已关闭或重新发送连接请求,导致服务端资源的浪费。

6.为什么TCP断开连接是四次?

TCP是全双工通信,这意味着数据可以在两个方向上同时传输。当客户端发起关闭连接的请求时,它表示的是自己不再2发送数据了,但此时客户端仍然可以接收来自服务器的数据。如果三次挥手的话,就可能出现服务器还有数据要发送,但是却被强制关闭连接的情况。 

7.为什么客户端发出第四次挥手的确认报文后要等2MSL的时间才能释放TCP连接?

MSL是指一个TCP报文段在网络中的最大生存时间。

当客户端发送第四次挥手的ACK报文后,这个报文可能会在传输过程中丢失。如果该ACK报文丢失,服务器会因为们没有收到确认而重新发送第三次挥手的FIN报文。

客户端等待2MSL时间,就能够保证在这个时间范围内,如果服务器重新发送FIN报文,客户端可以收到并再次发送ACK报文进行确认,从而保证服务器能够正常关闭连接。

8.HTTP和HTTPS的区别

定义:

  • HTTP:HTTP是超文本传输协议,它主要用于在Web浏览器和Web服务器之间传输超文本。比如HTML也没面。
  • HTTPS:它是HTTP基础上加入了SSL(安全套接层)/TLS(传输层安全协议)加密层。SSL/TLS协议采用对称加密和非对称加盟秘密相结合的方式来确保数据的安全性。

安全性方面:

  • HTTP:数据以明文形式传输。意味着数据传输过程中,信息是没有加密的。通过网络抓包工具可以很容易地看到用户在网页表单中输入的内容。
  • HTTPS:对传输的数据进行加密。当浏览器和服务器建立HTTPS连接时,会通过一系列的加密算法协商出一个加密密钥。之后,双方使用这个密钥对传输的数据进行加密和解密。

身法验证:

  • HTTP:没有提供有效的身份验证机制。客户端很难确定它正在与真正的服务器进行通信,服务器也无法验证客户端身份。可能导致中间人攻击,攻击者可以伪装成服务器或者客户端来获取信息。
  • HTTPS:通过数字证书来验证服务器的身份。数字证书是由权威的证书颁发机构颁发的,其中包含了服务器的公钥,服务器的名称等信息。当浏览器与服务器建立连接时,浏览器会验证证书的有效性,包含检查证书是否过期,颁发机构是否可信等。如果证书验证通过,浏览器就可以确定它正在和合法的服务器进行通信。

9.常见的HTTP状态码

HTTP状态码表示客户端HTTP请求的返回结果,标识服务器处理是否正常,表明请求出现的错误等。

HTTP状态码类别

类别         解释
1XX 接收的请求正在处理
2XX 请求正常处理完毕
3XX 重定向状态码,需要进行附加操作完成请求
4XX 服务器无法处理请求(客户端错误)
5XX 服务器处理请求错误

常见状态码

200 表示客户端发来的请求在服务器端被正确处理
301

永久重定向,表示资源已被分配新的URL

302 临时重定向,表示资源临时被分配了新的URL
400 请求报文存在语法错误
401 表示发送的请求需要通过HTTP认证的认证信息
403 表示对请求资源的访问被服务器拒绝
404 表示服务器上没有找到请求的资源
500 服务器端在执行请求时发生错误
501 表示服务器不支持当前请求所需要的某个功能
503 表示服务器暂时处于超负载或正在停机维护,无法处理请求
303 表示资源存在另一个URL,应使用GET方法获取资源

10.什么是对称加秘密与非对称加密?

  •  对称加密:对称加密是加密和解密使用相同的密钥。也就是发送发和接收方必须事先共享一个密钥,这个密钥用于对数据进行加密和揭秘操作。对称加密的加密和解密速度快,效率高,但是密钥在分发的过程中被窃取,整个加密系统就会被破解。

  • 非对称加密:非对称加密使用一对密钥,分别是公钥和私钥。公钥可以公开,任何人都可以获取,私钥则有所有者保密。数据发送方使用接收方的公钥对数据加密,接收方使用自己的私钥进行解密。即便公钥被获取,但是没有私钥也无法解密。但是加密解密速度慢,涉及复杂的数学运算。

11.Session,Cookie和Token的区别

Session

  • 定义:Session是一种存储在服务器端的用会话信息。它用于跟踪用户在网站中的一系列操作,在用户与网站交互过程中保持用户状态的一致性。
  • 原理:当用户首次访问1网站时,服务器会为该用户创建一个唯一的SessionID,并通过Cookie或者URL重写的方式将SessionID发送给客户端。
  • 优点:安全性较高。因为关键信息存储在服务器端,不易被客户端篡改。可以存储大量信息,因为服务器端的存储容量通常比客户端Cookie的存储容量大得多。
  • 缺点:会增加服务器负担。

Cookie

  • 定义:Cookie是一种存储在用户浏览器端的小型文本信息,由服务器发送给浏览器,并由浏览器存储在本地。主要用于在客户端记录用户状态信息或一些其他的相关数据。
  • 原理:当用户第一次访问一个网站时,服务器可以在响应头中设置Cookie,浏览器接收到Cookie后,会根据服务器设置的规则进行存储,通常会包含Cookie的名称,值,过期时间,路径等信息。在后续访问该网站的相同域下的页面时,浏览器会自动将存储的Cookie信息包含在请求头中发送给服务器,这样服务器就能识别用户并获取之前存储的相关信息。
  • 优点:简单易用,一定程度上减轻服务器的负担。
  • 缺点:安全性较低,容易受到脚本攻击获取用户信息。

Token

  • 定义:Token是一种身份验证的凭证,通常是一个包含用户信息的加密字符串。它用于在不同系统或服务之间进行安全的身份认证和授权。
  • 原理:在基于Token的认证系统中,用户登录后,服务器会根据用户的身份信息生成一个Token并返回给用户。用户在后续访问需要授权的资源时,需要将Token包含在请求中。例如,在一个移动端应用的后端 API 服务中,用户登录成功后,服务器生成一个 JSON Web Token(JWT),其中包含用户的身份标识、权限范围和过期时间等信息。用户在请求受保护的 API 资源时,将 JWT 包含在请求头中发送给服务器,服务器通过验证 JWT 的有效性来决定是否允许用户访问相应的资源。
  • 优点:无状态性.与Session不同,Token本身包含了足够的用户信息,服务器不需要存储额外的用户状态信息。例如,在一个微服务框架的电商系统中,不同的微服务可以通过验证Token来进行独立的用户授权,不需要共享Session状态。Token可以方便地在不同平台和设备之间使用。
  • 缺点:一旦Token被获取,攻击者就可以使用它来冒充用户今昔访问。虽然可以通过设置较短的有效期,使用加密等手段来提高安全性,但仍然存在安全风险。

12.请求体的格式

  1. 表单数据:主要用于HTML表单提交数据。数据以键值对的形式进行组织,键和值之间用等号建立,不同键值对之间用&符号连接。例如”username = user123&password = pass123“.适用场景:适用于简单的用户输入数据提交,比如登录表单,注册表单等。
  2. JSON数据:JSON是一种轻量级的数据交换格式。请求体中的数据以JSON对象或者数组的形式呈现。适用于前后端分离的框架。
  3. 文件上传:主要用于在表单中上传文件。请求体由多个部分组成,每个部分都有自己的头部和内容。
  4. 纯文本:请求体的内容就是简单的本文字符串,没有特殊格式要求。

以上就整理的计算机网络的内容,如果大家喜欢的话,记得点个关注~


网站公告

今日签到

点亮在社区的每一天
去签到