计算机网络

https://tobebetterjavaer.com/sidebar/sanfene/network.html

基础

1.说下计算机网络体系结构

OSI七层参考模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层

TCP/IP四层:应用层,传输层,网际层,网络接口层

五层模型:应用层,传输层,网络层,物理链路层,物理层

2.说一下每一层对应的网络协议有哪些?

应用层:HTTP,DNS,FTP,SMTP,Telnet等

传输层:TCP,UDP

网络层:IP,ICMP

物理链路层:ARP

3.那么数据在各层之间是怎么传输的呢?

数据链路层头|网络层头|传输层头|应用层数据

网络综合

4.从浏览器地址栏输入 url 到显示主页的过程?

DNS解析URL获取IP地址

TCP三次握手建立连接

构造应用层数据包 加 传输层头 加 网络层头 加数据链路层头,发送出去

收到消息,再解包,然后浏览器渲染

TCP四次挥手断开链接

5.说说 DNS 的解析过程?

先查看本地浏览器缓存,然后本地DNS服务器,如果都没有,本地DNS服务器向根服务器请求获取顶级域名服务器的IP,然后本地DNS服务器再向顶级域名服务器请求,获取权限域名服务器的IP,然后返回给客户端

6.说说 WebSocket 与 Socket 的区别?

Socket是最底层的,Socket是一个网络编程的标准接口,是IP地址+端口+协议

Websocket不清楚

WebSocket是一个应用层协议,为了更好的实时通信

7.说一下你了解的端口及对应的服务?

HTTP: 80,HTTPS:443,FTP:21,SSH:22,TELNET:23,SMB:445,DNS:53,SMTP:25,POP3:110,3306:MySQL

HTTP

8.说说 HTTP 常用的状态码及其含义?

101:切换请求协议

200:成功

302:重定向

301:请求资源永久移动,返回新URI

302:请求资源永久移动,继续使用原有URI

400:客户端错误

500:服务器错误

9.HTTP 有哪些请求方式?

OPTION

OPTIONS:返回所有可用的方法

PUT:修改指定资源

DELETE:删除URL标记的指定资源

GET:获取资源的简单请求

POST:发送表单

HEADER

HEAD:获取URL头

TRANCE:回环测试

10.说⼀下 GET 和 POST 的区别?

GET的时候请求数据放在URL里,POST的时候请求数据放在 数据里​ ​请求体里

GET一般是只读,下载个文件啥的,POST一般是提交表单

GET将请求数据放在URL里,不安全,GET请求可以保存为浏览器书签,绝大部分的GET请求也可以被CDN缓存起来,大大减少了Web服务器的负担

11.GET 的长度限制是多少?

2000多个字节???

GET是通过URL传递数据的,限制GET长度的是浏览器

IE浏览器对URL的最大限制是2000个字符,Chrome是8182个字符,FireFox是65535

12.HTTP 请求的过程与原理?

输入URL,先DNS解析获取IP,然后 HTTP数据+传输层TCP 80端口 + 网络层 + 数据链路层将数据发送出去

原理就是利用TCP的80端口???

每个服务器都有一个进程,它不断监听TCP的80端口,一旦检测到请求,就会建立TCP三次连接,浏览器发请求,服务器相应请求,最后释放TCP连接

13.说一下 HTTP 的报文结构?

请求报文和响应报文

请求报文:GET /index.html HTTP1.1 方法,路径,协议,然后下面空行,后面是数据

响应报文:200 success,状态码 + 解释,空行,数据 协议版本,状态码,相应的状态信息| 首部行|实体

14.URI 和 URL 有什么区别?

URI是统一资源标志符,相当于身份证

URL是同一资源定位符,相当于地址,它是用定位的方式去定位的网络上的资源

URI的范围要大

15.说下 HTTP/1.0,1.1,2.0 的区别?

HTTP/1.0 每次请求都得重新建立连接

HTTP/1.1 可以保持长连接

HTTP2.0跟HTTP1.1差不多、,具体多了啥,忘了

在一个连接里,客户端和浏览器都可以同时发送多个请求和回应,服务器推送,允许服务器未经请求,主动向客户端发送资源

16.HTTP/3 了解吗?

传输层是用的UDP协议,用的QUIC?

17.HTTP 如何实现长连接?在什么时候会超时?

通过KEEP-ALIVE字段保持长连接,一个TCP连接发送和接受多个HTTP请求

HTTP一般会有httpd守护进程,里面设置keep-alive timeout,当tcp连接闲置超过这个时间就会关闭。

18.说说 HTTP 与 HTTPS 有哪些区别?

HTTPS是在应用层和传输层之间加了一个SSL层,比HTTP更安全

HTTPS是用的TCP的443端口,HTTP是用的80端口

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

19.为什么要用 HTTPS?解决了哪些问题?

数据加密

防止数据篡改

认证等功能

20.HTTPS 工作流程是怎样的?

客户端——>服务器

服务器返回服务器的数字证书,客户端根据CA的公钥去验证数字证书是否合法

如果合法,则从数字证书中获取服务器的公钥,然后随机生成一个KEY,用公钥加密后发给服务器

随后用KEY进行加密通信

21.客户端怎么去校验证书的合法性?

因为证书是CA给颁发的,可以用CA的公钥去验证

用CA的公钥解密签名得到一个HASH,然后自己对证书进行一个HASH判断两个HASH是否一致

22.如何理解 HTTP 协议是无状态的?

这里的无状态其实是指服务器不知道客户端是啥状态,给服务器发消息,服务器把消息发送完之后,不会记录任何信息。

Session一般存活时间比较短,是放在服务器端

Cookie是放在客户端

Cookie里面一般存Session的ID

存储大小不同,单Cookie保存的数据不能超过4K,Session可存储的数据远高于Cookie

一般是Cookie里存SessionID,将SessionID传过去,服务器拿到SessionID查找对应的Session信息

TCP

24.详细说一下 TCP 的三次握手机制

服务器处在监听状态,先客户端向服务器发送SYN包,请求连接,然后服务器返回ACK + SYN。然后客户端向服务器发送ACK,三次握手完成

25.TCP 握手为什么是三次,为什么不能是两次?不能是四次?

如果是两次握手,当服务器返回的ACK + SYN丢了的话,这个时候,服务器已经是ESTABLISHED的状态了,占用服务器的资源

如果是两次握手,如果第一个SYN丢了,客户端重发,结果之前的丢的那个先到,就会与服务器建立错误的连接,也是占用资源

四次握手没有必要,因此三次握手就能保证建立了连接了

26.三次握手中每一次没收到报文会发生什么情况?

超时发送呗

27.第二次握手传回了 ACK,为什么还要传回 SYN?

同步,SYN是同步的意思,就是服务器要和客户端同步

好吧,这个我也没大明白

传回SYN是为了告诉客户端,服务端响应的确实是客户端发送的报文。

28.第 3 次握手可以携带数据吗?

可以

29.说说半连接队列和 SYN Flood 攻击的关系?

SYN_RCVD的就是半连接队列(SYN队列),当ESTABLISHED之后,对应的SOCKET就从半连接队列进入全连接队列(ACCEPT队列)

SYN Flood就是攻击者疯狂向目标机器发送SYN包,然后使目标的SYN_RCVD占满,无法接受新的连接,就形成了DOS攻击

30.说说 TCP 四次挥手的过程?

31.TCP 挥手为什么需要四次呢?

因为被动关闭的那一方,可能有数据没有发送完

32.TCP 四次挥手过程中,为什么需要等待 2MSL, 才进入 CLOSED 关闭状态?

为了确保最后一个包(ACK包)到达服务器端,因为如果在2MSL内没有收到包,基本就确认服务器端收到了ACK包并且CLOSED了

33.保活计时器有什么用?

也是为了避免资源的浪费

比如客户端和服务器端已经建立了连接,但是客户端突然寄了,那么服务器显然不能一直等着,所以就用到了保活计时器,时间通常是2h,2h内没收到客户端数据,就发送探测报文段,然后过会再发一个,如果连续发多个没响应,客户端就关闭连接。

34.CLOSE-WAIT 和 TIME-WAIT 的状态和意义?

CLOSE_WAIT代表还有数据要发送

TIME_WAIT是要确保最后一个包到达了服务器端,保证连接正常关闭

35.TIME_WAIT 状态过多会导致什么问题?怎么解决?

TIME_WAIT 代表主动断开连接的,如果过多,代表端口占用的太多了,但是这些端口已经不发送数据了,就浪费资源

36.说说 TCP 报文首部的格式?

20个字节,含有源端口号,目的端口号,ACK等标志位,窗口大小,校验和什么的

37.TCP 是如何保证可靠性的?

TCP三次握手,校验和

序号验证,超时重传等机制

38.说说 TCP 的流量控制?

流量控制是基于两方来说的,为了确保对面能够以合理的速度收到信息,确保不会溢出

利用滑动窗口实现的这个流量控制

39.详细说说 TCP 的滑动窗口?

发送方有个发送窗口,接收方有个接收窗口

发送窗口的大小不能超过接收方的接收窗口

TCP头部有个字段代表窗口大小,它告诉对方我的TCP缓冲区还有多少空间,以便对方控制发送速度,从而达到流量控制的目的

40.了解 Nagle 算法和延迟确认吗?

防止数据包的数据部分 < 头部 这种情况,等

Nagle 算法是 数据积攒到一定程度再发送出去

延迟确认是延时对对面包的确认,因为不携带数据的TCP包有点浪费

41.说说 TCP 的拥塞控制?

有个拥塞窗口,拥塞窗口的大小

swnd = min(cwnd, rwnd)

快启动,快恢复???

慢启动,拥塞避免,快重传,快恢复

42.说说 TCP 的重传机制?

超时重传:发的包没有收到回包,在一定时间后重传(RTO略大于RTT)

快速重传:连续收到3个同一个包的ACK,就表示没阻塞,可以不用等待是否超时,直接重传即可

43.说说 TCP 的粘包和拆包?

包太小的情况下,就出现粘包的情况,比如数据远小于MSS,就会在缓冲区等一会,积攒到一定程度一次性发送出去

拆包咋拆?有界限啥的吗??

包太大,比如TCP报文长度-TCP头部>MSS的情况下,就会拆包

UDP

44.说说 TCP 和 UDP 的区别?

TCP可靠,面向连接,传输效率慢,首部长度20-60字节

UDP不可靠,不面向连接,传输效率快,首部长度8个字节

45.为什么 QQ 采用 UDP 协议?

即时传输,速度快,但是QQ文件传输啥的还是用的TCP

46.UDP 协议为什么不可靠?

没有一些保证可靠传输的机制,甚至没有建立连接,对接受的数据包也不用回复确认啥的

47.DNS 为什么要用 UDP?

因为DNS解析个域名传输的数据很小,而且很频繁,所以用UDP

客户端向DNS服务器查询域名的时候,一般返回的内容不会超过UDP报文的最大长度512字节

进行区域传送的时候,比如主域名服务器向辅助域名服务器传送变化的那部分数据,会用TCP,因为量大,而且得保证可靠

IP

48.IP 协议的定义和作用?

IP是网络协议,是为了将数据包从一个网络发到另外一个网络

IP协议的作用:寻址和路由,分段和重组

49.IP 地址有哪些分类?

A,B,C,D,E5类

A: 0打头 1 - 126

B: 1打头 128-191

C: 11打头 192 - 223

D: 111打头 224 - 239 组播地址,多播地址

E: 1111打头 240-255 未使用

私有IP地址:

10.0.0.0/8

192.168.0.0/16

172.11 -172.31 /16

50.域名和 IP 的关系?一个 IP 可以对应多个域名吗?

域名通过DNS解析到 IP

一个IP可以对应多个域名

51.IPV4 地址不够如何解决?

NAT网络地址转换,划分子网

IPV6

52.说下 ARP 协议的工作过程?

ARP又叫地址解析协议,是指通过IP获取到MAC的过程

先查看ARP缓存中有没有

然后判断路由,是否是外部的地址,如果是就获取网关的MAC,如果不是就获取对应的IP的MAC

往局域网发送ARP广播包,问谁的IP是XX.XX.XX.XX

对应的机器收到后,就会发送ARP回复包

53.为什么既有 IP 地址,又有 MAC 地址?

历史遗留问题,因为在历史上MAC是先出来的,后出来的IP,也是分层的因素,IP地址负责将数据从一个网络发到另外一个网络,MAC负责找到对应的机器

54.ICMP 协议的功能?

探测网络的功能,比如发送一些错误信息啥的

ICMP是一个面向无连接的协议,用于传输报文控制信息

55.说下 ping 的原理?

ping的原理是向对方发送ICMP请求包

计算RTT的话有2种方案,第一种是由本地记录发送ping包时间和接受时间,第二种是由payload去带时间

网络安全

56.说说有哪些安全攻击?

DDOS,DNS劫持 ARP欺骗等等

篡改,劫持

57.DNS 劫持了解吗?

了解,修改目标机器的HOST文件,或者攻陷其路由器,攻陷本地DNS服务器等

是通过将原域名对应的 IP 地址进行替换,从而使用户访问到错误的网站

58.什么是 CSRF 攻击?如何避免?

跨域请求伪造,比如在你登录个某个银行网址之后,又点了一个恶意的网站,而那个网站里有个链接是转账的功能,你点了之后,因为已经登录了某个银行网址,所以有COOKIE什么,就会转过去

增加Refer字段检查,CSRF-TOKEN,或者敏感操作手机验证码啥的

Cookie的SameSite属性也可以缓解一部分CSRF

59.什么是 DoS、DDoS、DRDoS 攻击?

DOS是拒绝服务攻击,就是把某个设备的服务搞坏

DDOS是分布式拒绝服务攻击,就是用大量的肉鸡去搞一个设备

DRDOS是分布式反射性拒绝服务攻击,比如可以伪造目标IP去进行DNS请求,然后DNS服务器就会向目标IP发送DNS查询结果

60.什么是 XSS 攻击,如何避免?

XSS是跨站脚本攻击,其实是CSS,但是为了与那个样式CSS区分,叫XSS

XSS分好多种,存储型,反射型,DOM型

反射型:URL中含有恶意JS,将此URL发给别人,别人打开后就会执行恶意JS

存储型:比如某个博客平台有XSS漏洞,用户的用户名可以填入恶意JS,当别人打开此人的主页时,恶意JS就会执行

DOM型:反射型和存储型都是目标服务器返回的HTML中就带有恶意JS,DOM型不是,DOM型是在客户端的JS在修改和构造当前页面的DOM节点时触发恶意代码执行。

如何避免??

用XSS过滤的形式

CSP:内容安全策略,定义了当前页面只允许加载和执行某某域的脚本

HttpOnly属性,这样JS读取不了cookie

61.对称加密与非对称加密有什么区别?

对称加密,加密和解密的KEY相同,比如AES, DES等

非对称加密:加密用公钥,解密用私钥,还可能用来拿来签名,比如RSA啥的

62.RSA 和 AES 算法有什么区别?

RSA是非对称加密算法

AES是对称加密算法