计算网络体系概述
相关问题
- 计算机网络为什么要分层?
- 计算机网络是怎么分层的?
- 三种计算机网络模型的关系是什么?每一层分别包含哪些协议?
- 计算机网络中,数据如何在各层中传播?数据在网络各层中的存在形式是怎么样的?
OSI七层模型
OSI(Open Systems Interconnection)是开放系统互连参考模型的缩写,它是一个定义得非常好的协议规范集,它为各种系统定义了一个层次结构和一套用于协调与控制各层活动的规则,模型有七层结构。OSI模型的七层结构及其简要描述:
层次 | 名称 | 简要描述 |
---|---|---|
1 | 物理层 (Physical Layer) | 定义了物理设备标准,如网络接口、传输介质等,负责传输原始比特流。 |
2 | 数据链路层 (Data Link Layer) | 在物理层提供的服务基础上,建立相邻节点之间的数据链路,进行差错控制和流量控制。 |
3 | 网络层 (Network Layer) | 负责为分组交换网上的不同主机提供通信服务,实现路由选择和分组转发。 |
4 | 传输层 (Transport Layer) | 提供端到端的通信服务,负责数据的分段、重组和差错控制,确保数据的可靠传输。 |
5 | 会话层 (Session Layer) | 负责建立、管理和终止会话过程,同步不同设备上的各种表示层实体。 |
6 | 表示层 (Presentation Layer) | 对应用层数据进行表示和转换,如数据压缩、加密和解密、数据格式转换等。 |
7 | 应用层 (Application Layer) | 为网络应用提供访问OSI环境的手段,定义应用进程间通信和交互的规则。 |
这个表格简洁地概述了OSI模型的每一层及其主要功能。需要注意的是,虽然OSI模型在理论上是一个完善的参考模型,但在实际应用中,TCP/IP协议族由于其简洁性和高效性而被广泛采用。
TCP/IP五层协议
五层体系的协议结构是综合了 OSI 和 TCP/IP 优点的一种协议,包括应用层、传输层、网络层、数据链路层和物理层。其中应用层对应 OSI 的上三层,下四层和 OSI 相同。五层协议的体系结构只是为介绍网络原理而设计的,实际应用还是 TCP/IP 四层体系结构。TCP/IP五层协议栈:
名称 | 主要功能 | 主要协议/技术 |
---|---|---|
物理层 | 负责物理传输介质上比特流的传输 | 无(依赖于物理介质) |
数据链路层 | 负责将数据封装成帧,进行差错控制和流量控制 | 以太网、PPP |
网络层 | 负责数据包的路由和转发,实现不同网络之间的通信 | IP、ICMP、IGMP、ARP、RARP |
传输层 | 负责端到端的数据传输,提供可靠或不可靠的数据传输服务 | TCP、UDP |
应用层 | 提供网络应用服务,处理特定应用的数据格式 | HTTP、FTP、SMTP、DNS、SSH |
这个表格简要地概括了TCP/IP五层协议栈中每一层的主要功能以及该层使用的主要协议或技术。这些协议共同协作,确保数据能够正确、高效地从源地址传输到目标地址。
数据在各层之间的传输
在TCP/IP五层协议栈中,数据并不是直接在各层之间传输的,而是经历了一个封装和解封装的过程。这个过程确保了数据从源地址到目标地址的可靠传输。以下是数据在各层之间传输的详细步骤:
层次 | 物理层 | 数据链路层 | 网络层 | 传输层 | 应用层 |
---|---|---|---|---|---|
数据类型 | 比特流 | 帧、数据帧 | 数据报、数据包 | 报文段、数据段 | 报文 |
添加部分 | 前导码 | MAC头部 | IP头部 | TCP头部 | 数据 |
应用层:
- 应用层是TCP/IP模型的最上层,直接为用户的应用程序(如浏览器、电子邮件客户端等)提供服务。
- 在应用层,应用程序(如HTTP服务器或FTP客户端)生成数据,这些数据可能是文本、图片、音频或视频等。
- 应用层将数据封装成应用层协议所能理解的数据格式,如HTTP请求或FTP命令。
传输层:
- 传输层负责提供端到端的数据传输服务,包括可靠性和流量控制。
- 在传输层,数据被封装成传输层协议的数据单元,对于TCP来说是TCP段(segment),对于UDP来说是UDP数据报(datagram)。
- 封装过程中,传输层会添加源端口号和目的端口号等信息,以便在接收端能够正确地将数据交付给相应的应用程序。
网络层:
- 网络层负责网络间的通信,主要处理路由和转发。
- 在网络层,数据被封装成IP数据报(datagram)。封装过程中,会添加源IP地址和目的IP地址等信息。
- 网络层根据路由选择算法,将数据报从源主机发送到目的主机。
数据链路层:
- 数据链路层负责处理本地网络的通信,包括帧的构造和解析。
- 在数据链路层,IP数据报被封装成帧(frame)。封装过程中,会添加帧头(包含源MAC地址和目的MAC地址)和帧尾(包含校验信息)。
- 数据链路层通过物理层提供的服务,将数据帧从一个节点传输到下一个节点。
物理层:
- 物理层是TCP/IP模型的最底层,负责将比特流转换成物理信号,并在物理介质上进行传输。
- 物理层将数据帧转换成适合在物理介质上传输的比特流,如电信号或光信号。
- 比特流通过物理介质(如电缆、光纤等)传输到目的主机。
应用层
相关问题
- uri 和 url 的区别 ?
- dns 是啥工作原理,主要解析过程是啥?
- 用户输入网址到显示对应页面的全过程是啥?
- http 头部包含哪些信息?
- http 方法了解哪些?
- http 状态码了解哪些?
- get 和 post 的区别?
- https 和 https 的区别?
- https 的加密方式?
- http 是不保存状态的协议,如何保存用户状态?
- http 不同版本的区别?
万维网和域名系统
万维网(简称WWW或Web)和域名系统(简称DNS)是互联网中两个重要的组成部分,它们各自在互联网的运作中扮演着关键角色。
P2P和C/S
P2P(Peer-to-Peer)与C/S(Client/Server)是计算机网络中两种常见的通信模式,P2P是一种去中心化的网络架构,适用于资源共享和实时通信;而C/S是一种中心化的架构,适用于需要集中管理和控制的应用场景。
P2P(Peer-to-Peer)
定义:P2P是一种网络架构,其中每个设备(称为“对等点”或“节点”)都可以直接与其他设备通信,而不需要通过中央服务器。
特点:
- 去中心化:没有中央控制点,每个节点都可以相互通信。
- 资源共享:节点可以共享文件、带宽等资源。
- 灵活:节点可以动态地加入或离开网络。
应用场景:文件共享(如BitTorrent)、即时通讯(如Skype或某些在线游戏)。
C/S(Client/Server)
定义:C/S架构中,有一个或多个服务器负责存储数据和处理请求,而客户端设备(如电脑、手机等)则发送请求给服务器并接收响应。
特点:
- 集中管理:数据和服务由服务器集中提供。
- 安全性:服务器可以提供安全控制和数据完整性检查。
- 响应速度快:客户端与服务器直接通信,响应通常较快。
应用场景:Web应用(如网站)、数据库系统、电子邮件服务等。
Web结构组件
web结构组件指的是构成Web系统的基础元素,这些组件共同协作,使得Web应用能够正常运行并提供服务,以下是一些Web结构组件:
组件名称 | 定义 | 作用 |
---|---|---|
代理(Proxy) | 中间服务器,用于转发客户端和服务器之间的请求和响应 | 提高性能、安全性或进行内容过滤 |
缓存(Cache) | 存储常用页面副本的地方,以减少网络带宽使用和加快页面加载速度 | 提高Web应用的响应速度 |
网关(Gateway) | 连接其他应用或服务的服务器,例如连接Web服务器到FTP服务器的中间件 | 协议转换和服务集成 |
Agent代理 | 发起HTTP请求的Web客户端,如浏览器、网络爬虫等 | 代表用户或系统发送HTTP请求 |
Web组件(Web Components) | 封装好的可复用的自定义元素,用于构建Web应用 | 提高Web开发的效率和可维护性 |
网络协议(Network Protocols) | 计算机之间通信的规则,如HTTP和HTTPS | 确保客户端和服务器之间能够正确通信 |
域名系统(DNS) | 将域名转换为IP地址的系统 | 使人们可以通过易记的域名来访问网站 |
DNS
域名服务器(Domain Name Server,简称DNS)是互联网中至关重要的基础设施之一,它负责将人类可读的域名(如example.com)映射到与之对应的IP地址(如192.0.2.1)。
工作原理
假设一个客户端 A,想要查询 a.leetcode.cn 的 ip 地址,考虑缓存的情况。
- 客户端 A 首先查询本地的 hosts 文件,查询是否有网址映射关系,如果没有,进行下一步查找。
- 查找本地的 dns 解析器缓存,如果没有进行下一步。
- 根据 tcp/ip 参数查找设置好的首选 dns 服务器 ip 地址,一般叫做本地 dns 服务器,查询本地 dns 服务器。本地 dns 服务器如果没有,它就会进行下一步操作。
- 本地dns会访问根服务器 ,然后根据后缀名,从根服务器中查找对应的顶级域名服务器的 ip ,然后以此向下查找域名服务器的 ip ,然后查找网址映射关系,直到找到为止。
http
http(超文本传输协议)是互联网上应用最为广泛的一种网络协议。HTTP 协议是用于从 Web 服务器传输超文本到本地浏览器的传送协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
HTTP 的工作原理是基于客户端-服务器架构。客户端(例如,Web 浏览器)向服务器(例如,Web 服务器)发送 HTTP 请求以获取资源(如 HTML 页面、图片、CSS 样式表、JavaScript 脚本等)。服务器响应这些请求,通过发送 HTTP 响应来提供所需的资源。
HTTPS(HTTP Secure)是在 HTTP 基础上加入了 SSL/TLS 加密技术,提供了安全的数据传输方式。
主要特点包括:
-
无连接:HTTP 协议是无连接的,即每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
-
无状态:HTTP 协议是无状态的,协议对于事务处理没有记忆能力。服务器不知道客户端之前发送过什么请求,也不知道客户端下一次会发送什么请求。
-
简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、POST、PUT、DELETE 等。每种方法规定了客户端与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。
-
支持 B/S 模式:HTTP 支持客户端/服务器模式,客户端可以通过 HTTP 协议向服务器发送请求,服务器也可以通过 HTTP 协议将请求的内容返回给客户端。
网络编程socket
网络编程中的 socket
是一种抽象层,它允许应用程序(通常称为“客户端”和“服务器”)通过计算机网络进行通信。socket
提供了一种跨平台、跨语言的网络编程接口,使得在不同的操作系统和编程语言中都可以使用类似的方式进行网络通信。
基本概念
- IP 地址:用于唯一标识网络中的设备。
- 端口号:用于标识运行在同一台设备上的不同应用程序。每个端口号对应一个特定的服务或应用程序。
- TCP/UDP:两种主要的传输层协议。TCP 是面向连接的协议,提供可靠的数据传输服务;UDP 是无连接的协议,提供不可靠的数据传输服务,但速度更快。
工作原理
- 创建 socket:应用程序首先创建一个 socket 对象,指定使用的协议(TCP 或 UDP)和本地端口号(如果需要)。
- 绑定 socket:对于服务器端的 socket,需要将其绑定到一个特定的 IP 地址和端口号上,以便客户端能够找到并连接到它。
- 监听和接受连接(仅适用于 TCP):服务器端的 socket 开始监听来自客户端的连接请求。当有客户端连接时,服务器接受连接并创建一个新的 socket 对象来处理与该客户端的通信。
- 发送和接收数据:通过 socket 对象,应用程序可以发送和接收数据。对于 TCP,数据以字节流的形式传输;对于 UDP,数据以数据报的形式传输。
- 关闭 socket:当通信完成后,应用程序关闭 socket 对象以释放资源。
示例(基于 Python)
服务器端
import socket# 创建一个 TCP socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定到 IP 地址和端口号
server_address = ('localhost', 12345)
server_socket.bind(server_address)# 开始监听连接请求
server_socket.listen(1)while True:# 接受连接请求并返回一个新的 socket 对象和客户端地址client_socket, client_address = server_socket.accept()print(f"Accepted connection from {client_address}")# 接收并处理数据(这里只是简单地回显数据)data = client_socket.recv(1024)if data:print(f"Received: {data.decode()}")client_socket.sendall(data) # 回显数据给客户端# 关闭连接client_socket.close()
客户端
import socket# 创建一个 TCP socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接到服务器
server_address = ('localhost', 12345)
client_socket.connect(server_address)try:# 发送数据message = b'Hello, server!'client_socket.sendall(message)# 接收数据data = client_socket.recv(1024)print(f"Received: {data.decode()}")
finally:# 关闭连接client_socket.close()
在这个示例中,服务器端创建一个 TCP socket 对象并绑定到本地地址和端口号上,然后开始监听连接请求。客户端也创建一个 TCP socket 对象并连接到服务器。一旦连接建立,客户端发送数据给服务器,服务器接收数据并回显给客户端。最后,双方关闭连接以释放资源。
传输层
传输层(Transport Layer)是计算机网络体系结构中的关键层次之一,主要负责两台计算机之间(或更准确地说,是两个主机中进程之间)的数据通信服务。
- 为什么要进行三次握手?两次握手可以吗?
- 为什么要四次挥手?
- CTIME-WAIT 为什么是 2MSL?
- TCP 和 UDP 的区别?
- TCP 是如何保证可靠性的,UDP 为什么是不可靠的 ?
- TCP 报文包含哪些信息 ?
- UDP 包含哪些信息
- 三次握手和四次挥手过程中,网络断开会发生什么?
端口号的使用
- 传输层使用端口号来区分不同的应用进程。端口号是一个16位的整数,范围从0到65535。其中,0到1023为知名端口(Well-Known Ports),由IANA注册,用于特定的服务;1024到65535为动态/私有端口,可由用户自由分配。
- 通过“IP地址+端口号”的组合,传输层能够唯一标识网络中的一个通信端口,从而实现数据的准确传输。
UDP协议
UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的、面向数据报的传输层协议。它工作在OSI模型的传输层,为应用层提供了一种简单的、直接的数据传输服务。
特点:
- 无连接
- UDP在发送数据之前不需要建立连接。发送方和接收方之间不保持连接状态,每个数据报都是独立传输的。
- 不可靠
- UDP不保证数据报的顺序、完整性或是否到达。如果数据报在传输过程中丢失或损坏,UDP不会进行重传或恢复。
- 面向数据报
- UDP将应用层交下来的数据封装成一个个的数据报(Datagram),并添加UDP头部信息,然后交给网络层进行传输。每个数据报都是一个独立的单元,携带完整的源地址和目的地址信息。
- 开销小
- UDP头部只有8个字节,相对于TCP的20字节头部来说更小,因此UDP的传输开销更低,传输效率更高。
- 支持多播和广播
- UDP支持向多个目的地址发送相同的数据报,即多播(Multicast)。同时,它还可以将数据报发送给网络中的所有主机,即广播(Broadcast)。
注意事项
- 由于UDP不提供可靠的数据传输服务,因此在使用UDP时,应用层需要自行处理数据的可靠性问题,如通过应用层协议来确认数据报的接收和重传等。
- UDP不保证数据报的顺序性,因此接收方可能会以与发送方不同的顺序接收到数据报。如果应用需要保持数据的顺序性,那么应用层需要在发送和接收时进行相应的处理。
TCP协议
TCP(Transmission Control Protocol,传输控制协议)是计算机网络中一种基于连接的、可靠的传输层协议。它提供了一系列机制来确保数据在端到端之间的可靠传输。
特点
- 面向连接
- TCP在数据传输之前需要先建立连接,通过三次握手过程来确保双方都已准备好进行数据传输。
- 可靠性
- TCP通过序列号、确认应答、超时重传等机制来确保数据的完整性和顺序性。如果数据包在传输过程中丢失或损坏,TCP会负责重新发送。
- 流控制
- TCP使用滑动窗口机制来防止发送方发送速度过快,确保接收方能够处理并消化数据。这有助于避免接收方被数据淹没,提高传输效率。
- 拥塞控制
- TCP具有拥塞控制机制,用于适应网络的拥塞情况。当网络出现拥塞时,TCP会自动减少发送速率,以减轻网络负担,避免性能下降。
- 面向字节流
- TCP将传输的数据视为无边界的字节流,而不是像UDP那样按照消息边界进行划分。这意味着发送方可以连续发送数据,而接收方也可以连续接收数据,无需关心数据的原始边界。
- 全双工通信
- TCP连接允许双方在同一时间既能发送数据又能接收数据,提高了通信效率。
工作机制
- 三次握手
- 客户端发送SYN报文给服务器,请求建立连接。
- 服务器收到SYN报文后,回复SYN+ACK报文给客户端,表示同意建立连接。
- 客户端收到服务器的SYN+ACK报文后,回复ACK报文给服务器,完成三次握手过程,建立连接。
- SYN表示标志位,seq表示序列号,ACK表示标志位,Ack表示确认号。
- 数据传输
- 连接建立后,双方可以开始传输数据。TCP通过序列号来标识每个数据包的顺序,并通过确认应答机制来确认数据包的接收情况。
- 超时重传
- 如果客户端在规定时间内没有收到服务器的确认应答,则认为数据包丢失,会重新发送该数据包。
- 四次挥手
- 当一方想要关闭连接时,会发送FIN报文给对方,表示没有数据要发送了。对方收到FIN报文后,会回复ACK报文确认收到,并继续发送完剩余的数据(如果有的话)。当对方也发送完所有数据并想要关闭连接时,也会发送FIN报文给对方。最后,双方通过ACK报文确认连接的关闭。
- FIN:表示标志位,seq:表示序列号,ACK表示标志位,Ack表示确认号
三次握手与四次挥手
三次握手:确认双方收发能力
- 第一次握手(SYN):客户端发送一个SYN报文给服务器,表示客户端想要建立连接,并包含一个初始序列号seq=x。这个报文告诉服务器:“我想要连接你,这是我的初始序列号”。
- 第二次握手(SYN+ACK):服务器收到客户端的SYN报文后,会回复一个SYN+ACK报文给客户端。这个报文包含服务器的初始序列号seq=y,以及对客户端SYN报文的确认号ack=x+1。这个报文告诉客户端:“我收到了你的请求,我想要连接你,这是我的初始序列号,并且我已经确认了你的序列号”。
- 第三次握手(ACK):客户端收到服务器的SYN+ACK报文后,会回复一个ACK报文给服务器。这个报文包含对服务器SYN报文的确认号ack=y+1,但不包含序列号(因为这是一个纯确认报文)。这个报文告诉服务器:“我收到了你的回复,我已经准备好开始传输数据了”。
四次挥手:确保数据完整传输
- 当一方想要关闭连接时,它不能直接断开连接,因为可能还有未发送或未接收的数据。因此,它需要发送一个FIN报文给对方,告诉对方:“我已经没有数据要发送了,但请允许我接收你的数据”。
- 对方收到FIN报文后,会回复一个ACK报文,表示已经收到对方的关闭请求,但自己可能还有数据要发送。此时,连接处于半关闭状态,即一方已经关闭发送通道,但另一方仍然可以发送数据。
- 当没有数据要发送时,另一方也会发送一个FIN报文给对方,表示自己也想要关闭连接。
- 最后,对方回复一个ACK报文,确认已经收到对方的FIN报文,此时连接才真正关闭。
确保可靠的机制
TCP(传输控制协议)通过一系列复杂的机制来确保数据的可靠传输。校验和、序列号和确认应答机制保证了数据的完整性和顺序性;超时重传机制避免了因网络原因导致的数据丢失;连接管理(三次握手与四次挥手)确保了连接的可靠建立和正确关闭;流量控制和拥塞控制机制则保证了网络的稳定性和高效性。以下是对这些机制的详细归纳:
1. 校验和
- 计算方式:在数据传输过程中,TCP将发送的数据段当做一个16位的整数进行累加(进位不丢弃,补在后面),最后取反得到校验和。
- 作用:发送方在发送数据前计算校验和并填充在报文头中,接收方收到数据后同样计算校验和并与发送方的校验和进行比对。如果比对不一致,则数据一定传输有误。
2. 序列号
- 作用:TCP为每个字节的数据都进行了编号,这就是序列号。序列号用于确保数据的顺序性和去除重复数据。
- 确认应答:接收方收到数据后,会向发送方发送ACK报文,其中带有对应的确认序列号,告诉发送方哪些数据已经被成功接收。
3. 确认应答与超时重传
- 确认应答:TCP传输过程中,每次接收方收到数据后都会发送ACK报文进行确认。
- 超时重传:如果发送方在发送数据后等待一定时间(如Linux中以500ms为单位,超时时间呈指数增长)仍未收到ACK报文,则会重新发送该数据。这避免了因网络原因导致的数据丢失。
4. 连接管理(三次握手与四次挥手)
- 三次握手:用于建立连接,确保双方都已准备好进行数据传输。
- 客户端发送SYN报文给服务器。
- 服务器回复SYN+ACK报文给客户端。
- 客户端回复ACK报文给服务器,连接建立成功。
- 四次挥手:用于关闭连接,确保双方都已正确处理完所有数据。
- 客户端发送FIN报文给服务器,表示不再发送数据。
- 服务器回复ACK报文给客户端,表示收到FIN报文。
- 服务器发送FIN报文给客户端,表示也不再发送数据。
- 客户端回复ACK报文给服务器,连接关闭成功。
5. 流量控制
-
滑动窗口机制:TCP利用滑动窗口机制实现流量控制,通过限制发送方窗口大小来防止发送速度过快导致接收方处理不及时而丢包。
窗口大小:TCP报头中有一个16位的窗口大小字段,表示接收端接收数据缓冲区的剩余大小。发送方根据接收方发送的窗口大小来调整自己的发送速度。
6. 拥塞控制
- 慢启动:TCP连接刚建立时,发送方限制自己的初始发送窗口大小,避免发送过多数据导致网络拥塞。窗口大小以指数级别增加,直到达到一个阈值。
- 拥塞避免:在拥塞避免状态下,TCP发送方每经过一轮传输就增加一个MSS(最大报文段长度)的窗口大小。
- 拥塞检测与快速恢复:当TCP发送方收到超时重传或失序的确认消息时,会认为网络中出现拥塞,并采取相应的措施(如减小窗口大小、进入慢启动状态或快速恢复状态)来避免拥塞加剧。