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的使用场景,有哪些区别?
- get 请求一般把传给服务器的数据放在query string上
Post 请求一般把传给服务器的数据放在body上
- Get请求大多数用来获取数据
Post请求用来提交数据
- Get请求一般是幂等的,post请求一般不是幂等的
- 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(证书权威机构)申请数字证书,来保证服务器的身份是可信的。