计算机网络

一、三次握手、四次挥手
问:三次握手:
问:四次挥手
问:为什么要三次握手:
1、确认客户端与服务端双方的收发能力正常
2、服务端需要确认向客户端发送的初始序列号是否成功收到,这是后续传输数据的起始序列号。
3、判断是否是历史连接,服务端回复SYN与ACK后客户端需要对比序列号是否正确来确定是否为历史连接,如果是历史连接则将报文首部RST=1,重置连接。

问:为什么要四次挥手,而不是三次:
因为第二次握手是将SYN与ACK放同一个包发送,而第二、三次挥手时,客户端关闭发送通道,但是服务端可能还有数据需要发送,所以服务端先发ACK,发送剩余的数据,再发FIN包。

问:为什么需要timewait阶段,timewait时间过长会怎么样
确保全双工链接关闭的可靠性:如果ACK包服务端没接收到,服务端会重发FIN包,此时客户端会回复RST,那么服务端会报错。
确保旧的数据包在网络中因过期而消失:如果没有timewait(两个MSL),那么可以立即使用这个四元组再次建立链接。如果旧链接中已经传输了数据,在数据没到服务端之前就断开了链接,那么新的链接中服务端接受到该数据会以为这是当前链接的数据,就会把它向上传递给应用层。
二、TCP协议
问:TCP如何保证可靠性。
六种方法:校验和、三次握手四次挥手、流量控制、拥塞控制、ARQ协议、超时重传
1、校验和:TCP保持首部和数据的校验和,这是一个端到端的校验和,不通过则抛弃报文段
目的:检测报文段首部和数据在传输过程之间的波动,存在则舍弃。
方法:发送方:校验和置0,把伪首部、首部、数据部分分成16位的16进制数,所有数字相加然后叠加高位,再取反得到反码求和的结果。放到校验和里。
接收方:所有数字相加,叠加高位,如果最终每一位结果都是1则通过。
2、流量控制:基于可变大小的滑动窗口协议,收发双方都有缓冲区,不能发送缓冲区大小的包
3、拥塞控制:
慢启动:TCP刚建立连接/网络拥塞 时,拥塞窗口大小从1MSS(最大报文段)开始以指数开始增长,期间每收到一个ACK,拥塞窗口就增加一个MSS。
拥塞避免:当拥塞窗口达到慢启动阈值时,拥塞窗口呈线性速度增长
快重传:TCP不依赖超时时间来检测数据包是否丢失,而是冗余ACK。当连续收到三个相同的ACK就重传丢失的数据包。

快恢复:TCP检测到丢包,则将慢启动阈值减半,并且将拥塞窗口大小设置为阈值+3 MSS,随后阻塞窗口呈线性增长。
4、ARQ:发送完一个分组等对方确认,确认之后再发下一个分组
5、超时重传:TCP发送一个报文段之后,启动一个定时器,如果没有及时收到接收方的确认就会重发报文段。
问:TCP和UDP的区别:
1、连接类型:TCP是面向连接的协议,有三次握手和四次回收。UDP是无连接的协议。
2、可靠性TCP可靠,有校验和、流量控制、拥塞控制、ARQ、超时重传等保证可靠,UDP不可靠
3、点对点or点对多:TCP是点对点、UDP是点对点、点对多、多对多
4、TCP头部大,最小也有20字节。UPD头部小,只有8字节。

问:UDP的连接过程:
创建套接字,绑定所在服务的IP和端口号,进行通信(sendto()、recvfrom()),关闭套接字(close(fd))
问:TCP与UDP应用场景
TCP主要被用于需要保证数据可靠传输的场景,例如HTTP、HTTPS,电子邮件等。
UDP主要被用于实时性和传输速度要求较高的场景,例如音视频-微信视频;直播;在线游戏-王者荣耀

问:QQ如何确保UDP的可靠性
QQ里既有TCP又有UDP,用户登录之后用一个TCP连接维持登录的状态,默认端口是80。QQ发送消息并不是端到端的,而是通过服务器做转发,采用的是UDP协议,在上层协议保证了可靠性,具体来说就是发送端发送了UDP信息,接收端需要回复。
三、HTTP协议
问:HTTP/1.0 HTTP/1.1 HTTP/2 对比
1、HTPP/1.0
短连接,每次请求都需要建立TCP连接,并且TCP握手耗时长,性能差
2、HTPP/1.1
引入持久连接,一次TCP连接可以传输多个请求。
3、SPDY协议
4、HTTP/2
帧:最小的数据单位;流:多个帧组成的数据流。
此前是使用管道化的方式,根据请求响应的顺序发送HTTP响应,但是如果一个响应发生延时,后续都会阻塞。
二进制帧的发送是乱序的,帧中有标识可以直到属于哪个请求,收到之后再重新组合起来,这样就可以解决HTTP队头阻塞问题。
(1)二进制分帧:在应用层和传输层之间加了一层二级制分帧层,将传输的信息分割成更小的帧,比如说head帧和data帧,使用二进制数据帧传输,因为二进制格式解析更高效。
(2)多路复用:代替HTTP 1.X的序列和阻塞机制,相同域名的请求通过一个TCP完成。
(3)Header压缩:HTTP/1.1的head信息量太大,HTTP/2采用HPACK算法压缩头部。
(4)服务端推送:服务端可以推送一些资源存储在客户端,以便临时访问。
问:HTTP3 的QUIC协议
1、因为HTTP2是依赖TCP协议,通过二进制分帧解决了HTTP的对头阻塞,但是没有解决TCP队头阻塞问题(TCP把数据拆分成包发送,如果某一个数据包没有送达,就会阻塞后续的数据包)
2、TCP握手耗时1.5RTT,如果是HTTPS,还要算上TLS协议耗时一个RTT。所以HTTP2非常耗时。
3、TCP升级涉及协议僵化问题,对于中间件和操作系统来说都很麻烦
4、HTTP3 的QUIC协议(Quick UDP)。
横跨传输层和安全层,因为不仅属于传输层,还有安全层相关的协议
(1)基于UDP的协议
(2)在UDP基础上增加了TCP的一些特性:拥塞控制、超时重传来保证可靠性
(3)实现无序并发字节流,发送方发送的顺序和接收方收到的数据不同,这就可以解决TCP队头阻塞问题。
(4)快速握手:0-RTT握手和1-RTT握手
(5)使用TLS1.3传输层安全协议:握手花费的往返时间更低,可以降低延时
四、HTTP访问经过哪些阶段?
1、浏览器对URL地址进行编码,并且根据url查看浏览器是否缓存了该页面
2、DNS解析,依次通过操作系统缓存、路由器缓存、ISP缓存以及各级域名服务器去查IP
3、进行TCP三次握手
4、把报文从里到外封装,从里到外分别是http首部、tcp首部、ip首部、以太网首部。
5、经过网关、路由器发送给服务器
6、中间会经过nigix负载均衡,找到对应的服务器
7、将ip报文给servelet容器
8、serverlet容器解析请求行、请求头和请求体交给MVC处理
9、DispatcherServelet拿到请求根据请求路径发给对应的拦截器和Controller
10、Controller执行业务逻辑,可能涉及到下游service和持久层的CRUD
11、Controller层将返回的结果封装成同一的响应题返回浏览器
12、浏览器接受响应体之后进行缓存和解码。
13、渲染页面
五、HTTP状态码
1xx:协议处理的一些中间状态
2xx:200、204、206。请求成功处理并返回
3xx:301(永久重定向)、302(临时重定向)、304。重定向,请求的资源发生变动要重新发请求
4xx:400(服务端无法处理)、401(客户端得身份验证)、403(拒绝请求)、404(找不到页面)、405(请求的方法有问题,但目标资源不支持)、408(请求超时)。客户端发送的请求有问题。
5xx:500(服务器内部出错)、501(服务端不支持请求方法)、502(服务器作为网关或者代理,从上游服务器收到无效的请求处理)、503(服务器过载,无法处理请求)、504(服务器作为网关或者代理,未能及时收到请求)。服务器出错
六、滑动窗口 和 拥塞窗口
流量控制-滑动窗口:接收方告知发送方自己缓冲区的大小
拥塞控制-拥塞窗口:发送方在一个RTT内能发送数据包的数目
七、如何做网络抓包

http数据包:charles、chrome浏览器
tcp、udp数据包:tcpdump(抓包)+wireshark(分析包)
tcpdump在网络设备层抓包,抓包的命令如下:
-i eth0:指定网卡、-nn:不解析域名和端口、-w 1.cap:文件保存路径、发送方的ip与port
tcpdump -i eth0 -nn -w 1.cap tcp and host 10.182.1.1 and port 80 or port 443
八、get和post请求
GET 和 POST 是 HTTP 协议中最常用的两种请求方法。它们在数据传输方式、安全性、缓存等方面存在显著差异。
数据传输方式
GET 请求将参数直接附加在 URL 后面,参数和值通过 ? 和 & 连接,例如:
/test/demo_form.php?name1=value1&name2=value2
POST 请求则将参数放在 HTTP 消息主体中,不显示在 URL 中。
安全性
GET 请求的参数暴露在 URL 中,容易被第三方截获,不适合传输敏感信息。POST 请求的参数放在消息主体中,相对更安全。
数据长度限制
GET 请求的 URL 长度有限制,一般不超过 2048 个字符。POST 请求没有长度限制,可以传输大量数据。
缓存和历史记录
GET 请求可以被缓存,参数会保留在浏览器历史记录中,可以收藏为书签。POST 请求不会被缓存,参数也不会保留在历史记录中,不能收藏为书签。
编码类型
GET 请求只能进行 URL 编码(application/x-www-form-urlencoded),POST 请求支持多种编码方式,包括 multipart/form-data。
TCP 数据包
GET 请求通常产生一个 TCP 数据包,POST 请求则需要两个 TCP 数据包:先发送 header,再发送 data。
总的来说,GET 适用于获取数据,POST 适用于提交数据。选择使用哪种方法取决于具体需求和数据的敏感性。
九、HTTP与HTTPS
对称加密 & 非对称加密
具体做法是:发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,然后对方用自己的私钥解密拿到“对称的密钥”,这样可以确保交换的密钥是安全的前提下,使用对称加密方式进行通信。所以,HTTPS采用对称加密和非对称加密两者并用的混合加密机制。
十、OSI七层协议 / TCP/IP 四层协议
OSI:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP/IP:应用层、传输层、网络层、数据链路层
十一、数字证书申请流程
个体商户在本地生成公私钥对 -> 生成CSR(申请者信息+公钥) -> CA -> RA验证资质生成一条校验记录并使用数字签名封装 -> CA使用私钥给数字签名进行加密 -> RA -> 用户
私钥泄露了怎么办:
申请吊销数字证书,生成新的公私钥对,CSR去申请新的数字证书,然后进行时候审查时确认泄露返回。
常见的CA认证机构:Digicert(行业老大)、Let's Encrypt、北京CA、上海CA。
数字签名的三要素:真实性、完整性、不可否认性
数字签名的具体实现:
先对数据进行一次 Hash 摘要(SHA256/SM3等),然后再使用非对称加密算法(RSA/ECDSA 等)的私钥对这个摘要进行加密,这样得到的结果就是原始数据的一个签名。
在消息校验场景/身份校验场景下,通常软件发布者计算安装包的哈希 -> 对哈希值使用私钥签名 -> 发布软件安装包、数字签名、公钥 -> 软件安装者根据安装包重新计算哈希,使用公钥对数字签名运算求出哈希,如果二者相等说明安装包完整。
JWT常用加密算法:
HS256:使用对称密钥进行对称加密,如果密钥丢失则不安全。
RS256:使用非对称密钥加密。
ES256:使用非对称密钥加密,但是签名的长度短。

posted @ 2025-09-19 12:43  呈两面包夹芝士  阅读(15)  评论(0)    收藏  举报