网络经典题

网络经典题

前言:

  • 今天跑去社康打第二针新冠疫苗啦~虽然过程有些曲折,开心的是最终还是成功打完了,手动比个耶,哈哈哈哈。
  • 很久没学习也没有写博客啦,和小伙伴约着一起打卡学习互相监督,我可不能第一天就食言哦。从柜子里拿出了几百年没用过的厚重笔记本,感觉太笨重了,就下单了ipad蓝牙键盘,以后打算用ipad写博客啦,希望可以坚持一段时间,养成每天学习的好习惯。

目录

一、HTTP和HTTPS的区别
二、HTTP协议和Socket区别,哪个协议更高效?
三、TCP和UDP的区别
四、TCP的三次握手、四次挥手
五、输入URL到显示网页发生了什么
六、OSI七层协议及每层作用
七、常见状态码
八、cookie和session的区别
九、get和post的区别
十、常见考点

一、HTTP和HTTPS的区别

1.1 介绍HTTP

http 特性:1、基于请求和响应;2、简单快速,灵活;3、无连接;4、无状态

HTTP协议是超文本传输协议,采用客户端/服务器的方式,它的特点是:
①无连接,早期网络传输突发性、瞬时性、通道空闲,因此每次只处理一个请求。建立在TCP连接的基础之上;
无连接解决:keep-live
②无状态,为了避免服务器占用,对事务处理没有记忆能力,不会记录任何信息
无状态解决:cookie和session[通过id读取]。cookie和session可以辅助记录客户端/服务器的状态

Cookie和session区别:
客户端/服务器;
有限制/无限制;
直接查找篡改/加密存在服务器中;
关闭浏览器消失/存在于服务器一段时间,消耗资源;

1.2 介绍HTTPS

https:http + 加密 + 认证 + 完整性保护

加密过程:
1、服务器公钥发给CA机构;
2、CA用私钥签署签名发证书;
3、服务器发送证书给客户端,客户端向CA查询身份;
4、客户端用公钥加密发送;
5、服务器用私钥解密

非对称加密和对称区别
1、加密解密过程[同一个,公私];
2、速度;
3、安全性

1.3 总结HTTP和HTTPS区别

  • HTTPS更安全以及所在层次不同
    (1)HTTP协议运行在TCP之上,不提供身份认证和数据加密,所有数据都是以明文的形式传输的;通过抓包工具可以分析其信息内容。
    (2)HTTPS是运行在SSL/TLS之上的HTTP协议,SSL/TLS运行在TCP之上。
    HTTPS协议是由SSL+HTTP协议构建的可进行加密传输和服务器端身份认证的网络协议。以对称加密的方式为传输的数据进行加密,用数字证书的方式提供服务器端的身份认证(但对称加密的密钥服务器方的整数进行了非对称加密),更为安全;

  • HTTPS比HTTP需要耗费更多的资源,响应速度也更慢

  • HTTPS需要申请证书;
    HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。而常见的HTTP协议则不需要证书。

  • HTTP和HTTPS是完全不同的连接方式,HTTP端口号是80,HTTPS的端口号是443

1.4 补充内容

SSL通信过程:
1、tcp;
2、客户端hello;
3、服务器hello;
4、服务器certificate证书报文;
5、客户端检查后发key change,包含随机密码;
6、客户端发送change cipher sp报文告诉服务器密钥变了;
7、客户端finish,来校验;
8、服务器change cipher,表示同意;
9、服务器发送finish校验;
10、http请求;
总结:交流密码的过程。

二、HTTP协议和Socket区别,哪个协议更高效?

2.1 总结HTTP协议和Socket区别:

(1)很多情况下,需要服务端主动向客户推送数据,保持客户端与服务端数据的实时与同步。但HTTP无法满足这一需求,Socket可以满足。

原因如下:

  • HTTP连接使用“请求—响应”方式。不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务端才能回复数据。

    若建立的是HTTP连接,则服务端需等到客户端发送一次请求后,才能将数据传回给客户端。

  • 此时若双方建立的是Socket连接,服务器就可直接将数据传送给客户端;

    Socket连接一旦建立,通信双方即可相互发送数据内容,直到双方连接断开。

(2)创建Socket连接时,Socket可支持不同的传输层协议(TCP或UDP)。而HTTP只能基于TCP。

  • Socket不仅能走TCP,还能走UDP。当使用TCP协议进行连接时,该Socket连接就是一个TCP连接。
  • 同HTTP不同的是,HTTP只能基于TCP。

(3)Socket效率高,至少不用解析HTTP报文头部的一些字段。

TCP总结

Ø 可靠传输的实现:滑动窗口 – 超时重传 – 选择确认

Ø 拥塞控制:慢开始 – 拥塞避免 – 快重传 – 快恢复

Ø 3次握手:1 – 发送SYN要建立,客户端进入SYNsent 2 – 发送ack,SYN允许建立-服务器进入SynRecived
3发送ack收到 – 一起estabListen

Ø 3次而非2/4 :超时又来 / 提高效率

Ø 4次握手:1 –
发送fin发完辣finWait1;2-发送ack知道了closeWait;0-发送未发完信息;3-fin发完辣lastACK;4-发送ack晓得timeWait

Ø 4次之后wait:1、确保送达;2、防止失效出现在下次中

Ø 与udp区别:可靠/不可靠;连接/无连接;字节/报文;开销大/小

三、TCP和UDP的区别

3.1 TCP

TCP特点 :面向连接、全双工,面向字节流、可靠传输、有拥塞控制、开销大
TCP首部字段:

  • 序号 seq
  • 确认号 ack
  • 控制位 ACK FIN SYN
  • 检验和(阿里问过)

如何实现可靠传输
校验和、排序(流量控制)、确认机制、重传机制、拥塞控制

2.拥塞控制
慢开始、拥塞避免、快重传、快恢复

TCP特点 :面向连接、全双工,面向字节流、可靠传输、有拥塞控制、开销大
UDP特点 :面向无连接、尽最大努力交付、面向报文、无拥塞控制、开销小
与udp区别:可靠/不可靠;连接/无连接;字节/报文;开销大/小

第一章提到了Socket可支持TCP和UDP传输层协议,那就讲一下TCP和UDP的区别吧。
在这里插入图片描述

(1)TCP是面向连接的,UDP是无连接的。
面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。

(2)数据传输形式不同。
TCP的数据传输以字节流的形式,TCP把数据看成一连串无结构的字节流。UDP的数据传输是以报文段的形式;

(3)TCP是全双工的可靠信道,UDP是不可靠信道。

  • TCP用检验和、标号、流量控制、拥塞控制、超时重传等机制保证TCP连接是可靠的,UDP则不保证可靠交付,只保证尽力交付;

  • 通过TCP连接传输的数据不会丢失,没有重复,并且按顺序到达;

    资料拓展:TCP连接可靠性原因:
    (a)为了确保消息传输的可靠性,TCP为每个分组提供序列号,并且还确保顺序接收发送到接收端实体的分组。
    (b) 然后,接收实体向成功接收的字节发回相应的确认(ACK);
    (c)如果发送实体在合理的往返延迟(RTT)内没有收到确认,则将重新发送相应的数据(假设它丢失)

(4)速率不同。TCP所需资源多,传输速率慢,UDP所需资源少、传输速率快;
(5)TCP只适用于一对一单播,UDP可用于广播通信;
(6)适用场景不同。
TCP适用于对可靠性要求较高的场景,比如文件的传输等,UDP适用于实时性要求较高的场景,比如微信视频通话等。

TCP如何保证可靠性

如何实现可靠传输:校验和、排序(流量控制)、确认机制、重传机制、拥塞控制

可靠传输的实现:滑动窗口 – 超时重传 – 选择确认
拥塞控制:慢开始 – 拥塞避免 – 快重传 – 快恢复

  1. 分段 将报文段分成适合转发的长度

  2. 标号 按照序号判断中间的转发是否有缺失

  3. 流量控制 根据双方的接收发送能力,动态地调整发送方发送窗口的大小,取发送窗口=min(拥塞窗口,接收窗口) (与数据链路层收不下的话返回一个信号告诉发送方自己收不下的流量控制机制不同)

  4. 检验和 TCP首部有检验和字段,目的是检验首部+数据部分的数据是否正确,是不是被人篡改或半路出现差错。

  5. 超时重传 发出报文段之后启动定时器,如果重传时间RTT内没有收到确认的话,就重传该数据报,也可以采用冗余确认机制(三次接收到同一个ack=k的确认序号,就重传第k个报文段)(快重传中采用的也是冗余重传)
    主要涉及的协议有两种(跟数据链路层的超时重传机制相同):
    1)停止等待协议 每发送一个报文段就停止,直到收到确认才继续发送,否则超时重传
    2)滑动窗口协议。
    a)后退N帧协议 GBN: 发送窗口>1,接收窗口=1,即接收方必须按照顺序去接收数据,如果启用了超时重传机制的话,就会重传所有当前已经发送但是没有被确认的报文段
    b)选择重传协议 SR: 发送窗口>1,接收窗口>1,即接收方无需按照顺序去接收数据,会按照任意顺序接收所有处于接收窗口内的数据。按照如果启用超时重传机制的话只需要重新发送没有收到确认的数据即可。

  6. 拥塞避免 分为两种:①慢开始,拥塞避免 ②快重传、快恢复

检验和是TCP和UCP中都有的 要注意检验的是首部和数据字段的有效性

  • 添上伪首部
  • 首部检验和字段置为0
  • 伪首部+首部+data部分用二进制反码求和,并将结果填入到检验和字段
  • 去掉伪首部发送
  • 发送方接受到该数据之后,首先添上伪首部
  • 接着计算伪首部加首部加数据部分的二进制反码求和
  • 如果全为1则无差错,去掉伪首部交给网络层,否则丢弃。

四、TCP的三次握手、四次挥手

Ø 3次握手:1 – 发送SYN要建立,客户端进入SYNsent 2 – 发送ack,SYN允许建立-服务器进入SynRecived
3发送ack收到 – 一起estabListen

Ø 3次而非2/4 :超时又来 / 提高效率

Ø 4次握手:1 –
发送fin发完辣finWait1;2-发送ack知道了closeWait;0-发送未发完信息;3-fin发完辣lastACK;4-发送ack晓得timeWait

Ø 4次之后wait:1、确保送达;2、防止失效出现在下次中

4.1详细过程以及C和S的状态

三次握手

Ø 3次握手:1 – 发送SYN要建立,客户端进入SYNsent 2 – 发送ack,SYN允许建立-服务器进入SynRecived
3发送ack收到 – 一起estabListen

Ø 3次而非2/4 :超时又来 / 提高效率

首先发起连接的一端称为客户端,被动等待连接的一端称为服务器端。

  • 客户端向服务器端发送一个同步报文,该TCP报文的首部控制位SYN=1,序列号随机,这里定为x。客户端发出报文后进入SYN-SENT状态;

  • 服务器接收到报文进入到SYN-RECIVED状态,并返回一个确认报文给客户端,该TCP报文的首部控制位SYN=1,ACK=1,序列号为y(随机),确认号为x+1

  • 客户端接收到服务器端传来的确认报文后进入到established状态,并传送一个确认报文的确认给服务器,该报文的首部字段控制位ACK=1,序列号为x+1,确认号为y+1,此时可以携带数据部分。服务器端接收到该报文后进入到established状态

四次挥手

4次挥手:
1 –发送fin发完辣finWait1;
2-发送ack知道了closeWait;0-发送未发完信息;
3-fin发完辣lastACK;
4-发送ack晓得timeWait

Ø 4次之后wait:
1、确保送达;
2、防止失效出现在下次中

客户端和服务器端如果完成数据传送工作后,均可主动发起连接释放请求,这里假设客户端首先发起连接释放。

  • 客户端发送FIN报文给服务器端,并进入到FIN-WAIT1阶段,该FIN报文包括首部字段控制位FIN=1,序列号seq=u,告诉服务器我已完成我的数据传输工作,你这边如果还有数据可以继续传送;
  • 服务器收到该FIN报文之后进入close-wait阶段,并返回一个确认报文给客户端,该确认报文包括首部控制位ACK=1,seq=v,ack=u+1。客户端收到该确认报文后进入fin-wait2状态,关闭从客户端到服务器端的数据传送。服务器端仍可向客户端传送数据;
  • 服务器端完成对客户端的数据传送工作之后,服务器端向客户端发送FIN报文,该报文结构包括FIN=1,ACK=1,序列号为w,确认号为u+1,并进入Last-ACK状态;
  • 客户端接收到该FIN报文后,返回确认报文,该确认报文包括首部控制位ACK=1,序列号为u+1,确认号为w+1,并进入time-wait阶段,等待2MSL后确认服务器端收到ACK报文正常断开连接后,客户端关闭。服务器端收到该确认报文,进入closed状态。

等待2MSL的原因
确认服务器端是否正常收到了客户端最后发出的确认报文,如果服务器端没有收到的话,过1MSL(报文在网络中的最大存活时间)会重新再发送一次FIN报文给客户端,如果过了2MSL还没有收到新发的FIN报文的话,证明服务器端已经收到确认报文并正常关闭连接,客户端也可以关闭连接啦~

4.2为什么三次握手?为什么四次挥手?

三次握手的原因

确保双方间的连接正常建立,如果只有两次握手的话可能会出现一些异常情况,比如:

  • 客户端的SYN连接请求失效(或者发去时间太久,导致了超时重传的发生),但是服务器端接收到了该SYN报文,如果不经过第三次握手的话服务器端就会错误地开启一个连接;
  • 如果只有两次握手地话,服务器端返回给客户端的确认报文丢失,会导致客户端因为没有收到确认所以关闭了该连接,但服务器端此时已做好了连接准备,造成资源的浪费。

四次挥手的原因

因为建立连接时双方都处于closed状态,而释放连接时一方收到FIN报文但有可能还有数据要继续传输,不能马上释放连接,所以先返回一个确认报文,发送完数据后再断开连接。

五、输入URL到显示网页发生了什么

浏览器输入url发生:
1、先进行dns解析,确定ip;
2、http生成请求报文;
3、建立tcp连接,且分组;
4、通过ip在网络中寻找对方;
5、服务器收到,重组报文;
6、服务器处理信息,用tcp返回。

(1)浏览器解析URL对应的IP地址

​ DNS解析过程,浏览器缓存—>操作系统缓存—>本地DNS—>根据转发模式选择迭代还是递归查询

(2)浏览器向服务器发送一个HTTP请求报文

​ 传输层上建立TCP连接,网络层用到了IP协议(负责在网络层传输数据),还会用到RIP或者OSPF进行路由选择,然后用ARP协议解析IP地址对应的MAC地址,使得数据能够在数据链路层上进行传输(不应该是最后到物理层传输吗)。

HTTP请求方法有哪些(post/get/head/put/delete)**

(3)服务器请求处理并返回一个HTTP响应报文

​ HTTP响应报文的结构,状态码

(4)服务器返回一个HTML响应,浏览器收到HTML响应并渲染界面

六、OSI七层协议及每层作用

  1. 应用层:直接提供服务 - http

  2. 表示层:处理发送信息格式 – telnet

  3. 会话层:组织进程通信 – dns / smtp

  4. 传输层:提供进程间的逻辑通路– tcp / udp

  5. 网络层:提供主机间的通讯通路– ip / icmp / arp / igmp / rip / ospf / bgp

  6. 数据链路层:相邻节点通信 – ppp / csma\cd

  7. 物理层:在物理媒介上传送比特流

(1)物理层

数据以比特流的形式在物理层传输

设备有中继器、集线器(作用:转发、放大信号)

(2)数据链路层

负责将数据组帧,实现链路管理、流量控制和差错控制

协议有GBN后退N帧协议、SR选择重传协议、以太网协议

设备有网桥、交换机(作用:根据MAC地址对帧进行过滤转发,可以隔绝冲突域,不能隔绝广播域)

冲突域:同一时间内只能有一台设备发送信息的范围
广播域:网络中能接收到任意设备发出的广播帧的设备的集合

(3)网络层

提供主机和主机之间的逻辑通信

协议有ARP协议、OSPF/RIP路由寻址协议、DHCP协议、ICMP协议、IGMP组播协议、IP协议、CIDR协议

设备有路由器(作用:转发分组)

网络层
1.IPv4
1)地址格式
点分十进制
2)地址划分 了解
A/B/C/D/E类

2.网络地址转换NAT 了解
在这里插入图片描述
3.路由传输协议
RIP 基于距离向量的选择
OSPF 开放 最短路径协议
了解算法内容即可

(4)传输层

提供端到端的可靠报文传递,负责将数据传送至对应端口,提供进程和进程之间的逻辑通信

协议有TCP UDP协议

1.TCP
1)特点 *
面向连接、全双工,面向字节流、可靠传输、有拥塞控制、开销大

2)首部字段
序号 seq
确认号 ack
控制位 ACK FIN SYN
检验和(阿里问过)

3)如何实现可靠传输 *
校验和、排序(流量控制)、确认机制、重传机制、拥塞控制

2.拥塞控制 *
慢开始、拥塞避免、快重传、快恢复
算法过程
3.三次握手建立连接 *

(5)会话层

负责建立、管理、终止进程之间的会话

(6)表示层

对上层数据或者信息进行变换,以保证一个主机应用层信息可以被另一个主机应用层所理解,包括数据加密、格式转换、压缩等

(7)应用层

为操作系统或者网络应用程序提供访问网络的接口 协议有HTTP FTP SMTP DNS协议

4层TCP/IP模型:网络接口层、网际层、传输层、应用层

七、常见状态码

状态码:1xx通知信息[100continue继续发];2xx成功[200正常处理;204找不到;206范围请求];3xx重定向[301永久重定向;302临时重定向;303提醒用get重;304不符合请求条件;307临时重定向];4xx客户端错[400请求错误;401需要http认证;403不允许访问;404找不到资源];5xx服务器错[500服务器错误;503服务器繁忙]

(1)1xx 表示正在处理

  • 100 continue 一切正常 可以继续发送(据说是http报文中如果有post方法的话
    会先把请求行发送过去,然后返回100,然后再发送请求头部和请求体给服务器端)

(2)2xx 成功 表示请求已经正常处理

  • 200 OK 正常处理
  • 204 No content 请求正常处理,但是没有数据返回
  • 206 指定范围返回(http1.1以上支持的断点续传功能相关)

(3)3xx 重定向 浏览器需要一些额外的操作才能完成请求

  • 301 永久性重定向

  • 302 临时重定向(跟http劫持有关,运营商可以通过DNS劫持和http劫持两种,返回一个302,然后让用户跳转到处理好的携带广告的页面)

  • 303 暂时性重定向 但是服务器端明确说明希望浏览器用get方法来请求资源

  • 304 3:不符合请求条件。即:浏览器附带了请求的条件,服务器端允许访问,但是不满足请求条件

(4)4xx 客户端错误

  • 400 客户端的请求有语法错误
  • 401需要http认证
  • 403:不允许访问
  • 404 :找不到资源
  • 405 Method not allowed 客户端请求方法被禁止

(5)5xx 服务器端错误

  • 500 服务器在请求处理时内部出错
  • 501 服务器不具备完成请求的功能,如无法识别请求方法
  • 502服务器作为网关或代理,从上游服务器获得无效响应
  • 503 :服务器繁忙
  • 504 Gateway timeout服务器作为网关或代理,没有及时从上游服务器获得响应

八、cookie和session的区别

Cookie和session区别:
客户端/服务器;
有限制/无限制;
直接查找篡改/加密存在服务器中;
关闭浏览器消失/存在于服务器一段时间,消耗资源;

(1)首先它们都是用于给无连接的http提供身份认证的功能

cookie是服务器在本机存放的小段文本,并随每一个请求发送至同一服务器。cookie分为会话cookie(不设置过期时间,关闭浏览器窗口cookie即失效,保存在内存中)和持久cookie(设置过期时间,关闭再打开浏览器cookie仍存在,直至达到过期时间)。类似于检查通行证(即请求报文中附带的cookie)来确定用户身份

session则一般是利用session id实现的(session id是浏览器第一次发送请求时服务器自动生成的唯一标识,并返回给浏览器),cookie中携带该session id,客户端根据该session id将session检索出来。类似于在服务器上建立一个客户档案,客户来访时需要查询客户档案

1.cookie是存放在客户端,用于记录用户信息的,比如自动填充用户名和密码;session是存放在服务器端的,用于记录用户的状态,比如购物车的实现。

2.cookie不太安全,可以分析存放在本地的cookie进行cookie欺骗,(也可以用加密算法加密后进行存放),session存放于服务器的内存中,所以安全性高

3.单个cookie保存数据不能超过4k,session没有对存储数据量的限制

禁掉cookie的话session仍然可以使用,但是需要使用其他方法获取session id,比如在url后面或者以表单的形式提交给服务器端

九、get和post的区别

请求类型:optione;get;head;post;put;delete;trace;connect

9.1 了解get和post

首先,GET和POST都是HTTP协议中的两种发送请求的方法,由于HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP。GET和POST能做的事情是一样一样的。如果给GET加上request body,活着给POST带上url参数,技术上是完全行的通的。也就是说,GET和POST在本质上没什么区别。 但是如果真的一点区别都没有,那么这个问题也就不存在了,所以,两者之间最重大的区别就是:

GET产生一个TCP数据包;POST产生两个TCP数据包。

具体点说来就是:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。这样看起来,因为POST需要两步,时间上消耗的要多一点,所以GET比POST更有效。那么可不可以用GET替换POST来优化网站性能?

  1. GET与POST都有自己的语义,不能随便混用。2. 如果网络环境好的话,发一次包的时间和发两次包的时间差别基本可以无视。如果网络环境差的话,两次包的TCP在验证数据包完整性上,有非常大的优点。3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
    注意存放在请求行和请求体的不是方法 而是请求/提交的数据, post和get方法都是在请求行中啦

9.2 get和post的区别

Get / post区别:可缓存/不可;保留历史参数/不留;信息可见不安全/较安全;长度限制/不限制

  • get数据明文存放在http请求行的url之后,post则是将提交的数据放在http请求报文的请求体中;(即GET参数通过URL传递,POST放在Request body中)

  • POST比GET更安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

  • GET请求只能进行url编码,而POST支持多种编码方式。

  • 受浏览器对url长度的限制,get传送数据量应不超过2KB。post传送数据量则一般无此限制;

  • 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

  • get不能改变服务器的数据,一般用于从服务器获取数据,是幂等的;post可以改变服务器的数据,不是幂等的;

  • get请求可以被浏览器主动缓存,下一次若传输数据相同,则优先返回缓存中的内容,以加快显示速度。post请求不会,除非手动设置一下;

  • get请求参数会被完整地保存在浏览器历史记录中,post请求参数则不会保留。

十、常见考点

IP

ARP:ip转化mac。网内广播,分组转发算法

RIP:基于距离向量选路,简单,但限制网络范围

OSPF:使用泛洪法,监控全局链路。先确定可达,再同步。Dijkstra

ICMP:用来报告差错和异常。如:ping测试主机连通。

IGP:自治系统内部使用的路由选择协议

EGP:不同自治系统的选路协议

BGP:发言人通过tcp,利用bgp会话沟通信息。

1.IP地址与MAC地址的区别?为啥有了IP地址还需要MAC地址

  • MAC地址是网络中每个设备都有的唯一网络标识,全世界唯一。
  • IP地址只是逻辑上的标识,任何人都能随意修改,因此不能具体标识一个用户,但MAC地址固化在网卡里,防止被盗用。
  • 但是如果只用MAC地址的话,因为MAC地址无序杂乱,没有明显规则,难以查找。但是IP是分层的,类似通讯地址,可以根据其网络号找到子网再定义主机,逐级查找,每个设备需要存储的信息较少

MAC地址与IP地址的区别:

  • 长度不同,IP地址一般为32位(IPv6 128位),MAC地址则是48位
  • 分配依据不同,IP地址分配基于网络拓扑,能够根据需要改动设备的IP地址,但是MAC地址的分配是基于制造商,在网卡中烧录好,一般不轻易改变
  • 寻址协议层不同,IP地址应用于网络层,MAC地址应用于数据链路层(数据链路层基于MAC地址转发数据帧,数据链路层的交换机根据其MAC地址记录表中的MAC地址及其对应的端口,将其发送到MAC地址对应的端口,否则广播;网络层则根据IP地址转发报文,路由器根据路由表转发到对应端口,否则发送默认路由)

2.ARP协议

作用:实现IP地址到MAC地址的映射(由IP地址获得MAC地址)

流程:根据主机A路由表的内容查找B的IP地址,再从A的ARP高速缓存中寻找是否有B的MAC地址,如果没有则广播ARP请求帧(构成为Aip+Bip+A_MAC+全1)至该局域网内所有的主机。如果主机发现该请求帧中的IP地址与自己的相同则返回一个单播ARP帧(构成为Bip+B_MAC)返回给主机A,并且AB均更新自己的ARP高速缓存

3.http协议的发展历程(1.0 1.1 2.0 3.0)

各版本http区别:1.0与1.1 – 持续连接 ; 1.1与2.0 – 速度提升、头部压缩、二进制传送、服务器主动发、连接多路复用。

http1.0和http 1.1的主要区别是什么?

  • 连接 HTTP1.0默认使用短连接,每次请求不同的资源都需要重新建立一次连接;HTTP1.1起默认使用长连接,默认开启keep-alive,即同一个TCP连接可以发送和接收多个http请求/响应,这种长连接由流水线方式和非流水线方式,流水线方式是指客户在收到http响应报文之前就能够接着发送新的请求报文,非流水线方式是指客户在收到http响应报文后才能接着发送下一个请求
  • 状态码 HTTP1.1新增24个状态码,409表示请求的资源与资源当前状态发生冲突,410Gone指的是服务器上某个资源被永久删除
  • 带宽优化及网络连接使用 ——http1.1支持断点续传,HTTP1.0中不支持只显示对象的一部分(只能显示全部)、且不支持断点续传功能,浪费带宽;HTTP1.1在请求头中引入了range头域,允许只请求资源的某个部分,返回码是206(partial content)

http2.0的改进

  • 头部压缩 减少冗余头信息,用了首部表来跟踪、存储之前的键值对,相同的数据就无需再每次重复请求和响应了
  • 多路复用 实现由一个tcp连接并发请求。http1.1多个请求的响应之间会被阻塞
  • 服务器推送:可以主动将资源推送给客户端缓存中
  • 二进制格式:采用二进制而非文本格式,将所有传输的信息分割为更小的消息和帧(二进制帧)

3. 客户端故障检测方法?

客户端故障检测方法----保活计时器

目的:在长连接的情况下,检测没有响应的连接并且将其断开(即客户端出现了故障), 防止占用过多的连接资源

客户端打开服务器的连接传送数据后,就保持沉默了,此时有可能客户端出了故障.

解决方法就是使用保活计时器, 每当服务器收到客户端的信息的话,该计时器就复位, 如果两个小时之内还没有收到客户信息,就发送探测报文段,如果发送了10个探测报文段还没有响应的话, 就认为客户端出了故障,终止该连接

4. SYN洪泛攻击如何解决?

攻击者伪装成客户端发送TCP的SYN报文, 当服务器返回ACK确认报文之后, 攻击者不再进行确认, 即不回复确认的确认报文, 这个连接就处于一个挂起的状态, 服务器收不到确认报文的话, 会启用超时重传机制, 重复发送ACK给攻击者

这样的话,如果攻击者开启大量这种TCP连接, 导致服务器端有很多个挂起的连接, 并且需要重复发送很多ACK给攻击者, 这样就会消耗服务器的内存 可能导致最后服务器死机, 无法正常工作

解决方法

  • 降低SYN timeout时间 使得服务器在没收到确认报文后尽快释放半连接的占用
  • 采用SYN cookie设置 给每一个请求连接的ip地址分配一个cookie,短时间内如果连续收到某个IP的重复的SYN报文,就认定收到了攻击,以后会自动丢弃该ip地址传送过来的包

Uri和url区别:

uri-统一资源标识符 > url-统一资源定位符;均定义了资源,url定义了如何访问,且需绝对。

DNS是做什么的?工作原理是什么?

DNS过程:
1、检查浏览器中缓存;2、检查操作系统内缓存;3、请求本地域名服务器,递归查询;4、本地请求根服务器,迭代查询;5、找到ip后自己缓存

DNS作用:
DNS是应用层协议,事实上是为其他应用层协议工作的,包括不限于HTTP、SMTP以及FTP,用于将用户提供的主机名解析为IP地址。
关于DNS的获取流程:

  • 用户主机上运行着DNS的客户端,就是我们的PC机或者手机客户端运行着DNS客户端了。
  • 浏览器将接收到url中抽取出域名字段,就是访问的主机名,并将这几名传送给DNS应用的客户端;
  • DNS客户端向DNS服务器端发送一份查询报文,报文中包含要访问的主机名字段(中间包含列缓存查询以及分布式DNS集群的工作);
  • 该DNS客户机最终会收到一份回答报文,其中包含该主机名对应的IP地址;
  • 一旦该浏览器收到来自DNS的IP地址,就可以向该IP地址定位的HTTP服务器发起TCP连接。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值