网络体系结构
1、OSI网络模型
2、TCP/IP网络模型
3、原理体系结构
分层可以将庞大复杂的问题,转化为若干较小的局部问题,而这些较小的局部问题就比较易于研究和处理。
OSI模型是理论上的网络模型,实际上Linux系统等用的还是TCP/IP模型。
4、介绍一下OSI七层协议,各层协议都有哪些?
OSI参考模型共有7层,从上到下分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
应用层的协议有HTTP、HTTPS,传输层的协议有TCP、UDP,网络层的协议有IP、ICMP、ARP。
我认为网络分层的好处是,对各个层之间进行解耦,层与层之间不会产生关联性,比如我们的应用层,从http1.1升级到http2.0的时候,不会对传输层、网络层等有影响,或者网络层的IPv4升级到IPv6的时候也不影响应用层、传输层。
但是,OSI模型只是理论模型,实际上因特网的网络模型是TCP/IP网络模型,它对OSI参考模型做了简化,把应用层、表示层、会话层统一成了应用层,数据链路层和物理层统一成了网络接口。
5、TCP/IP网络模型有哪几层?
TCP/IP网络模型有四层,分别是应用层、传输层、网络层、网络接口层。
- 应用层:负责为应用软件提供网络服务,例如HTTP、HTTPS、DNS等协议。
- 传输层:负责为应用层提供数据传输服务,传输层协议有TCP、UDP,TCP提供一对一,面向连接的可靠通信服务,UDP提供一对一或一对多的无连接的不可靠的通信服务。
- 网络层:负责主机寻址,打包和路由功能。网络层的核心协议是IP、ARP、ICMP等协议。IP协议负责寻址和路由,ARP协议负责获取MAC地址,ICMP负责提供诊断功能并报告错误。
- 网络接口层:负责为网络层提供链路传输的服务,负责在以太网、WiFi这样的底层网络上发送原始数据包,工作在网卡这个层次,使用MAC地址来标识网络上的设备。
6、IP协议和TCP协议属于那一层?
IP协议属于网络层,TCP协议属于传输层。
7、输入网址后,期间发生了什么?
- 浏览器会先解析URL,解析出域名、资源路径、端口等信息,然后构造HTTP请求报文。
- 接着进行域名解析,将域名解析为IP地址,会先查系统缓存是否有域名信息,如果有就返回IP地址,没有就会查看本地系统host文件有没有域名信息,如果有就返回IP地址,如果没有就去查本地DNS服务器,如果本地DNS服务器缓存中有域名信息,就返回IP地址,否则本地DNS服务器分别去根域名服务器、顶级域名服务器、权威域名服务器询问,最后拿着返回的IP交给浏览器。
- 由于HTTP是基于TCP传输的,所以在发送HTTP请求前,需要进行三次握手,在客户端发送第一次握手的时候,TCP头部会填上SYN标记位,同时填上目标端口和源端口的信息。源端口是浏览器随机生成的,目标端口要看是HTTP还是HTTPS,如果是HTTP默认目标端口是80,如果是HTTPS默认是443。
- 然后到网络层,会加上IP头,同时填上目标IP地址和源IP地址。
- 然后到数据链路层,会通过ARP协议,获取路由器的MAC地址,然后会加上MAC头,填上MAC地址和源MAC地址。
- 然后到物理层之后,直接把数据包,转发给路由器,最终找到目标服务器,然后目标服务器接收到客户的SYN报文后,会响应第二次握手。
- 当双方都完成三次握手后,如果是HTTP协议,客户端会将HTTP请求发送给目标服务器,如果是HTTPS协议,客户端还要和服务端进行TLS四次握手之后,客户端才会将HTTP报文发送给目标服务器。
- 目标服务器收到HTTP请求信息后,就返回HTTP响应消息,浏览器会对响应消息进行解析渲染,呈现给用户。
8、DNS是如何解析的?属于那一层的协议?
DNS属于应用层的协议,客户端在DNS解析时,会先查找浏览器和操作系统的缓存,若无结果则向本地DNS服务器查询,若本地DNS服务器也无缓存,则逐级向根DNS、TLD服务器和权威DNS服务器请求,最终获取域名的IP地址。
9、DNS域名解析使用了什么协议?
DNS域名解析请求和响应都是基于UDP进行传输的。
UDP是一种无连接的传输层协议,它提供了一种简单的传输机制,适用于对实时性要求较高的应用场景。DNS使用UDP协议进行域名解析是因为域名解析通常是短小而频繁的请求,UDP的无连接特性可以减少建立和断开连接的开销,并提高解析的效率。
UDP对于TCP的缺点是没办法保证数据的可靠运输,针对这个缺陷,可以在应用层实现一个超时重传机制,如果域名解析请求在一定时间内没收到响应,那么就重发域名解析请求。
参考资料
https://xiaolincoding.com/network/