Dev Guide / Java开发技术guide / 计算机基础
content/dev-guide/a-Java开发技术guide/01-计算机基础/计算机网络.md
- 网络分层模型
- OSI 七层模型:
- 应用层:为计算机用户提供服务
- 表示层:数据处理(编码、加密解密、压缩解压缩)
- 会话层:管理(建立、维护、重连)应用程序之间的会话
- 传输层:两台主机进程之间的通讯提供通用的数据传输服务
- 网络层:路由和寻址(决定数据在网络的游走路径)
- 数据链路层:帧编码和误差纠正
- 物理层:透明的传送比特流传输
- TCP/IP 四层模型:
- 应用层:(应用层 + 表示层 + 会话层)主要提供两个终端设备上的应用程序之间信息交换的服务,它定义了信息交换的格式,消息会交给下一层传输层来传输
- 传输层:负责向两台终端设备进程之间的通信提供通用的数据传输服务
- 网络层:负责为分组交换网上的不同主机提供通信服务
- 网络接口层:(数据链路层+物理层)
- 为什么要分层:各层之间相互独立(跟接口类似,专注做自己的事情)、提高整体的灵活性、大问题划小
- 常见的网络协议:
- 应用层:HTTP(基于TCP)、SMTP(简单邮件发送协议,基于TCP)、POP3/IMAP(邮件接收协议,基于TCP)、FTP(文件传输,基于TCP)、Telnet(远程登录协议,基于TCP)、SSH(安全的网络传输协议,基于TCP)、RTP(基于UDP)、DNS(基于UDP)
- 传输层:TCP(面向连接的协议,可靠的数据传输服务)、UDP(无连接的协议,不保证可靠性)
- 网络层:IP、ARP(地址解析协议)、ICMP(网络控制报文协议)、NAT(网络地址转换协议)、OSPF(开放式最短路径优先)、RIP(路由信息协议)、BGP(边界网关协议)
- HTTP协议(网络开销较大)
- 从输入URL到页面展示的过程
- HTTP状态码
- HTTP和HTTPS
- HTTP/1.1 和 HTTP/2.0 有什么区别?
- HTTP 是不保存状态的协议, 如何保存用户状态?
- Websocket
- WebSocket 是一种基于 TCP 连接的全双工通信协议,即客户端和服务器可以同时发送和接收数据
- WebSocket 和 HTTP 的区别
- WebSocket 是一种双向实时通信协议,而 HTTP 是一种单向通信协议。并且,HTTP 协议下的通信只能由客户端发起,服务器无法主动通知客户端。
- WebSocket 使用 ws:// 或 wss://作为协议前缀,HTTP 使用 http:// 或 https:// 作为协议前缀,协议前缀不同
- WebSocket 可以支持扩展,用户可以扩展协议,实现部分自定义的子协议,如支持压缩、加密等。
- WebSocket 通信数据格式比较轻量,用于协议控制的数据包头部相对较小,网络开销小,而 HTTP 通信每次都要携带完整的头部,网络开销较大
- DNS
- DNS 是应用层协议,它可以在 UDP 或 TCP 协议之上运行,端口为 53 。
- DNS服务器:根DNS服务器、顶级DNS服务器、权威DNS服务器、本地DNS服务器
- DNS 的解析过程
- 迭代查询(本地DNS跑腿,客户端等待结果):
- 输入 URL,客户端(浏览器/系统)先查询本地缓存,如果缓存中有该域名对应的 IP,则直接返回结果,解析结束
- 如果客户端缓存中没有,则向【本地 DNS 服务器】(如 dns.poly.edu)发起查询;本地 DNS 先查自己的缓存,如果有记录,则直接返回结果给客户端
- 如果本地 DNS 缓存中没有,则向【根 DNS 服务器】查询;根服务器查缓存/配置,发现是 .edu 域名,返回 .edu 的 TLD 服务器地址(不直接返回最终 IP)
- 本地 DNS 拿到 TLD 地址后,向【顶级域(TLD)DNS 服务器】(如 .edu 服务器)查询;TLD 服务器发现是 umass.edu 子域,返回 umass.edu 的权威 DNS 服务器地址
- 本地 DNS 拿到权威服务器地址后,向【权威 DNS 服务器】(如 dns.cs.umass.edu)查询;权威服务器查自己的区域记录,找到 gaia.cs.umass.edu 对应的 IP 地址,返回给本地 DNS
- 本地 DNS 将最终 IP 地址返回给客户端,同时将该记录缓存起来,供后续查询使用
- 递归查询:
- 输入 URL,客户端(浏览器/系统)先查询本地缓存,如果缓存中有该域名对应的 IP,则直接返回结果,解析结束
- 如果客户端缓存中没有,则向【本地 DNS 服务器】发起递归查询请求(设置标志位 RD=1),并等待最终结果
- 本地 DNS 服务器收到递归请求后,先查自己的缓存;如果有记录,则直接返回结果给客户端,流程结束
- 如果本地 DNS 缓存也没有,则代表客户端开始逐级查询(此阶段本地 DNS 通常使用迭代方式向其他服务器查询):
• 先向【根 DNS 服务器】查询,根返回 .edu 的 TLD 服务器地址
• 再向【.edu TLD 服务器】查询,TLD 返回 umass.edu 的权威 DNS 地址
• 最后向【权威 DNS 服务器】查询,权威返回 gaia.cs.umass.edu 的最终 IP 地址
- 本地 DNS 拿到最终 IP 后,将结果缓存起来,然后一次性返回给客户端
- 客户端收到 IP 地址,开始发起实际的 HTTP/HTTPS 请求
- DNS劫持:DNS 劫持是一种网络攻击(DNS 重定向),它通过修改 DNS 服务器的解析结果,使用户访问的域名指向错误的 IP 地址,从而导致用户无法访问正常的网站,或者被引导到恶意的网站
- TCP和UDP(传输层协议)
- TCP和UPD的区别:
- TCP 是面向连接的协议,UDP 是无连接的协议。
- TCP 是可靠的协议(tcp通过序列号、确认应答、超时重传、流量控制、拥塞控制等机制确保数据无差错、不丢失、不重复且按顺序地到达目的地),UDP 是不可靠的(尽最大努力交付,不保证数据一定能到达)协议。
- TCP 是有状态(连接状态)协议,UDP 是无状态协议。
- TCP 传输效率较低(建立连接、发送确认、处理重传等开销较大)、UDP 结构简单,没有复杂的控制机制,开销小,传输速率较快
- TCP 面向字节流传输(会对数据进行拆分合并)、UDP面向报文(应用程序交给 UDP 多大的数据块,UDP 就照样发送,既不拆分也不合并)
- TCP 头部开销至少需要20字节,UDP 头部开销固定为8字节
- TCP 通信模式点对点(单播),UDP 通信模式支持单播、多播、广播
- TCP的三次握手和四次挥手
- 三次握手:
- 客户端向服务器发送一个SYN(x)包,表示要开始一个TCP连接(发送后客户端进入SYN_SEND状态,等待服务端的确认)。
- 服务器收到 SYN(x) 包后,返回一个 SYN(y) + ACK(x + 1) 包,表示服务器同意开始一个 TCP 连接(发送后服务器进入SYN_RCVD状态,等待客户端的ACK包)。
- 客户端收到 SYN(y) + ACK(x + 1) 包后,发送 ACK(y + 1) 包,表示开始一个 TCP 连接(发送后客户端进入ESTABLISHED状态,服务端收到ACK包,进入 ESTABLISHED 状态,开始通信)。
- 四次挥手
-
- 客户端向服务器发送一个 FIN 包,该报文包含一个序列号seq(x),表示要结束一个 TCP 连接(客户端发送FIN后,进入FIN_WAIT_1状态,等待服务器的ACK包)。
-
- 服务器收到 FIN 包后,返回一个 ACK(ack=x+1) 包,表示收到来自客户端的 FIN 包(服务端发送ACK后,进入CLOSE_WAIT状态,客户端收到ACK包,进入FIN_WAIT_2状态。此时客户端到服务端的通道已关闭,服务端到客户端仍然可以传输数据,此时tcp通道处于半关闭状态)。
-
- 服务端确认所有待发送的数据都传输完毕后,向客户端发送一个FIN包,该报文段包含一个序列号seq(y),表示自己准备关闭连接(服务端发送给客户端一个FIN报文段后,进入 LAST_ACK状态,等待客户端的最后确认)。
-
- 客户端收到服务端的 FIN 包后,会回复一个最终的ACK(ack=y+1)包(客户端回复ACK后进入 TIME-WAIT 状态。服务端在收到这个 ACK 后,立即进入 CLOSED 状态,连接通道关闭。客户端则会在 TIME-WAIT 状态下等待 2MSL(报文段最大生存时间)后,才最终进入 CLOSED 状态)。
- TCP如何保证传输的可靠性(不丢失、不重复、按序到达)
- 基于数据块传输
- 对失序数据包重新排序以及去重:TCP 为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重
- 校验和:TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段
- 重传机制:ARQ协议(自动重传请求)、连续ARQ协议(连续自动重传请求)、超时重传
- 流量控制:如何实现拥塞控制
- 拥塞控制:如何实现流量控制
- ARP(地址解析协议,IP转MAC地址)
- MAC地址:MAC 地址的全称是 媒体访问控制地址(Media Access Control Address)。如果说,互联网中每一个资源都由 IP 地址唯一标识(IP 协议内容),那么一切网络设备都由 MAC 地址唯一标识,属于数据链路层。
- ARP协议:它解决的是网络层地址和数据链路层地址之间的转换问题。通俗的说,一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 是通过查询映射表来获取对应关系。
- ARP的工作原理:同一个局域网内的MAC寻址、不同局域网内的MAC寻址
- NAT(网络转换协议)
- 网络地址转换,协议实现 子网/局域网(LAN)↔ 广域网(WAN) 之间的 IP 地址映射与转换
- 协议特点:
- NAT 协议通过对 WAN 屏蔽 LAN,有效地缓解了 IPv4 地址分配压力
- LAN 主机 IP 地址的变更,无需通告 WAN。
- WAN 的 ISP 变更接口地址时,无需通告 LAN 内主机。
- LAN 主机对 WAN 不可见,不可直接寻址,可以保证一定程度的安全性。