1.网络分层结构及其必要性
五层体系结构:
七层结构:
- 应用层:网络服务与最终用户的一个接口,常见的协议有:HTTP FTP SMTP SNMP DNS.
- 表示层:数据的表示、安全、压缩。,确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
- 会话层:建立、管理、终止会话,对应主机进程,指本地主机与远程主机正在进行的会话.
- 传输层:定义传输数据的协议端口号,以及流控和差错校验,协议有TCP UDP.
- 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择,协议有ICMP IGMP IP等.
- 数据链路层:在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路。
- 物理层:建立、维护、断开物理连接。
TCP/IP 四层模型
上面三层与五层相同,最后一层对应五层的物理层和数据链路层
2. 三次握手(运输层的实现 建立应用进程间的TCP连接)
三次握手过程:
- 一开始,TCP服务器进程首先创建传输控制块,用来存储TCP连接中的重要信息。之后,TCP服务器进入监听状态。
- TCP客户进程首先创建传输控制块,然后主动向TCP服务器发送连接请求报文段,并进入同步已发送状态。(SYN=1表示该报文段为请求建立连接的的报文段;seq=x表示TCP客户进程所选择的初始序号)
- TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态(SYN=1表示该报文段为同意建立连接的报文段;ACK=1表示确认接受客户端发送的报文段;seq=y表示TCP服务器进程所选择的初始序号,ack=x+1表示对TCP客户进程所选择的初始序号的确认)。
- TCP客户端向TCP服务器进程发送一个普通的TCP确认报文段,并进入连接已建立的状态。(ACK=1表示确认接受TCP服务端发送的报文段;seq=x+1表示TCP客户进程已经消耗一个序号,这是下一个要消耗的序号;ack=y+1表示对TCP服务器进程所选择的初始序号的确认)(注意:该条报文段没有SYN字段,若该报文段不携带数据,则下一次,客户端发送报文段时候,序号仍然为seq=x+1)
- TCP服务器进程收到报文段后,进入连接已建立状态。现在,两个进程之间可以基于已建立好的TCP连接进行可靠传输。
注意:TCP规定SYN=1的报文段,不能携带数据,但要携带一个序号
各个字段的意思:
3. 两次握手可以吗?
第三次握手主要为了防止在网络中因某些原因滞留过久的连接请求报文段突然传输到了服务端,TCP服务器进程会误认为这是TCP客户进程发起了一个新的TCP连接请求,于是,TCP服务器发送tcp连接请求确认报文段,并进入连接已建立状态,因为TCP客户端处于关闭状态,这就导致TCP服务器进程一直等待TCP客户进程发来数据,这就白白浪费TCP服务器进程所在主机的很多资源。
那可能会想到,就算是三次握手,此时TCP客户端为关闭状态,会导致TCP服务器进程的超时重传。不会的,TCP客户端关闭是一个过程的(四报文挥手的等待状态)。
4. 四次挥手(运输层的实现 释放应用进程间的TCP连接)
细节待更
5. 第四次挥手为什么要等待2MSL?
6. 为什么是四次挥手?
7. TCP有哪些特点?
8. 说说TCP报文首部有哪些字段,其作用又分别是什么?
9. TCP和UDP的区别?
10. TCP 和 UDP 分别对应的常见应用层协议有哪些?
基于TCP的应用层协议有:HTTP、FTP、SMTP、TELNET、SSH
- HTTP:HyperText Transfer Protocol(超文本传输协议),默认端口80
- FTP: File Transfer Protocol (文件传输协议), 默认端口(20用于传输数据,21用于传输控制信息)
- SMTP: Simple Mail Transfer Protocol (简单邮件传输协议) ,默认端口25
- TELNET: Teletype over the Network (网络电传), 默认端口23
- SSH:Secure Shell(安全外壳协议),默认端口 22
- 基于UDP的应用层协议:DNS、TFTP、SNMP
DNS : Domain Name Service (域名服务),默认端口 53
- TFTP: Trivial File Transfer Protocol (简单文件传输协议),默认端口69
- SNMP:Simple Network Management Protocol(简单网络管理协议),通过UDP端口161接收,只有Trap信息采用UDP端口162。
11. 说下TCP的滑动窗口机制(流量控制)
12. 详细讲一下拥塞控制?(拥塞控制)
13. HTTP协议的特点?
14. HTTP报文格式
15. HTTP状态码有哪些?
16. HTTP 协议包括哪些请求?
17. HTTP状态码301和302的区别?
18. POST和GET的区别?
19. URI和URL的区别
- URI,全称是Uniform Resource Identifier),中文翻译是统一资源标志符,主要作用是唯一标识一个资源。
- URL,全称是Uniform Resource Location),中文翻译是统一资源定位符,主要作用是提供资源的路径。
20. 如何理解HTTP协议是无状态的
当浏览器第一次发送请求给服务器时,服务器响应了;如果同个浏览器发起第二次请求给服务器时,它还是会响应,但是呢,服务器不知道你就是刚才的那个浏览器。简言之,服务器不会去记住你是谁,所以是无状态协议。
21. HTTP长连接和短连接?
HTTP短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。HTTP1.0默认使用的是短连接。
HTTP长连接:指的是复用TCP连接。多个HTTP请求可以复用同一个TCP连接,这就节省了TCP连接建立和断开的消耗。
22. HTTP 如何实现长连接?
通过在头部(请求和响应头)设置Connection字段指定为keep-alive,HTTP/1.0协议支持,但是是默认关闭的,从HTTP/1.1以后,连接默认都是长连接。
23. HTTP长连接在什么时候会超时?
HTTP一般会有httpd守护进程,里面可以设置keep-alive timeout,当tcp连接闲置超过这个时间就会关闭,也可以在HTTP的header里面设置超时时间。
TCP 的keep-alive包含三个参数,支持在系统内核的net.ipv4里面设置;当 TCP 连接之后,闲置了tcp_keepalive_time,则会发生侦测包,如果没有收到对方的ACK,那么会每隔 tcp_keepalive_intvl再发一次,直到发送了tcp_keepalive_probes,就会丢弃该连接。
24. HTTP1.1和 HTTP2.0的区别?
25. HTTP1.1和 HTTP2.0的区别?
26. 什么是数字证书?
27. HTTPS原理
28. DNS 的解析过程?
29. 浏览器中输入URL返回页面过程?
- 解析域名,找到主机 IP。
- 浏览器利用 IP 直接与网站主机通信,三次握手,建立 TCP 连接。浏览器会以ip地址和端口向服务器发起TCP 的连接。
- 建立 TCP 连接后,浏览器向主机发起一个HTTP请求。
- 服务器响应请求,返回响应数据。
- 浏览器解析响应内容,进行渲染,呈现给用户。
30. 什么是cookie和session?
31. 什么是cookie和session?
32. 什么是对称加密和非对称加密?
33. 说说 WebSocket与socket的区别
34. ARP协议的工作过程?
35. ICMP协议的功能?
36. 什么是DoS、DDoS、DRDoS攻击?
37. 什么是CSRF攻击,如何避免
38. 什么是XSS攻击?
39. 如何解决XSS攻击问题?
40. 说下ping的原理
41. 简述DNS劫持
DNS劫持指攻击者篡改结果,使用户对域名的解析IP变成了另一个IP。
42. Put与Delete区别
Put规定默认为更新某一资源,和Post一样,一般该操作会对服务器资源进行改变
Delete规定默认为删除某一资源,和Post一样,一般该操作会对服务器资源进行改变
43. HTTP2/HTTP3的特性?
HTTP2
- 二进制格式:HTTP1的解析是基于文本格式的,HTTP2的解析是基于二进制格式的,效率更高。
- 帧与双向数据流:同时HTTP2引入帧和流的概念;帧就是HTTP2通信的最小消息单位,报文被分割为多个帧;”流概念“是存在于连接中的双向的虚拟通道,帧可以在拥有整数标识的流上进行双向传输,一个连接可以承载任意数量的流,所以多个帧之间可以乱序发送,根据帧首部的流标识重新组装。
- 多路复用:HTTP1想要并发多个请求只能起多个TCP连接,而且浏览器对单个域名还有TCP连接数量的限制,HTTP2拥有流和帧后单个连接上就可以并发进行多个请求和响应,避免了HTTP1中的队头阻塞问题,极大地提升了性能。
- 头部压缩:HTTP1的头字段太长了,而且每次都重复发送,非常浪费带宽,HTTP2使用特别的算法在客户端和服务端建立字典记录之前发送的键值对,这样就能用索引号代替重复字符串,压缩效率极高。
- 服务端推送:HTTP1中服务端需要等待客户端请求才能被动响应,而HTTP2.0是允许服务端向客户端主动推送的。
HTTP3
-
相比HTTP2的优化:HTTP2使用流和帧的概念实现了多路复用,但这只是在应用层的优化,并未完全解决队头阻塞问题,在TCP连接中一旦发生丢包就会阻塞住后续所有请求。因此,HTTP3将传输层的TCP协议换为了UDP协议,并引入QUIC协议使UDP实现了类似TCP的可靠传输,如果某个流丢包只会阻塞这个流而不会阻塞其他流。
-
QUIC 内含了 TLS1.3,只能加密通信,支持 0-RTT 快速建连;