导图社区 计算机网络
关于计算机网络的思维导图。里面包含了七层协议、五层协议、应用层、传输层、网络层、数据链路层、物理层等。
编辑于2021-10-12 23:01:52计算机网络
应用层(http,https)
网页解析全过程
这里少了ARP
get和post区别
get 提交的数据会放在 URL 之后,并且请求参数会被完整的保留在浏览器的记录里,由于参数直接暴露在 URL 中,可能会存在安全问题,因此往往用于获取资源信息。而 post 参数放在请求主体中,并且参数不会被保留,相比 get 方法,post 方法更安全,主要用于修改服务器上的资源。
get 请求只支持 URL 编码,post 请求支持多种编码格式。
get 只支持 ASCII 字符格式的参数,而 post 方法没有限制。
get 提交的数据大小有限制(这里所说的限制是针对浏览器而言的),而 post 方法提交的数据没限制
get 方式需要使用 Request.QueryString 来取得变量的值,而 post 方式通过 Request.Form 来获取。
get 方法产生一个 TCP 数据包,post 方法产生两个(并不是所有的浏览器中都产生两个)。
状态码
1XX 指示信息--表示请求正在处理
2XX 成功--表示请求已被成功处理完毕
3XX 重定向--要完成的请求需要进行附加操作
4XX 客户端错误--请求有语法错误或者请求无法实现,服务器无法处理请求
5XX 服务器端错误--服务器处理请求出现错误
HTTPS 的加密方式
HTTPS 采用对称加密和非对称加密相结合的方式,首先使用 SSL/TLS 协议进行加密传输,为了弥补非对称加密的缺点,HTTPS 采用证书来进一步加强非对称加密的安全性,通过非对称加密,客户端和服务端协商好之后进行通信传输的对称密钥,后续的所有信息都通过该对称秘钥进行加密解密,完成整个 HTTPS 的流程。
证书内容
DNS 的作用和原理
DNS(Domain Name System)是域名系统的英文缩写,用于递归地根据域名查询ip地址
列举对称加密算法和非对称加密算法
AES,DES,其中AES128及以上的才能采用
RSA,DSA(数字签名算法)
安全性
1. ARP安全性
设置静态ARP表
2. DNS安全性
子主题
3. HTTPS安全性
对称加密+非对称加密+证书
传输层(tcp,udp)
tcp和udp区别
手写TCP三次握手
三次握手
三次握手异常情况
四次挥手
为什么要四次挥手
如果把第二次挥手和第三次挥手合并在一起,就可以减少一次挥手,但是第二次挥手后可能还有数据没传输完,所以第二次挥手时标志位只有ACK,第三次才有FIN
简单来说就是因为TCP是全双工的,两个方向的连接需要单独关闭
CLOSE-WAIT
解释:
是服务端发出第一次挥手(整体第二次)进入的状态,表示"我准备关闭了,但是还有自己的事情处理一下,你等我处理完"
等服务器处理好自己的数据业务,则表示我准备好了,再发送 fin 包
有很多 CLOSE-WAIT 怎么解决
首先检查是不是自己的代码问题(看是否服务端程序忘记关闭连接),如果是,则修改代码。
(一句话概况就是修改参数缩短CLOSE-WAIT时间)调整系统参数,包括句柄相关参数和 TCP/IP 的参数,一般一个 CLOSE_WAIT 会维持至少 2 个小时的时间,我们可以通过调整参数来缩短这个时间。 句柄参数:/proc/sys/fs/file-max 调大 TCP/IP 参数:tcp_keepalive_*系列参数 调小
TIME-WAIT
解释:
是第四次挥手后,客户端进入的状态,是客户端必要的等待时间,目的是等待:1-服务端的对应端口关闭与客户端发送到服务端的数据到达(可能出现延迟),如果不存在这个步骤就会导致两个问题:
客户端立即关闭后,立即又用同样的端口握手并建立通信,此时上次的连接残留的数据包会被误认为是本次的,造成数据异常
客户端直接关闭后,若服务端重新发送 fin 包,客户端就会回应 RST,会报异常,但是其实是没有问题的
有很多TIME_WAIT 状态会导致什么问题,怎么解决:
修改配置或设置 SO_REUSEADDR 套接字,使得服务器处于 TIME-WAIT 状态下的端口能够快速回收和重用。
TIME-WAIT 为什么是 2MSL(确保往返的报文都能收到)
若服务器在 1 MSL 内没有收到客户端发出的 ACK 确认报文,再次向客户端发出 FIN 报文。如果客户端在 2 MSL 内收到了服务器再次发来的 FIN 报文,说明服务器由于一些原因并没有收到客户端发出的 ACK 确认报文。客户端将再次向服务器发出 ACK 确认报文,并重新开始 2 MSL 的计时。
若客户端在 2MSL 内没有再次收到服务器发送的 FIN 报文,则说明服务器正常接收到客户端 ACK 确认报文,客户端可以进入 CLOSE 阶段,即完成四次挥手
TCP实现可靠的方法
序列号和确认应答
校验和
流量控制
拥塞控制
超时重传
滑窗协议
UDP 为什么是不可靠的
UDP 只有一个 socket 接收缓冲区,没有 socket 发送缓冲区,即只要有数据就发,不管对方是否可以正确接收。而在对方的 socket 接收缓冲区满了之后,新来的数据报无法进入到 socket 接受缓冲区,此数据报就会被丢弃。因此 UDP 不能保证数据能够到达目的地,此外,UDP 也没有流量控制和重传机制,故UDP的数据传输是不可靠的。
TCP 拥塞控制采用的四种算法
慢开始,拥塞避免,快重传,快恢复
子主题
SYN FLOOD 是什么
SYN FLOOD携带的IP是欺骗性的非法IP,服务器发送的SYN得不到相应,会重复发送5次,重试的时间分别为 1s + 2s + 4s + 8s +16s = 31s,第5次发出后还要等32s才知道第5次也超时了,所以一共是31 + 32 = 63s,会占用半链接队列,最后撑爆半链接队列
解决方法:
扩大半链接队列,或者将半链接队列中最久未使用的移出
真实客户端IP加入白名单。下次访问直接通过,而其他伪造的syn报文就被拦截。
TCP包里面装了什么
UDP包内容
TCP 粘包问题
网络层(IP)
ARP 地址解析协议
① 首先,每个主机都会在自己的 ARP 缓冲区中建立一个 ARP 列表,以表示 IP 地址和 MAC 地址之间的对应关系;
② 当源主机要发送数据时,首先检查 ARP 列表中是否有 IP 地址对应的目的主机 MAC 地址,如果存在,则可以直接发送数据,否则就向同一子网的所有主机发送 ARP 数据包。该数据包包括的内容有源主机的 IP 地址和 MAC 地址,以及目的主机的 IP 地址。
③ 当本网络中的所有主机收到该 ARP 数据包时,首先检查数据包中的 目的 主机IP 地址是否是自己的 IP 地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的 IP 和 MAC 地址写入到 ARP 列表中,如果已经存在,则覆盖,然后将自己的 MAC 地址写入 ARP 响应包中,告诉源主机自己是它想要找的 MAC 地址。
④ 源主机收到 ARP 响应包后。将目的主机的 IP 和 MAC 地址写入 ARP 列表,并利用此信息发送数据。如果源主机一直没有收到 ARP 响应数据包,表示 ARP 查询失败。
数据链路层
为什么有了 MAC 地址还需要 IP 地址
MAC地址长度为48位,如果仅由mac地址寻址,则路由器要256T的内存,不现实
ip地址和地域是相关的,路由器可以通过IP地址前缀知道这个设备属于哪个子网,剩下的寻址就交给子网内部实现,从而大大减少了路由器所需要的内存。
为什么有了 IP 地址还需要 MAC 地址
只有当设备连入网络时,才能根据他进入了哪个子网来为其分配 IP 地址,在设备还没有 IP 地址的时候或者在分配 IP 地址的过程中,我们需要 MAC 地址来区分不同的设备。
简单地说就是设备接入网络之后才会有IP地址,没接入之前用mac地址区分
物理层
五层协议
应用层(http,https)
传输层 (tcp,udp)
网络层(IP)
数据链路层
物理层
七层协议
应用层(http,https)
表示层
会话层
传输层 (tcp,udp)
网络层(IP)
数据链路层
物理层