网络分层模型是用于描述网络协议与网络硬件之间相互作用的一种模型,在实际应用中,通常采用
OSI模型或TCP/IP
模型。
OSI模型将网络协议分为七层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每一层都有对应的协议和功能,每一层都向上一层提供服务并从下一层接收服务。
TCL/IP模型将网络的协议分为了四层,分别为网络接口层、网络层、传输层和应用层。网络接口层和网络层对应与OSI模型中的物理层、数据链路层和网络层,传输层和应用层对应于OSI模型中的传输层、会话层、表示层和应用层。
网络分层模型的作用是将网络通信过程分解成多个层级,使得不同的层级可以独立设计、实现和维护,从而提高了网络协议的通用性、可靠性和灵活性。网络分层模型害便于开发人员和维护人员对网络通信过程进行分析和故障排查。
- 物理层:物理层是网络模型的最低层,主要关注设备间如何传输原始比特流,包括连接器、接口、传输介质、信道复用技术等。
- 数据链路层:数据链路层是网络模型的第二层,主要关注网络节点之间的链路连接,包括数据的封装、错误检测、流量控制、媒体接入和链路管理等。
- 网络层:网络层是网络模型的第三层,主要关注数据包的路由和转发,包括IP地址的管理、数据包的分段和组装、路由器的功能和协议等。
- 传输层:传输层是网络模型的第四层,主要关注数据传输的端到端可靠性,包括TCP和UDP等协议,TCP协议提供可靠传输,UDP协议提供非可靠传输。
- 会话层:会话层是网络模型的第五层,主要关注应用程序之间的会话管理,包括会话建立、维护和结束等。
- 表示层:表示层是网络模型的第六层,主要关注数据格式的表示和转换,包括数据加密和压缩等。
- 应用层:应用层是网络模型的最高层,主要关注数据通信的应用,包括http、ftp等应用层协议。
每一层都专注做一件事情,并且每一层都需要使用下一层提供的功能,比如传输层需要使用网络层提供的路由和寻址功能,这样传输层才知道把数据传输到哪里。
OSI的七层体系结构概念清楚,理论也很完整,但是它比较复杂,并且不实用,有些功能在多个层中重复出现。
- 网络接口层:网络接口层是TCP/IP模型的最底层,它负责将数据在计算机网络中进行物理传输,包括物理设备之间的地址解析、多路复用和帧同步等。
- 网络层:网络层是TCP/IP模型的第二层,它负责把数据包从源主机传送到目标主机,包括IP协议、ICMP协议、ARP协议、RARP协议,和路由器等。
- 传输层:传输层是TCP/IP模型的第三层,它负责提供端对端(End-to-End)的数据传输服务,包括TCP协议和UDP协议,TCP协议提供可靠的数据传输,UDP协议提供简单的数据传输。
- 应用层:应用层是TCP/IP模型的最高层,它负责网络应用之间的交互,包括各种协议,如HTTP、FTP、SMTP、DNS、TELNET 等。
在后端开发过程中我们经常也会按照功能的不同将系统分层,比如前后端交互的控制层Controller,业务操作层Service还有数据库操作Dao层。
复杂的系统需要分层,因为每一层都需要专注于一类事情,网络分层也是一样的原理。
整体说说为什么网络需要分层,首先就是为了各层之间相互独立,各层之间不需要关心其他层是如何实现的,只需要知道自己如何调用下层提供好的功能就可以了。其次就是可以提升网络的可靠性和可扩展性,每一层提供不同的服务和功能,各层之间独立设计实现和维护,从而加快了开发和维护速度。最后还可以降低系统的复杂度,不同的层关注不同的问题,更容易用各种优化方案来优化各自的功能和服务。
常见的网络协议有 HTTP、FTP、SMTP、POP3/IMAP、Telnet、SSH、RTP、DNS等。
- HTTP(Hypertext Transfer Protocol,超文本传输协议):基于TCP协议,是一种超文本传输协议,用于浏览器和Web服务器之间传输超媒体文档的协议。当使用浏览器浏览网页时,网页就是通过HTTP请求进行加载的。
- SMTP(Simple Mail Transfer Protocol,简单邮件发送协议):简单邮件传输协议,用于发送电子邮件的协议,只负责邮件的发送。
- POP3/IMAP(邮件接收协议):两者都是负责邮件接收协议,IMAP相较于POP3更新更强大,支持邮件搜索、标记、分类、归档等高级功能,而且可以在多个设备之间同步邮件状态。几乎现代电子邮件客户端和服务器都支持IMAP。
- FTP(File Transfer Protocol,文件传输协议) : 文件传输协议,用于网络上进行文件传输,是一种不安全的协议,因为传输过程不会对数据进行加密。
- Telnet(远程登陆协议):远程登录协议,用于远程登录到其他服务器,缺点之一是所有数据包括账号密码都是以明文形式发送。
- SSH(Secure Shell Protocol,安全的网络传输协议):基于 TCP 协议,通过加密和认证机制实现安全的访问和文件传输等业务。
- RTP(Real-time Transport Protocol,实时传输协议):通常基于 UDP 协议,但也支持 TCP 协议。它提供了端到端的实时传输数据的功能,但不包含资源预留存、不保证实时传输质量,这些功能由 WebRTC 实现。
- DNS(Domain Name System,域名管理系统): 基于 UDP 协议,用于解决域名和 IP 地址的映射问题。
- TCP(Transmission Control Protocol,传输控制协议 ):提供 面向连接 的,可靠 的数据传输服务。
- UDP(User Datagram Protocol,用户数据协议):提供 无连接 的,尽最大努力 的数据传输服务(不保证数据传输的可靠性),简单高效。
- IP(Internet Protocol,网际协议):TCP/IP协议中最重要的协议之一,主要作用是定义数据包的格式、对数据包进行路由和寻址,便于它们跨网络传播并达到正确的目的地。目前的IP协议主要有两种,IPv4是目前应用广泛的协议,IPv6是IPv4的升级版。
- ARP(Address Resolution Protocol,地址解析协议):地址解析协议,用于将IP地址映射为MAC地址,以便进行数据链路层的通信。
- ICMP(Internet Control Message Protocol,互联网控制报文协议):是一种互联网控制消息协议,用于发送错误消息和诊断消息。
- NAT(Network Address Translation,网络地址转换协议):NAT 协议的应用场景如同它的名称——网络地址转换,应用于内部网到外部网的地址转换过程中。具体地说,在一个小的子网(局域网,LAN)内,各主机使用的是同一个 LAN 下的 IP 地址,但在该 LAN 以外,在广域网(WAN)中,需要一个统一的 IP 地址来标识该 LAN 在整个 Internet 上的位置。
- OSPF(Open Shortest Path First,开放式最短路径优先):一种内部网关协议(Interior Gateway Protocol,IGP),也是广泛使用的一种动态路由协议,基于链路状态算法,考虑了链路的带宽、延迟等因素来选择最佳路径,特点是快速收敛,高效稳定,常用于大型网络中。
- RIP(Routing Information Protocol,路由信息协议):一种内部网关协议(Interior Gateway Protocol,IGP),也是一种动态路由协议,基于距离向量算法,使用固定的跳数作为度量标准,选择跳数最少的路径作为最佳路径。
- BGP(Border Gateway Protocol,边界网关协议):一种用来在路由选择域之间交换网络层可达性信息(Network Layer Reachability Information,NLRI)的路由选择协议,具有高度的灵活性和可扩展性。
- 输入URL,输入过程中浏览器会自动智能匹配你的历史记录,书签,找到已经输入的字符串可能对应的 url,然后给出智能提示,让你可以补全url地址。
- DNS解析,解析你的URL的协议,主机号等,将域名转化为ip地址
- TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
- Informational(信息性状态码): 接收的请求正在处理
- Success(成功状态码): 请求正常处理完毕
- Redirection(重定向状态码): 需要进行附加操作以完成请求
- Client Error(客户端错误状态码): 服务器无法处理请求
- Server Error(服务器错误状态码): 服务器处理请求出错
- URL前缀不同: 一个前缀是
http://
,一个是https://
- 端口号不同: HTTP使用的是80端口,HTTPS使用的是443端口。
- 传输内容的安全性不同: HTTP协议运行在TCP上,传输的内容都是明文,HTTPS通过SSL或TLS等协议实现了加密传输,加密采用对称加密,但堆成加密的密钥用服务方的证书进行了非对称加密。所以HTTPS安全性更高,同时耗费的服务器资源更多。
- 传输速度不同: 因为HTTP不需要加密,所以传输速递比较快,而HTTPS要进行数据的加密和解密,因此传输速度相对较慢。
HTTP是一种不保存状态,即无状态协议。也就是HTTP协议自身不对请求和响应之间的通信状态进行保存。想要保存用户状态,就要使用到
Session
,Session的主要作用就是通过服务端记录用户的状态。比如我们在添加商品到购物车时,系统不知道是哪个用户进行操作的,因为HTTP协议是无状态的。服务器根据每个会话的用户生成一个唯一的Session ID并保存在Cookie中,在客户端浏览器再次访问服务器时,服务器会根据Session ID来恢复用户状态。
Cookie被禁用了怎么办?
最常见的方法就是利用URL重写把Session ID直接附加在URL路径后面。
- URI(Uniform Resource Identifier) 是统一资源标志符,可以唯一标识一个资源。
- URL(Uniform Resource Locator) 是统一资源定位符,可以提供该资源的路径。它是一种具体的 URI,即 URL 可以用来标识一个资源,而且还指明了如何 locate 这个资源。
URI 的作用像身份证号一样,URL 的作用更像家庭住址一样。URL 是一种具体的 URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。
- 存储位置不同: Cookie是存储在客户端的浏览器中的一段文本,而Session是存储在服务器端的一段内存或硬盘文件中的数据。
- 安全性不同: Cookie信息是明文存储在浏览器中,容易被篡改和窃取,因此需要进行加密或签名保护。而Session信息存储在服务器端,不容易被窃取,但也需要进行一些安全性保障措施。
- 有效期不同: Cookie可以设置过期时间,控制保存的时间,而Session默认情况下是关闭浏览器时自动清除。
- 穿透性不同: Cookie可以跨域访问,不同域名的Cookie可以相互访问,而Session只在同一个域名下共享。
- 存储容量不同: Cookie存储的数据容量有限制,一般为4KB左右,而Session存储的数据容量相对更大。
总的来说,Cookie一般用于存储一些较小的用户状态信息,例如用户ID和密码等,方便用户下次访问时恢复身份,用于保留用户的登录状态。而Session则一般用于存储一些需要更安全保护或者更大容量的用户信息,比如购物车内容、用户配置信息等。
- 测试网络连接性
- 排除网络故障
- 测试网络中的精确时间
PING 基于网络层的 ICMP(Internet Control Message Protocol,互联网控制报文协议),其主要原理就是通过在网络上发送和接收 ICMP 报文实现的。ICMP 报文中包含了类型字段,用于标识 ICMP 报文类型。ICMP 报文的类型有很多种,但大致可以分为两类:
- 查询报文类型:向目标主机发送请求并期望得到响应。
- 差错报文类型:向源主机发送错误信息,用于报告网络中的错误情况。
DNS域名管理系统,就是当用户使用浏览器访问网址之后,使用的第一个重要协议。DNS要解决的是域名和IP地址的映射问题。
在实际使用的过程中,浏览器会在本地维护一个
hosts
列表,将解析后的域名的IP进行存储,一般浏览器会先查看要访问的域名是否在hosts
列表中,如果有的话,直接提取对应的IP地址记录,如果本地hosts
没有域名对应IP的记录,就调用DNS。
目前 DNS 的设计采用的是分布式、层次数据库结构,DNS 是应用层协议,基于 UDP 协议之上,端口为 53 。
DNS服务器采用一个分层次的结构,呈现为树形结构。DNS服务器自底向上可以依次分为以下四个层级
.com,.vip
等。TLD服务器提供了权威DNS服务器的IP地址。
- 是否面向连接:UDP 在传送数据之前不需要先建立连接。而 TCP 提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。
- 是否是可靠传输:远地主机在收到 UDP 报文后,不需要给出任何确认,并且不保证数据不丢失,不保证是否顺序到达。TCP 提供可靠的传输服务,TCP 在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达。
- 是否有状态:这个和上面的“是否可靠传输”相对应。TCP 传输是有状态的,这个有状态说的是 TCP 会去记录自己发送消息的状态比如消息是否发送了、是否被接收了等等。为此 ,TCP 需要维持复杂的连接状态表。而 UDP 是无状态服务,简单来说就是不管发出去之后的事情了。
- 传输效率:由于使用 TCP 进行传输的时候多了连接、确认、重传等机制,所以 TCP 的传输效率要比 UDP 低很多。
- 传输形式:TCP 是面向字节流的,UDP 是面向报文的。
- 首部开销:TCP 首部开销(20 ~ 60 字节)比 UDP 首部开销(8 字节)要大。
- 是否提供广播或多播服务:TCP 只支持点对点通信,UDP 支持一对一、一对多、多对一、多对多;
UDP一般用于即时通信,像语音视频,直播等,对数据传输准确度不是特别高。传输协议主要是DHCP协议、DNS主要是IP地址的配置
TCP用于准确性特别高的场景, 像文件传输,发送和接收邮件,远程登录等。
一次握手:客户端发送带有SYN
标志的数据包到服务端然后客户端进入SYN_SEND
状态
二次握手:服务端发送带有SYN+ACK
标志的数据包到客户端,然后服务端进入SYN_RECV
状态
三次握手:客户端发送带有ACK
标志的数据包到服务端,然后客户端和服务端都进入ESTABLISHED
状态,完成TCP三次握手
当数据包丢失的几种情况:
当客户端发送到服务器的过程中SYN包丢失: 服务器没有收到客户端发送的SYN包,客户端没有收到服务器返回的数据包,客户端会周期性的超时重传,知道收到服务器的确认
当服务器发送到客户端的过程中SYN+ACK包丢失: 这时不是服务器超时重传,客户端没有收到服务器的确认,就回进行超时重传,知道收到服务器的确认
当三次挥手客户端发送到服务器的过程中ACK包丢失: 这时服务器没有收到客户端的确认,就回超时重传,直到收到客户端的确认
一次挥手:客户端发送一个FIN
标志的数据包进入服务端用来关闭客户端到服务器的数据传送。然后,客户端进入FIN-WAIT-1
状态
二次挥手:服务器收到FIN标志的数据包,然后发送一个ACK
标志的数据包到客户端。然后此时服务端进入CLOSE-WAIT
状态,客户端进入FIN-WAIT-2
状态
三次挥手:服务器关闭与客户端的连接并向客户端发送一个FIN
标志的数据包,然后服务端进入LAST-ACK
状态
四次挥手:客户端发送ACK
标志的数据包到服务端并且进入TIME-WAIT
状态,服务器在收到ACK
标志的数据包后进入到CLOSE
状态。此时如果客户端在等待2MSL
后让没有收到回复,就证明服务端已经正常关闭,随后客户端也可以关闭连接
三次握手的目的是建立可靠通信信道,同时提高了传输效率,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的
第一次握手:客户端什么都不能确定;服务器端确定了对方发送正常,自己接收正常
第二次握手:客户端确认了自己发送接收正常,对方发送接收正常;服务器端确定了对方发送正常,自己接收正常
第三次握手:客户端确认了自己发送接收正常,对方发送接收正常;服务器端确定了自己发送接收正常,对方发送接收正常
因为服务端收到了来自客户端的相应,如果只是传回了ACK那么将收不到客户端向服务端的接收响应。回传SYN则是为了建立并确认从服务端到客户端的通信。
- SYN是TCP/IP建立连接时使用的握手信号,在客户端建立TCP连接是,客户端会向服务器发送一个SYN请求,要求服务器回应一个ACK消息来确认收到了客户端的请求。
TCP是可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
简单来说就是服务器发出了中断指令,客户端收到之后对服务端进行了回应,然后客户端发出中断指令,服务器收到之后进行回应。
因为服务器在收到客户端发送的请求时,可能会有一些数据没有发送,这时候先回复ACK,表示接收到了断开连接的请求。等数据发完之后在发FIN,断开服务器到客户端的数据传送
- 基于数据块传输:应用数据被分割成TCP认为最适合发送的数据块,在传输给网络层,数据块被称为报文段或段
- 对失序数据包重新排序以及去重:TCP为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据就可以实现数据包去重
- 效验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
- 超时重传:当发送方发送数据之后,接收端成功接收到后会返回一个确认消息(ACK)。如果在固定时间内未收到确认消息,那么就进行重传。
- 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送端发送的数据,能提示发送端降低发送速率防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议
- 拥塞控制:当网络拥塞时,减少数据的发送
IP是TCP/IP协议中最重要的协议之一,属于网络层的协议,主要用于在互联网中定义数据包的格式,对数据包进行路由和寻址。目前有两种,一种是IPv4,另一种是IPv6。
每个连接互联网的设备都会分配一个IP地址,每个IP地址都是一个字符序列。
当网络设备发送 IP 数据包时,数据包中包含了 源 IP 地址目的 IP 地址。源 IP 地址用于标识数据包的发送方设备或域,而目的 IP 地址则用于标识数据包的接收方设备或域。这类似于一封邮件中同时包含了目的地地址和回邮地址。
简单来说就是限制或阻止特定的IP地址或IP地址范围的访问。IP地址过滤器是一种简单的网络安全措施,比如认证、授权、加密等仪器使用。单独使用IP地址过滤并不能完全保证网络的安全。
两者最突出的区别是地址长度不一样IPv4使用32位二进制数组,最多可以表示42亿个IP地址。IPv6使用128位二进制数字表示IP地址,可以表示的地址数量高达340万亿亿亿个,避免了IP地址短缺问题
IPv6还有一下有优点
- 无状态地址自动配置:主机可以直接通过接口标识和网络前缀生成全局唯一的IPv6地址,而无需依赖DHCP服务器,简化了网络配置和管理
- NAT称为可选项:IPv6地址资源充足,可以给全球每一个设备独立的地址
- 对标头结构进行了改进:允许在IPv6表头中添加不同的扩展头,用于实现不同类型的功能和选项
NAT(网络地址转换)是一种用于将私有IP地址转换为公共IP地址的技术。从而实现局域网中的多个设备通过单一共有IP地址访问互联网。NAT不光可以缓解IPv4地址资源短缺问题,还可以隐藏内部网络的实际拓扑结构,使得外部网络无法直接访问内部网络中的设备,从而提高了内部网络的安全性。
ARP(地址解析协议,Address Resolution Protocol)是一种用于在网络层和数据链路层之间进行通信的协议。它主要功能是将网络层中的IP地址(逻辑地址)转换为数据链路层中的MAC地址(物理地址),以便支持实现网络通信。
MAC 地址的全称是 媒体访问控制地址(Media Access Control Address) 如果说,互联网中每一个资源都由 IP 地址唯一标识(IP 协议内容),那么一切网络设备都由 MAC 地址唯一标识。
MAC 地址有一个特殊地址:FF-FF-FF-FF-FF-FF(全 1 地址),该地址表示广播地址
ARP 协议,全称 地址解析协议(Address Resolution Protocol) 它解决的是网络层地址和链路层地址之间的转换问题。因为一个 IP 数据报在物理上传输的过程中,总是需要知道下一跳(物理上的下一个目的地)该去往何处,但 IP 地址属于逻辑地址,而 MAC 地址才是物理地址,ARP 协议解决了 IP 地址转 MAC 地址的一些问题。