计算机网络八股1
计算机网络八股1
计算机网络层次划分模型
计算机网络体系结构是将网络通信过程通过分层的方式进行规范化和标准化,以便实现设备间的互联和数据传输。常见的体系结构包括 OSI 七层模型、TCP/IP 四层模型 和 五层体系结构,它们为理解网络工作原理和设计提供了基础框架。
一、计算机网络体系结构
- OSI
七层模型:由国际标准化组织(ISO)提出,理论上定义了计算机网络通信的标准,它将网络通信过程划分为七个不同的层次:
- 应用层(Application Layer):与用户和应用程序交互,提供网络服务接口。应用层包括 HTTP、FTP、SMTP 等协议。
- 表示层(Presentation Layer):负责数据格式的转换、压缩和加密。例如,将 ASCII 编码转换为 EBCDIC 编码。
- 会话层(Session Layer):管理通信会话,负责建立、维护和终止会话。它还负责会话的同步。
- 传输层(Transport Layer):提供端到端的通信服务,确保数据的可靠性和顺序。常见的协议有 TCP 和 UDP。
- 网络层(Network Layer):负责数据在不同网络间的传输和路由选择。最常用的协议是 IP(Internet Protocol)。
- 数据链路层(Data Link Layer):提供可靠的数据链路,负责物理地址(如 MAC 地址)和数据帧的传输。
- 物理层(Physical Layer):实现原始的数据传输,涉及电压、接口、信号传输速率等。
- TCP/IP 四层模型:TCP/IP
模型是互联网协议栈的核心,常用于实际网络通信。它简化了 OSI
模型的结构,分为四层:
- 应用层(Application Layer):直接与用户和应用程序交互,处理具体的应用协议,如 HTTP、FTP、SMTP。
- 传输层(Transport Layer):确保数据的可靠传输,使用 TCP 和 UDP 协议进行端到端的通信。
- 网络层(Internet Layer):负责数据包的路由、分组和转发,使用 IP 协议进行设备地址定位。
- 网络接口层(Network Access Layer):处理物理传输和链路层,定义数据如何在物理媒介上进行传输,包括以太网、Wi-Fi 等。
- 五层体系结构:五层模型结合了 OSI 和 TCP/IP
的优点,简化了体系结构,同时增加了一层网络接口层,方便教学和理解:
- 应用层(Application Layer):提供应用程序与网络服务之间的接口,类似于 OSI 的应用层和表示层。
- 传输层(Transport Layer):提供进程到进程的通信,确保数据可靠传输,包含 TCP 和 UDP 协议。
- 网络层(Network Layer):负责数据包的路由和传输,使用 IP 地址进行路由选择。
- 数据链路层(Data Link Layer):确保数据可靠传输到网络节点,涉及交换机、网桥等设备。
- 物理层(Physical Layer):定义硬件设备、网络适配器、物理媒介等的规范。
二、TCP 三次握手与四次挥手
- 三次握手(TCP Connection Establishment):
- 目的:确保客户端和服务器建立连接时,双方都准备好接收数据。
- 过程:
- 客户端发送 SYN(同步)报文给服务器,表示请求建立连接。
- 服务器收到请求后,回复 SYN-ACK(同步-确认)报文,表示同意连接并请求客户端确认。
- 客户端收到确认后,发送 ACK(确认)报文,连接建立完成。
- 四次挥手(TCP Connection Termination):
- 目的:在通信完成后,正确关闭连接,释放资源。
- 过程:
- 客户端发送 FIN(结束)报文,表示请求关闭连接。
- 服务器收到后,回复 ACK(确认)报文,等待数据传输完成。
- 服务器发送 FIN(结束)报文,表示准备关闭连接。
- 客户端收到后,回复 ACK(确认)报文,连接关闭。
三、计算机网络概述
计算机网络是指将多台计算机通过通信设备和传输介质连接起来,进行数据交换、资源共享和信息传输的系统。网络的基础目标是提供计算机间的互联,使得用户和应用程序可以通过网络实现通信。计算机网络可以分为局域网(LAN)、广域网(WAN)等多种类型,依托不同的传输介质(如光纤、电缆、无线网络等)来实现数据的交换和传输。
总结
计算机网络体系结构通过将复杂的通信过程划分为不同的层次,使得网络的设计、实现和管理更加高效。OSI 七层模型、TCP/IP 四层模型和五层体系结构都为网络通信提供了理论和实践的框架,帮助我们更好地理解和设计网络应用。
网络协议总结
OSI 七层模型与 TCP/IP 四层模型对应的网络协议
OSI 七层模型 | 协议 | TCP/IP 四层模型 | 协议 |
---|---|---|---|
应用层 | HTTP、DNS、FTP、NFS、WAIS、SMTP、Telnet、SNMP | 应用层 | HTTP、DNS、FTP、NFS、WAIS、SMTP、Telnet、SNMP |
表示层 | TIFF、GIF、JPEG、PICT | TIFF、GIF、JPEG、PICT | |
会话层 | RPC、SOL、NFS、NetBIOS.names、AppleTalk | RPC、SOL、NFS、NetBIOS.names、AppleTalk | |
传输层 | TCP、UDP | 传输层 | TCP、UDP |
网络层 | IP、ICMP、ARP、RARP、RIP、IPX | 网络层 | IP、ICMP、ARP、RARP、RIP、IPX |
数据链路层 | FDDI、Frame Relay、HDLC、PPP | 网络接口层 | FDDI、Frame Relay、HDLC、PPP |
物理层 | EIA/TIA-232、EIA/TIA-499、光纤、无线电波、光纤等 | 网络接口层 | EIA/TIA-232、光纤、无线电波等 |
各层的详细解释和对应协议
1. 应用层(Application Layer)
- 负责直接为用户提供服务,并与用户的应用程序进行交互。
- 常见协议:
- HTTP(HyperText Transfer Protocol):用于Web浏览器与服务器之间的通信。
- DNS(Domain Name System):将域名转换为IP地址。
- FTP(File Transfer Protocol):用于在网络中传输文件。
- SMTP(Simple Mail Transfer Protocol):用于电子邮件发送。
- Telnet:远程登录协议,用于访问远程计算机。
- SNMP(Simple Network Management Protocol):用于管理和监控网络设备。
- POP3(Post Office Protocol 3):用于电子邮件接收。
- IMAP(Internet Message Access Protocol):比POP3更灵活的邮件协议。
2. 表示层(Presentation Layer)
- 负责数据的格式化、转换、压缩和加密。
- 常见协议:
- TIFF(Tagged Image File Format):图像格式。
- GIF(Graphics Interchange Format):一种常见的图像格式。
- JPEG(Joint Photographic Experts Group):常用的图片压缩标准。
- PICT:苹果计算机的图像格式。
3. 会话层(Session Layer)
- 管理进程之间的会话,包括会话建立、管理和终止。
- 常见协议:
- RPC(Remote Procedure Call):允许程序调用另一台计算机的服务。
- NetBIOS:NetBIOS为网络计算机提供共享服务,允许会话进行数据交换。
- AppleTalk:苹果公司开发的网络协议,用于在Apple计算机上建立会话。
4. 传输层(Transport Layer)
- 提供端到端的通信服务,保证数据完整性和正确顺序。
- 常见协议:
- TCP(Transmission Control Protocol):面向连接、可靠的数据传输协议。
- UDP(User Datagram Protocol):无连接、不可靠的数据传输协议。
5. 网络层(Network Layer)
- 负责在多个网络之间传输数据,进行路由选择,使用逻辑地址(如IP地址)来标识设备。
- 常见协议:
- IP(Internet Protocol):为每个设备分配唯一的IP地址,确保数据包能够从源到达目标。
- ICMP(Internet Control Message Protocol):用于网络设备之间传递控制消息。
- ARP(Address Resolution Protocol):将IP地址转换为MAC地址。
- RARP(Reverse ARP):将MAC地址转换为IP地址。
- RIP(Routing Information Protocol):用于动态路由选择。
- IPX(Internetwork Packet Exchange):Novell NetWare协议。
- IPv6:下一代IP协议,支持更大的地址空间。
6. 数据链路层(Data Link Layer)
- 提供物理地址和数据帧的传输。
- 常见协议:
- Frame Relay:一种常用于WAN的协议。
- PPP(Point-to-Point Protocol):用于点对点链路的协议。
7. 物理层(Physical Layer)
- 负责数据的原始传输,处理电气信号、光信号等。
- 常见协议:
- EIA/TIA-232:串口通信标准。
- 光纤:用于高速传输的光纤通信。
- 无线电波:无线通信协议,像Wi-Fi等。
- EIA/TIA-499:用于串行通信的电气接口标准。
小结
- OSI 七层模型 提供了理论框架,清晰地将网络协议分层,帮助我们理解网络通信的各个方面。
- TCP/IP 四层模型 更接近实际应用,特别是在互联网协议栈中,简化了模型结构。
- 每一层都包含了若干标准化协议,用于保证不同系统、设备之间能够实现无缝的通信和数据传输。
数据传输过程
数据在各层之间的传输过程是网络通信的基础,涉及从发送方到接收方的数据封装和解封装。这个过程可以类比为写信、传信的过程,每一层就像一个信封,封装了特定的控制信息,确保数据能安全、准确地传输。
数据在各层之间的传输过程
1. 发送方的数据传输过程(从应用层到物理层)
- 应用层(Application Layer):
- 应用层接收到应用进程(如网页浏览器、邮件客户端等)需要发送的数据。
- 应用层将数据封装成一个“数据单元”,并为其添加应用层的控制信息(例如协议标识符、数据格式等)。这时的数据单元被称为应用层数据,也可以称作 应用数据 或 消息。
- 传输层(Transport Layer):
- 传输层接收到应用层数据后,会在数据前后加上控制信息(如源端口号、目标端口号、序列号、校验和等),这时数据就变成了一个传输层的数据单元,通常称为报文段(Segment)。
- TCP 会提供可靠的连接管理,保证数据顺序和完整性;UDP 则相对简单,不保证可靠性。
- 网络层(Network Layer):
- 网络层负责将传输层的数据单元(报文段)进一步封装,并添加自己的控制信息(如源IP地址、目标IP地址等),生成数据包(Packet)。
- 数据包包含了必要的路由信息,帮助数据从源设备到达目标设备。
- 数据链路层(Data Link Layer):
- 数据链路层将网络层的数据包封装成帧(Frame),在帧的头部和尾部加上控制信息,如源MAC地址、目标MAC地址、帧校验序列(FCS)等,用来确保数据传输的正确性和识别设备。
- 数据链路层也负责在物理媒介上传输数据。
- 物理层(Physical Layer):
- 物理层负责将数据链路层的帧转换为电信号或光信号,进行比特流的传输。
- 数据以电信号、光信号或无线电波的形式在物理介质上传输,直到达到接收方的物理层。
2. 接收方的数据传输过程(从物理层到应用层)
- 物理层(Physical Layer):
- 接收方的物理层接收到来自传输介质的信号(电信号、光信号或无线电波),并将其转换回比特流。
- 数据链路层(Data Link Layer):
- 数据链路层从接收到的比特流中提取出帧,并检查帧的校验和(FCS),以确保数据在传输过程中没有出错。
- 如果没有错误,数据链路层将帧传递给上层网络层,去掉数据链路层的控制信息。
- 网络层(Network Layer):
- 网络层接收数据链路层传递来的数据包,检查包的正确性,并根据目标IP地址将数据包传递给合适的目的地。
- 网络层去除网络层的控制信息,获取传输层数据单元(即报文段)。
- 传输层(Transport Layer):
- 传输层从网络层接收到的报文段中提取出应用数据,校验其完整性,确保数据按顺序正确到达。
- 传输层会将控制信息(如端口号等)去除,最后将数据传递给应用层。
- 应用层(Application Layer):
- 应用层接收到来自传输层的原始数据,并交给相应的应用程序(如浏览器、邮件客户端等)。
- 最终,应用程序会对数据进行处理,呈现给用户。
数据封装与解封装的类比:写信与收信
我们可以将这一过程类比为“写信”和“收信”的过程。
- 写信过程(封装过程):
- 发送者准备一封信,信上写好内容。
- 然后将信放入信封,信封上写上发件人和收件人的地址信息(应用层)。
- 信封再被放入另一个更大的信封,写上邮递的控制信息(传输层)。
- 继续在外面加上更多的信封,直到加上最终的邮政地址、邮票和指示(物理层)。
- 收信过程(解封装过程):
- 收件人收到信封,先打开最外面的信封(物理层)。
- 然后继续拆开每一层的信封,逐层读取里面的信息,直到最终获得信的内容(应用层)。
封装和解封装的控制信息
每一层封装数据时都会附加不同的控制信息,例如:
- 应用层:附加应用协议的控制信息(如HTTP请求头、DNS查询等)。
- 传输层:加上端口号、序列号、校验和等,用来确保端到端的数据传输。
- 网络层:加上源和目标IP地址,用来路由数据。
- 数据链路层:加上源和目标MAC地址、帧校验等信息,确保数据在局域网内正确传输。
- 物理层:将数据转换为适合传输的物理信号(电信号或光信号)。
总结
- 发送方:数据由上至下层层封装,逐层添加控制信息,最终传输到物理层以信号形式发送出去。
- 接收方:数据从下至上层层解封,去除各层的控制信息,最终交给应用层处理并呈现给用户。
这一过程确保了数据的可靠传输,并能够在复杂的网络环境中实现不同设备、不同协议之间的无缝通信。
输入网址到显示网页全过程
从浏览器地址栏输入 URL 到显示网页的过程涉及多个环节,以下是每个步骤的详细笔记,解释了各个协议的作用和过程。
1. 浏览器查找域名的 IP 地址(DNS 查找过程)
当你在浏览器的地址栏中输入 URL(例如 www.baidu.com)时,浏览器需要通过域名系统(DNS)将域名转换为IP 地址。这个过程包括以下步骤:
浏览器缓存:首先,浏览器会检查本地缓存中是否已经保存了该域名的 IP 地址。如果有,直接使用缓存中的 IP 地址。
操作系统缓存:如果浏览器缓存中没有,操作系统会查找其本地的 DNS 缓存。如果缓存中有该域名的 IP 地址,操作系统会直接返回。
DNS 解析服务:如果本地缓存都没有对应的 IP 地址,浏览器会向 DNS 服务器发起查询。DNS 查询过程可能包括多个步骤:
- 浏览器会向本地 DNS 服务器(通常由 ISP 提供)发送请求。
- 本地 DNS 服务器可能会向根 DNS 服务器、顶级域 DNS 服务器(如 .com)等发送查询,直到得到最终的 IP 地址。
一旦获得 IP 地址,浏览器可以继续后续步骤。
2. 浏览器与服务器建立 TCP 连接(三次握手)
浏览器通过解析得到的 IP 地址与服务器建立 TCP 连接。此过程使用了 TCP 三次握手,确保通信双方都已准备好进行数据传输。
- 第一步:浏览器发送一个 SYN(同步)报文段到服务器,表示请求建立连接,并告知浏览器的初始序列号。
- 第二步:服务器收到 SYN 报文后,响应一个 SYN-ACK(同步-确认)报文,表示同意连接,并将服务器的初始序列号发送给浏览器。
- 第三步:浏览器收到 SYN-ACK 报文后,发送一个 ACK(确认)报文给服务器,表示连接建立成功。
至此,TCP 连接建立,数据可以开始传输。
3. 浏览器向服务器发起 HTTP 请求
在建立了 TCP 连接之后,浏览器会向服务器发起 HTTP 请求。HTTP 请求通常包含以下几个部分:
- 请求行:包括请求方法(如 GET、POST)、请求 URL、HTTP 版本。
- 请求头:包含额外的信息,如浏览器的类型、支持的压缩方式、可接受的语言、cookie 等。
- 请求体(如果有):对于 GET 请求通常为空,对于 POST 请求可能包含表单数据。
浏览器通过 TCP 连接将 HTTP 请求发送到服务器,使用 HTTP 协议 来传输数据。
4. 服务器处理请求,返回 HTTP 响应
服务器接收到 HTTP 请求后,会根据请求的内容处理并生成 HTTP 响应。响应包括以下部分:
- 状态行:包括 HTTP 版本、状态码(如 200 OK、404 Not Found)和状态信息。
- 响应头:包括服务器信息、响应体类型、缓存控制、日期等。
- 响应体:即服务器返回的数据,通常是 HTML 页面内容,也可能包含图像、CSS、JavaScript 文件等。
此时,服务器使用 IP 协议 将 HTTP 响应数据打包成 IP 数据包,并通过路由器转发到目标地址。
协议解析:
- OPSF(Open Shortest Path First):用于路由器之间选择最佳路由路径。
- ARP(Address Resolution Protocol):当路由器与服务器之间需要直接通信时,可能会使用 ARP 协议将 IP 地址映射为 MAC 地址,以便进行数据链路层的通信。
5. 浏览器解析并渲染页面
浏览器接收到服务器返回的 HTTP 响应后,开始解析响应体中的 HTML 内容,并进行页面渲染。具体步骤如下:
- 构建 DOM 树:浏览器解析 HTML,生成 DOM(Document Object Model)树,这是网页的结构化表示。
- 加载 CSS:浏览器解析并应用 CSS 样式,以确定页面的外观。
- 加载 JavaScript:如果页面中有 JavaScript,浏览器会逐步加载和执行 JavaScript 脚本,这可能会动态更新页面内容。
- 渲染页面:浏览器最终将所有资源结合起来,渲染出网页的可视化内容,并呈现给用户。
6. 断开连接(TCP 四次挥手)
当数据传输完成后,浏览器和服务器需要断开 TCP 连接。此过程通过 TCP 四次挥手 来完成:
- 第一步:浏览器发送一个 FIN(终止)报文,表示希望关闭连接。
- 第二步:服务器收到 FIN 报文后,发送一个 ACK(确认)报文,表示同意关闭连接。
- 第三步:服务器发送一个 FIN 报文,表示服务器也准备好关闭连接。
- 第四步:浏览器收到服务器的 FIN 报文后,发送一个 ACK 报文,确认连接关闭。
至此,TCP 连接完全断开,数据传输结束。
总结流程
- DNS 解析:浏览器向 DNS 服务器查询域名对应的 IP 地址。
- TCP 三次握手:建立与服务器的 TCP 连接。
- HTTP 请求:浏览器发送 HTTP 请求到服务器。
- HTTP 响应:服务器处理请求并返回 HTTP 响应。
- 浏览器渲染页面:浏览器解析 HTML、CSS、JavaScript,渲染页面。
- TCP 四次挥手:断开与服务器的连接。
通过这些步骤,浏览器从用户输入 URL 到显示网页,完成了从网络层到应用层的多重交互。
DNS 解析过程
DNS(Domain Name System)是一个将域名转换为 IP 地址的系统,它使得用户可以通过易记的域名访问互联网资源,而无需记住复杂的 IP 地址。以下是 DNS 解析的详细过程,步骤逐一讲解。
1. 浏览器缓存检查
当用户在浏览器的地址栏中输入一个域名(例如
paicoding.com
)时,浏览器会首先检查自己本地的 DNS
缓存,看看是否已经保存了该域名的 IP 地址。如果缓存中有这个域名的 IP
地址,浏览器就直接使用它,不再进行进一步的查询。
2. 操作系统 DNS 缓存检查
如果浏览器缓存没有找到对应的 IP 地址,浏览器会查询操作系统本地的 DNS 缓存。操作系统也会缓存 DNS 查询的结果,以加速后续的域名解析。如果在操作系统缓存中找到了域名对应的 IP 地址,操作系统会将该地址返回给浏览器,浏览器可以直接发起 HTTP 请求。
3. 向本地 DNS 服务器查询
如果浏览器和操作系统的缓存中都没有找到该域名的 IP
地址,浏览器会向本地配置的 DNS 服务器(通常由 ISP 提供)发送一个 DNS
查询请求。DNS 服务器的作用是帮助解析域名到 IP
地址。请求中会包含用户输入的域名(如 paicoding.com
)。
- 本地 DNS 服务器:一般情况下,ISP 提供的 DNS 服务器会缓存一些常用的域名解析记录,因此它可能已经知道该域名的 IP 地址。如果本地 DNS 服务器中有缓存的记录,它会直接返回 IP 地址给浏览器。
- 无缓存时:如果本地 DNS 服务器没有缓存该域名的 IP 地址,它会继续查询其他服务器来获取地址。
4. 向根域名服务器查询
如果本地 DNS 服务器无法解析该域名,它会向 根域名服务器 发起请求。根域名服务器是 DNS 系统的顶层服务器,负责指向各个顶级域名服务器。
- 根域名服务器的作用:根域名服务器不会直接给出
paicoding.com
的 IP 地址,而是会告诉本地 DNS 服务器,查询com
顶级域名的服务器地址(即.com
顶级域名的 DNS 服务器)。
5. 向顶级域名服务器查询
根域名服务器返回的 com
顶级域名服务器地址会被本地 DNS
服务器使用。接下来,本地 DNS 服务器会向 .com
顶级域名服务器
发送查询请求。顶级域名服务器并不直接存储各个域名的 IP
地址,而是将请求指向管理该域名的授权 DNS 服务器。
- 顶级域名服务器的作用:它返回关于
paicoding.com
所在的 权限域名服务器(也叫做权威 DNS 服务器)的信息,通常这些服务器由域名的注册机构或托管服务提供商管理。
6. 向授权域名服务器查询
在得到 .com
顶级域名服务器的返回信息后,本地 DNS
服务器会继续向
权威域名服务器(例如,paicoding.com
的权威
DNS 服务器)发送查询请求。
- 权限域名服务器的作用:该服务器知道
paicoding.com
对应的 IP 地址,因此它会返回该域名的确切 IP 地址(例如xxx.xxx.xxx.xxx
)。
7. 返回 IP 地址
本地 DNS 服务器接收到权限域名服务器返回的 IP 地址后,会将这个结果缓存,以便未来的请求可以直接使用。然后,DNS 服务器会将该 IP 地址返回给浏览器。
- 浏览器使用 IP 地址:浏览器接收到 IP 地址后,使用该 IP 地址发起 HTTP 请求,连接到目标服务器,开始请求网页内容。
8. 建立 TCP 连接与网页请求
一旦浏览器获取到 IP 地址,它会建立与目标服务器的 TCP 连接,发起 HTTP
请求(如 GET
请求),服务器处理请求并返回响应内容。
9. 服务器返回网页内容
服务器处理 HTTP 请求后,将网页内容(如 HTML、CSS、JavaScript 文件等)作为 HTTP 响应返回给浏览器。浏览器收到响应后,会进行网页渲染,最终将网页显示给用户。
DNS 解析过程总结
- 浏览器缓存检查:检查浏览器本地缓存是否有该域名的 IP 地址。
- 操作系统缓存检查:检查操作系统缓存是否有该域名的 IP 地址。
- 向本地 DNS 服务器查询:如果缓存没有,向本地 DNS 服务器请求解析。
- 向根域名服务器查询:如果本地 DNS 服务器没有缓存,向根域名服务器查询。
- 向顶级域名服务器查询:根域名服务器将查询请求转发给顶级域名服务器。
- 向授权域名服务器查询:顶级域名服务器将查询请求转发给该域名的权限域名服务器。
- 返回 IP 地址:权限域名服务器返回该域名的 IP 地址。
- 浏览器发起 HTTP 请求:浏览器使用返回的 IP 地址发起 HTTP 请求,获取网页内容。
- 服务器返回网页内容:服务器返回 HTML 等内容,浏览器渲染页面。
通过 DNS 的解析过程,用户可以通过输入易记的域名(如
paicoding.com
)来访问互联网资源,而无需记住复杂的 IP
地址。
WebSocket 与 Socket 的区别
1. 定义与概念
- Socket:
- Socket 是一个 编程接口,用于网络通信的开发,提供了应用程序与网络之间的接口。
- Socket 是 TCP/IP 协议(或 UDP 协议)的一个抽象,通常由 IP 地址、端口号和协议类型(TCP 或 UDP)来唯一标识。
- 它通常用于客户端和服务器之间的 双向通信,是实现 网络编程 的基础。
- Socket 编程主要用来通过 TCP 或 UDP 进行数据传输。通过 Socket,开发者可以创建连接、发送/接收数据等。
- WebSocket:
- WebSocket 是一种在 Web 应用中用于 双向通信 的 协议。它是为了解决 HTTP 协议的 单向请求-响应 模式问题而设计的,特别是当需要持久连接时。
- WebSocket 属于 应用层协议,它的目标是建立一个 持久化的连接,允许客户端和服务器之间保持长时间的双向通信。
- WebSocket 是在 HTML5 中提出并引入的,能够在 Web 应用中提供 实时、双向通信,使得客户端和服务器之间的数据交换更加高效。
2. 工作原理
- Socket:
- 在基于 Socket 的通信中,客户端和服务器需要分别通过 TCP/IP 套接字连接,建立连接后,双方就可以进行数据的交换。
- 连接建立:通常使用 TCP 三次握手 来建立连接,保证连接的可靠性。
- 数据传输:一旦建立了连接,客户端和服务器就可以发送和接收数据。
- 连接断开:通信完成后,需要进行 四次挥手 来断开连接。
- WebSocket:
- WebSocket 协议与 HTTP 协议有些相似,首先客户端向服务器发送一个
HTTP 请求,请求中包含一个特殊的头部字段
Upgrade
,表明希望升级协议。 - 一旦服务器接受了这个请求,它会 响应 101 状态码(Switching Protocols),这就意味着连接已经从 HTTP 协议 升级 到 WebSocket 协议。
- WebSocket 一旦建立连接后,客户端和服务器之间会保持 持久的双向通信通道,数据可以随时在双方之间传递,直到关闭连接。
- WebSocket 的最大特点是它支持 全双工通信,即客户端和服务器可以在同一时间内进行双向数据传输。
- WebSocket 协议与 HTTP 协议有些相似,首先客户端向服务器发送一个
HTTP 请求,请求中包含一个特殊的头部字段
3. 通信模式
- Socket:
- 传统的 Socket 通信多采用 请求-响应模式,即客户端发出请求,服务器响应并关闭连接。
- 如果想要保持持续的连接,需要自己通过编程实现连接保持。
- WebSocket:
- WebSocket 支持 持久连接,这意味着一旦建立连接,客户端和服务器之间就可以随时进行双向数据传输,而不需要每次建立连接。
- WebSocket 的 双向通信 模式使得它特别适合用来构建实时应用,如在线聊天、实时股票行情、多人游戏等。
4. 协议
- Socket:
- Socket 本身不是一个协议,它是一个 编程接口,用于访问 TCP/IP 或 UDP 协议。它的工作方式与底层协议(如 TCP、UDP)紧密相关。
- TCP:面向连接,提供可靠的通信服务。
- UDP:无连接,提供不可靠的通信服务。
- WebSocket:
- WebSocket 是一个应用层协议,在 HTTP 协议之上建立连接。它通过 HTTP 协议的 升级机制 实现 WebSocket 连接。
- 一旦连接建立,WebSocket 就使用自己的协议进行通信,支持全双工(双向)通信。
5. 连接与关闭
- Socket:
- Socket 通常采用 短连接(一次通信完成后会断开连接),但可以通过编程实现 长连接,需要使用协议层(如 HTTP)或应用层逻辑来维持连接。
- 连接的关闭一般通过 四次挥手 实现。
- WebSocket:
- WebSocket 支持 持久连接,一旦连接建立后,可以一直保持连接,直到客户端或服务器主动关闭连接。
- WebSocket 的连接关闭过程非常简单,只需要一个 关闭帧(close frame)即可。
6. 应用场景
- Socket:
- 适用于 传统的客户端-服务器 模式,比如 FTP、HTTP 等协议的实现。
- 广泛应用于需要进行 可靠、长时间连接 的场景,比如在线游戏、实时音视频通话等。
- Socket 编程用于构建服务器端和客户端之间的 网络通信应用。
- WebSocket:
- WebSocket 专为 实时 和 双向通信
设计,适合用于 Web 应用 中的
实时交互,如:
- 在线聊天应用。
- 实时数据推送(股票行情、新闻推送等)。
- 多人在线游戏。
- 实时协作平台(如 Google Docs)。
- 直播和音视频流等需要持续通信的应用。
- WebSocket 专为 实时 和 双向通信
设计,适合用于 Web 应用 中的
实时交互,如:
7. 性能比较
- Socket:
- Socket 是基于 TCP 或 UDP 协议,它本身并不提供持久连接功能,需要开发者手动实现。
- Socket 在通信过程中需要 频繁建立和断开连接,因此在某些应用场景下性能可能较差。
- WebSocket:
- WebSocket 通过 持久连接 来减少连接建立和断开的开销,能够大幅提高性能,尤其是在 实时应用 中表现更加优秀。
- WebSocket 由于 全双工通信,能够在同一时间内进行双向数据交换,减少了通信延迟。
WebSocket 与 Socket 的对比总结
特性 | Socket | WebSocket |
---|---|---|
定义 | 编程接口,允许应用通过 TCP 或 UDP 进行通信 | 应用层协议,提供持久化的双向通信通道 |
协议 | TCP、UDP | WebSocket(基于 HTTP 协议升级) |
连接类型 | 一般为短连接(需自己实现长连接) | 持久连接,连接建立后长时间有效 |
通信模式 | 请求-响应模式,支持双向通信 | 双向通信(全双工),随时交换数据 |
应用层 | 用于各种网络通信,如 FTP、HTTP 等 | 实时应用(如在线聊天、实时数据推送等) |
性能 | 连接频繁建立和断开,可能影响性能 | 持久连接,减少建立和断开的开销,提高性能 |
关闭连接 | 通过 TCP 的四次挥手 | 通过 WebSocket 的关闭帧来关闭连接 |
通过对比可以看出,WebSocket 更适合 实时双向通信 的 Web 应用,而 Socket 更适合于传统的 网络编程 和通信协议的实现。