【面试基础】 计算机网络

1.OSI TCP/IP模型简介

先简单介绍一下计算机网络的基础之基础,OSI模型以及实际应用中常用的TCP/IP模型。

OSI模型TCP/IP模型作用常用协议
应用层 (Application Layer)应用层 (Application Layer)为应用程序提供网络服务接口,处理高层数据传输HTTP, FTP, SMTP, DNS, Telnet
表示层 (Presentation Layer)(合并到应用层)负责数据格式转换、加密、解密、压缩SSL, TLS, JPEG, MPEG
会话层 (Session Layer)(合并到应用层)管理应用程序之间的会话,建立、维持和终止通信会话,表示的是应用程序与应用程序的连接NetBIOS, RPC
传输层 (Transport Layer)传输层 (Transport Layer)提供端到端的传输服务,负责可靠性和流量控制TCP, UDP
网络层 (Network Layer)网络层 (Internet Layer)负责路由选择和数据包在不同网络之间的传输,表示的是传播的路径IP (IPv4, IPv6), ICMP, IGMP
数据链路层 (Data Link Layer)网络接口层 (Network Interface Layer)负责数据帧的传输,提供节点之间的可靠连接以太网, PPP, ARP, RARP
物理层 (Physical Layer)网络接口层 (Network Interface Layer)负责比特流的物理传输,通过物理媒介进行数据传输。表示的是物理性质。如光纤的性能

Ethernet (物理层方面), IEEE 802.11

协议

应用层协议

常用的浏览器使用的HTTP协议,文件传输使用的FTP协议,进行域名解析的DNS协议都是在这一层。这里讲解一下DNS协议,下文会讲到HTTP协议。

DNS域名解析流程

  1. 浏览器检查缓存

    • 用户在浏览器中输入网址(例如,www.example.com)。
    • 浏览器首先检查本地缓存中是否有该域名对应的IP地址(通常是临时存储的DNS记录),如果有,则直接使用此IP地址,解析过程结束。
  2. 操作系统缓存检查

    • 如果浏览器缓存中没有找到,操作系统会检查自己的DNS缓存(这一级别通常是在操作系统层面存储的DNS记录)。
    • 如果操作系统缓存中有对应的IP地址,也会直接使用此IP地址,解析过程结束。
  3. 查询本地DNS服务器

    • 如果操作系统缓存中没有对应的记录,浏览器会向本地配置的DNS服务器(通常是由互联网服务提供商(ISP)提供的DNS服务器)发送DNS请求,询问该域名对应的IP地址。
  4. 本地DNS服务器检查缓存

    • 本地DNS服务器会先检查自己缓存中是否有该域名对应的IP地址。如果有,则返回IP地址给浏览器,解析过程结束。
  5. 向根DNS服务器发起请求

    • 如果本地DNS服务器的缓存中没有该域名的记录,它会向DNS系统的根DNS服务器发起查询请求。根DNS服务器不直接提供域名的IP地址,但它会返回顶级域(例如 .com)的DNS服务器地址。
  6. 查询顶级域DNS服务器

    • 本地DNS服务器接收到根DNS服务器返回的顶级域(例如 .com)DNS服务器的地址后,会向该顶级域DNS服务器发起查询,询问该域名(example.com)的权威DNS服务器地址。
  7. 查询权威DNS服务器

    • 顶级域DNS服务器返回的是example.com的权威DNS服务器的地址。本地DNS服务器接收到后,再向这个权威DNS服务器发起请求,询问具体的子域名(例如 www.example.com)的IP地址。
  8. 权威DNS服务器返回IP地址

    • 权威DNS服务器返回该域名(例如 www.example.com)的实际IP地址给本地DNS服务器。
  9. 缓存并返回IP地址

    • 本地DNS服务器接收到权威DNS服务器的回复后,将域名与IP地址的映射关系缓存一段时间(根据TTL值),并将IP地址返回给发起请求的浏览器。
  10. 建立连接

    • 浏览器收到IP地址后,使用该IP地址向服务器发起TCP连接(如通过HTTP或HTTPS协议),并开始与目标服务器的通信。

传输层协议

TCP

主要是TCP协议以及UDP协议,先看一下TCP协议。

TCP头20个字节,包括源端口 目的端口  序列号 确认序号等,是可靠的,需要建立连接的协议。

讲到TCP协议,必不可少的是建立连接的三次握手和四次挥手。

三次握手

简单而言,客户端向服务器端发送SYN数据包,客户端进入SYN-SENT状态,服务器端回SYN和ACK数据包,然后服务器端从LISTEN状态进入SYN-RCVD状态,客户端发送ACK数据包然后进入ESTABLISHED状态,服务器端接收ACK包进入ESTABLISHED状态。

四次挥手

客户端发送FI9N数据包,进入FIN_WAIT_1状态,服务端接收FIN数据包,进入Close_wa状态,然后向客户端发送ACK数据包,客户端接收ACK数据包进入FIN_WAIT_2状态。服务端需要确认客户端有没有接收到数据包,再发送一个FIN和ACK数据举报,进入LAT_ACK状态,然后客户端接收数据包,进入TIME_WAIT状态,并向服务端发送ACK数据包,表示自己接收到了数据包,进入TIME_WAIT(计时等待状态),服务端接收数据包,服务端和客户端关闭连接。

UDP        

UDP头是8个字节,包括源端口 目的端口 UDP长度 校验和,是不可靠的,不需要建立连接的协议。需要注意的是TCP和UDP都是不安全的协议,安全的协议是HTTPS,这里会在后文中介绍。

网络层协议

IP协议

这里主要介绍IP协议,和TCP一样,首部也是20个字节,有源IP地址和目的IP地址,但是没有源端口和目的端口。

ICMP(Internet Control Message Protocol) 报文控制协议

在进行网络测试用到的ping命令就是用的ICMP报文控制协议,看目标可不可达。

  1. ICMP Echo Request:源主机发送一个 ICMP Echo Request(ping 请求)到目标主机,测试其连通性。
  2. ICMP Echo Reply:目标主机接收到 ping 请求后,发送 ICMP Echo Reply(ping 响应)回源主机。
  3. 结果:源主机接收到响应后,可以计算往返时间(Round-Trip Time, RTT),以判断连接质量。

数据链路层

ARP协议 RARP协议

ARP协议就是将IP映射成MAC地址,RRAP就是MAC映射成MAC地址。

源主机向局域网内的主机广播"IP未192.168.1.2的MAC地址是多少”,局域网内的IP地址不为192.168.1.2的主机会丢弃这个报文,IP地址符合的主机会解析这条报文,并将“IP地址为192.168.1.2的主机的MAC地址为XXX”单播出去,这样的源主机就获得了目标主机的MAC地址,并缓存这条记录。

PPP协议

ppp就是点对点协议,也就是一台主机只与一台主机进行通信。详细来说就是用于在两个直接连接的节点之间传输数据的通信协议,广泛应用于拨号连接、DSL、ISDN等场景下的广域网(WAN)连接。它支持多种网络层协议,并提供了认证、加密、压缩等功能。这里不再过多赘述,详细可上网搜索。

物理层

物理层考的比较少。

HTTP/HTTPS

这里需要将HTTP/HTTPS单独讲,因为是一个涉及范围相对较大的知识点,同事可以把OSI模型串起来。以在浏览器中输入baidu.com这个网址为例,讲一下实际会发生什么。

域名解析

  1. 客户端应用层发送报文”baidu.com的IP地址是多少"
  2. 传递到传输层,加上TCP头,20字节,操作系统分配一个源端口,加上一个目的端口53
  3. 传递到网络层,加上IP头,20字节,获取本机IP地址作为源IP地址,还有目的IP192.168.3.4.
  4. 操作系统看到源IP地址和目的IP地址不在一个网段内,这时数据报文就要给网关192.168.3.1们也就是路由器LAN口的IP地址。
  5. 传递到链路层,加上帧头,通过ARP协议通过IP地址获取MAC地址,假如目的IP地址未为192.168.3.4。那么将广播“请问192.168.3.1的IP地址是多少”,局域网内的主机收到请求,检查IP地址是否与本机一致,不一致则丢弃包,网关也就是路由器的LAN口接收请求,发现与IP地址一致,将自己的MAC地址单播发送给客户端。客户端发送报文,局域网内所有主机都会收到报文,只有路由器LAN口的MAC地址与报文的MAC地址一致,然后网上网络层传输;
  6. 网络层收到数据包后,检查源IP地址和目的IP地址,将私有IP转为公网IP,并将端口改掉,将记录存到NAT表中。
  7. 从路由器WAN口发出去的IP为公网IP,向根DNS服务器发起请求,查询缓存中是否有域名相应IP地址,如果没有,则通过权威DNS服务器一层一层递归返回数据报文“baidu.com的IP地址是xx.xxx.xx"。
  8. 路由器在LAN口将数据报文广播发出去。客户端查询IP地址是字节,博取数据链路层的帧头,给网络层,网络层查看IP地址,剥去IP头传给传输层。
  9. 传输层解析端口,再给DNS客户端,这时候DNS就知道IP地址了

HTTP如何传输大文件

HTTP存在的问题

因为建立连接要三次握手,四次挥手,需要3个RTT,获取资源需要2个RTT,这样就会浪费60%的时间资源。HTTP1.x引入了cookie解决无状态的问题,HTTP2主要解决性能问题,主要解决两个问题:包头过大,队列阻塞。

包头过大,使用HPACK算法,客户端和服务端共同维护一张表,压缩和解压缩就是查表和更新表达的操作。将请求方法/状态码等变成头字段的形式,除此之外,还会用哈夫曼编码来压缩整数和字符串。HTTP1.x是请求应答模式,HTTP2.x是采用的二进制分帧和流式传播来解决这个问题。

流式传播,在里面流动了一串有先后顺序的数据帧。这些数据帧按照次序组装起来就是HTTP1里的请求报文和响应报文。HTTP2可以在一个TCP连接上用。

HTTP/HTTPS对比

HTTP

HTTPS

明文传输

使用到了SSL和HTTP,数据传输过程是加密的,安全性较好

端口,TCP 80

端口 TCP 443

响应速度较快 只需要TCP三次握手建立连接,客户端和服务器只需要交换三个包

除了TCP的三个包,还需要ssl握手的9个包,一共是12个包

耗费资源较少

建立在SSL/TLS之上的HTTP协议,比较耗费资源

无额外费用

需要申请CA证书,有额外费用

HTTPS的安全性

https主要是提供对网站服务器的身份验证,保护交换数据的隐私和安全性。这里还需介绍堆成加密和非对称加密的概念。

对称加密就是发送方和接收方都是一个密钥,非对称加密就是发送方和接收方的密钥不一致,常分为公钥和私钥,公钥是可分享给他人的密钥,私钥就是不可分享给他人,私有的密钥。

参考文献

HTTP 与 HTTPS 的区别 | 菜鸟教程 (runoob.com)

了解 HTTP 看这一篇就够-腾讯云开发者社区-腾讯云 (tencent.com)

  • 19
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值