计算机网络

发布于:2025-06-14 ⋅ 阅读:(17) ⋅ 点赞:(0)

IP协议包含哪些字段?

IP协议包含字段如下:

4位版本号:指定IP协议的版本,对于IPv4来说就是4

4位头部长度:IP头部长度有多少个4字节,所以头部最大长度就是15*4=60字节

8位服务类型:3位优先权(已弃用),4位TOS字段,1位保留字段(必须设置为0)。4为TOS为:最小

延时,最大吞吐量,最高可靠性,最小成本,这四个只能选择一个

16位总长度:IP数据报整体占多少字节

16为标识:唯一的标识主机发送的报文,IP报文在数据链路层被分片,那么每一个片中的标识都是

相同的

3位标志字段:第一位保留,第二位置1表示进制分片(报文长度超过MTU,丢弃报文),第三位更多

分片,最后一个分片是1,其他是0

13位分片偏移:相对于原始IP报文开始处的偏移

8位生存时间:数据报到达目的地的最大报文跳数,每经过一个路由,TTL-=1,一直到0都没有到

达目的地,报文丢弃。

8位协议:表示上层协议类型,把IP交给TCP还是UDP,其中ICMP是1,TCP是6,UDP是17

16位头部校验和:使用CRC校验,鉴别头部是否损坏

32位源地址和32位目标地址:表示发送端和接收端

UDP会不会产生粘包问题呢?

TCP为了保证可靠传输并减少额外的开销(每次发包都要验证),采用了基于流的传输,基于流的传输不认为消息是一条一条的,是无保护消息边界的(保护消息边界:指传输协议把数据当做一条独立的消息在网上传输,接收端一次只能接受一条独立的消息)。UDP则是面向消息传输的,是有保护消息边界的,接收方一次只接受一条独立的信息,所以不存在粘包问题。

TCP和UDP对于网络稳定性有什么要求?

1. TCP优缺点

优点:可靠、稳定

TCP的可靠体现在TCP在传输数据之前,会有三次握手来建立连接,而且在数据传递时,有确

认、窗口、重传、拥塞控制机制,在数据传完之后,还会断开连接用来节约系统资源。

缺点:慢,效率低占用系统资源高,易被攻击

在传递数据之前要先建立连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞机制等都会消耗大量时间,而且要在每台设备上维护所有的传输连接。然而,每个链接都会占用系统的CPU、内存等硬件资源。因为TCP有确认机制、三次握手机制,这些也导致TCP容易被利用,实现DOS、DDOS、CC等攻击。

2. UDP优缺点

优点:快,比TCP稍安全

UDP没有TCP拥有的各种机制,是一个无状态的传输协议,所以传递数据非常快,没有TCP的这些机制,被攻击利用的机制就少一些,但是也无法避免被攻击。

缺点:不可靠,不稳定

因为没有TCP的那些机制,UDP在传输数据时,如果网络质量不好,就会很容易丢包,造成数据的缺失。

3. 适用场景(网络稳定性要求)TCP:当对网络通讯质量有要求时,比如HTTP、HTTPS、FTP等传输文件的协议, POP、SMTP等邮件传输的协议 UDP:对网络通讯质量要求不高时,要求网络通讯速度要快的场景。 所以,TCP对网络稳定性要求高,而UDP相对弱一些。

https为什么采用混合加密机制?

参考回答

一方面,第一阶段的非对称加密,保证了对称密钥的安全性;另一方面,第二阶段的对称加密,可以提高加密/解密处理的速度,提高数据传输的效率。

答案解析

1. 为什么需要加密?

因为http的内容是明文传输的,明文数据会经过中间代理服务器、路由器、wifi热点、通信服务运营商等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了,他还可以篡改传输的信息且不被双方察觉,这就是中间人攻击。所以我们才需要对信息进行加密。最简单容易理解的就是对称加密

2. 什么是对称加密?

就是有一个密钥,它可以对一段内容加密,加密后只能用它才能解密看到原本的内容,和我们日常生活中用的钥匙作用差不多。 

3. 用对称加密可行吗?

如果通信双方都各自持有同一个密钥,且没有别人知道,这两方的通信安全当然是可以被保证 的(除非密钥被破解)。然而最大的问题就是这个密钥怎么让传输的双方知晓,同时不被别人知道。如果由服务器生成一个密钥并传输给浏览器,那这个传输过程中密钥被别人劫持弄到手了怎么办?之后他就能用密钥解开双方传输的任何内容了,所以这么做当然不行。换种思路?试想一下,如果浏览器内部就预存了网站A的密钥,且可以确保除了浏览器和网站A,不会有任何外人知道该密钥,那理论上用对称加密是可以的,这样浏览器只要预存好世界上所有HTTPS网站的密钥就行啦!这么做显然不现实。

所以我们就需要神奇的非对称加密

4. 什么是非对称加密?

有两把密钥,通常一把叫做公钥、一把叫做私钥,用公钥加密的内容必须用私钥才能解开,同样,私钥加密的内容只有公钥能解开。

5. 用非对称加密可行吗?

鉴于非对称加密的机制,我们可能会有这种思路:服务器先把公钥直接明文传输给浏览器,之后浏览器向服务器传数据前都先用这个公钥加密好再传,这条数据的安全似乎可以保障了!因为只有服务器有相应的私钥能解开这条数据。然而由服务器到浏览器的这条路怎么保障安全?如果服务器用它的的私钥加密数据传给浏览器,那么浏览器用公钥可以解密它,而这个公钥是一开始通过明文传输给浏览器的,这个公钥被谁劫持到的话,他也能用该公钥解密服务器传来的信息了。所以目前似乎只能保证由浏览器向服务器 传输数据时的安全性(其实仍有漏洞,下文会说)。

6. 混合加密

非对称加密耗时,非对称加密+对称加密结合可以吗?而且得尽量减少非对称加密的次数。当然

是可以的,而且非对称加密、解密各只需用一次即可。以下就是加密过程:

(1)某网站拥有用于非对称加密的公钥A、私钥A’。

(2)浏览器像网站服务器请求,服务器把公钥A明文给传输浏览器。

(3)浏览器随机生成一个用于对称加密的密钥X,用公钥A加密后传给服务器。

(4)服务器拿到后用私钥A’解密得到密钥X。

(5)这样双方就都拥有密钥X了,且别人无法知道它。之后双方所有数据都用密钥X加密解密。完美!HTTPS基本就是采用了这种方案

HTTP是基于TCP还是UDP?

HTTP是基于TCP的。

网络OSI模型和TCP/IP模型分别介绍一下

OSI七层模型

应用层,负责给应用程序提供统一的接口;

表示层,负责把数据转换成兼容另一个系统能识别的格式;

会话层,负责通信会话;

传输层,负责端到端的数据传输;

网络层,负责数据的路由、转发、分片;

数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;

物理层,负责在物理网络中传输数据帧;

TCP/IP模型

TCP/IP 网络通常是由上到下分成 4 层,分别是应用层,传输层,网络层和网络接口层。

应用层 支持 HTTP、SMTP 等最终用户进+程

传输层 处理主机到主机的通信(TCP、UDP)

网络层 寻址和路由数据包(IP 协议)

网络接口层 网络接口层既是传输数据的物理媒介,也可以为网络层提供一条准确无误的线路

tcp、ip分别位于哪一层?

tcp 在传输层

ip 在网络层

应用层有哪些协议?

HTTP、HTTPS、CDN、DNS、FTP 都是应用层协议

HTTP报文有哪些部分?

请求报文和响应报文来说明。

请求报文:

请求行:包含请求方法、请求目标(URL或URI)和HTTP协议版本

请求头部:包含关于请求的附加信息,如Host、User-Agent、Content-Type等。

空行:请求头部和请求体之间用空行分隔。

请求体:可选,包含请求的数据,通常用于POST请求等需要传输数据的情况。

响应报文:

状态行:包含HTTP协议版本、状态码和状态信息。

响应头部:包含关于响应的附加信息,如Content-Type、Content-Length等。

空行:响应头部和响应体之间用空行分隔。

响应体:包含响应的数据,通常是服务器返回的HTML、JSON等内容。

HTTP常用的状态码?

HTTP 状态码分为 5 大类

1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际用到的比较少。

2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。

3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。

4xx 类状态码表示客户端发送的报文有误,服务器无法处理,也就是错误码的含义。

5xx 类状态码表示客户端请求报文正确,但是服务器处理时内部发生了错误,属于服务器端的错误码。

其中常见的具体状态码有:

200:请求成功;

301:永久重定向;302:临时重定向;

404:无法找到此页面;405:请求的方法类型不支持;

500:服务器内部出错。

HTTP返回状态301 302分别是什么?

3xx 类状态码表示客户端请求的资源发生了变动,需要客户端用新的 URL 重新发送请求获取资源,也就是重定向。

「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改用新的 URL 再次访问。

「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要用另一个 URL 来访问。

301 和 302 都会在响应头里使用字段 Location,指明后续要跳转的 URL,浏览器会自动重定向新的 URL。

http 502和 504 的区别?

502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上服务器接收到无效的响应。

504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器收到响应。

举一个例子,假设 nginx 是代理服务器,收到客户端的请求后,将请求转发到后端服务器(tomcat 等)。

当nginx收到了无效的响应时,就返回502。

当nginx超过自己配置的超时时间,还没有收到请求时,就返回504错误。

HTTP层请求的类型有哪些?

GET:用于请求获取指定资源,通常用于获取数据。

POST:用于向服务器提交数据,通常用于提交表单数据或进行资源的创建。

PUT:用于向服务器更新指定资源,通常用于更新已存在的资源。

DELETE:用于请求服务器删除指定资源。

HEAD:类似于GET请求,但只返回资源的头部信息,用于获取资源的元数据而不获取实际内容。

GET和POST的使用场景,有哪些区别?

  1. get 请求一般把传给服务器的数据放在query string上

Post 请求一般把传给服务器的数据放在body上

  1. Get请求大多数用来获取数据

   Post请求用来提交数据

  1. Get请求一般是幂等的,post请求一般不是幂等的
  2. Get 可以被缓存,post不能被缓存

GET 方法就是安全且幂等的,因为它是「只读」操作,无论操作多少次,服务器上的数据都是安全的,且每次的结果都是相同的所以,可以对 GET 请求的数据做缓存,这个缓存可以做到浏览器本身上(彻底避免浏览器发请求),也可以做到代理上(如nginx),而且在浏览器中 GET 请求可以保存为书签。

POST 因为是「新增或提交数据」的操作,会修改服务器上的资源,所以是不安全的,且多次提交数据就会创建多个资源,所以不是幂等的。所以,浏览器一般不会缓存 POST 请求,也不能把 POST 请求保存为书签。

HTTP的长连接是什么?

HTTP 协议采用的是「请求-应答」的模式,也就是客户端发起了请求,服务端才会返回响应,一来一回这样子。

由于 HTTP 是基于 TCP 传输协议实现的,客户端与服务端要进行 HTTP 通信前,需要先建立 TCP 连接,然后客户端发送 HTTP 请求,服务端收到后就返回响应,至此「请求-应答」的模式就完成了,随后就会释放 TCP 连接。

如果每次请求都要经历这样的过程:建立 TCP -> 请求资源 -> 响应资源 -> 释放连接,那么此方式就是 HTTP 短连接,如下图:

这样实在太累人了,一次连接只能请求一次资源。

能不能在第一个 HTTP 请求完后,先不断开 TCP 连接,让后续的 HTTP 请求继续使用此连接?

当然可以,HTTP 的 Keep-Alive 就是实现了这个功能,可以使用同一个 TCP 连接来发送和接收多个 HTTP 请求/应答,避免了连接建立和释放的开销这个方法称为 HTTP 长连接。

HTTP 长连接的特点是,只要任意一端没有明确提出断开连接,则保持 TCP 连接状态。

HTTP默认的端口是什么?

http 是 80,https 默认是 443。

HTTP1.1怎么对请求做拆包,具体来说怎么拆的?

在HTTP/1.1中,请求的拆包是通过"Content-Length"头字段来进行的。该字段指示了请求正文的长度,服务器可以根据该长度来正确接收和解析请求。

具体来说,当客户端发送一个HTTP请求时,会在请求头中添加"Content-Length"字段,该字段的值表示请求正文的字节数。

服务器在接收到请求后,会根据"Content-Length"字段的值来确定请求的长度,并从请求中读取相应数量的字节,直到读取完整个请求内容。

这种基于"Content-Length"字段的拆包机制可以确保服务器正确接收到完整的请求,避免了请求的丢失或截断问题。

HTTP为什么不安全?

HTTP 由于是明文传输,所以安全上存在以下三个风险:

窃听风险,比如通信链路上可以获取通信内容,用户号容易没。

篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。

冒充风险,比如冒充淘宝网站,用户钱容易没。

HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议,可以很好的解决了上述的风险:

信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。

校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾广告。

身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。

HTTP和HTTPS 的区别?

区别主要有以下四点:

HTTP 是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS 则解决 HTTP 不安全的缺陷,在 TCP 和 HTTP 网络层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输。

HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输。而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输

两者的默认端口不一样,HTTP 默认端口号是 80,HTTPS 默认端口号是 443。

HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。


网站公告

今日签到

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