计算机网络
# TCP 与 UDP 的区别。
- UDP 不需要连接,而 TCP 面向连接,且传输前必须建立连接,传输完成后需要释放连接。
- UDP 不是可靠传输,被接收方不需要确认,数据有可能不会到达。而 TCP 提供可靠传输,会有三次握手。
- UDP 不管事,发出去就不管了,就是只管发。TCP 不一样,TCP 会明确说明自己在发送还是在接收,是否发送成功是否接收成功都会明确说明。
- 由于 TCP 比较复杂,所以效率没有 UDP 高。
- TCP 面向字节流,UDP 面向报文。
- TCP 只支持点对点通信,类似打电话。
表格总结一下(来源于 JavaGuide)
# 什么场景选择 TCP?什么时候选择 UDP?
- UDP 用于即时通信。
- TCP 非即时。发邮件,关键数据传输。
# 为什么要三次握手?
目的当然是为了建立可靠的传输了,三次握手是为了保证通信双方都能实现接收和传输正常使用。点对点通信,就像打电话。
三次握手的过程:
- 第一次握手:服务端发送正常,还差接收正常。客户端都不能确认。
- 第二次握手:客户端确认接收正常,还差发送正常,然后客户端发送请求,等待服务端确认。这时可以确认
# http 和 Rpc 的区别?
# socket 到底是什么?
# 1. 计算机网络的定义、发展、组成、分类、功能及拓扑结构
计算机网络是指利用通信设备和通信线路等技术手段,将地理位置不同的、独立的个人计算机或计算机系统连接起来,以实现资源共享、信息交换(传输)及协同工作等功能的系统。
计算机网络的发展可以分为以下几个阶段:
- 集线器网络:20 世纪 80 年代中期到 90 年代初期,使用集线器组成多层星型拓扑结构的局域网(LAN)。
- 交换机网络:90 年代中期至 21 世纪初期,使用交换机代替集线器,并采用三层结构的网络体系结构。
- 路由器网络:21 世纪初期至今,以因特网为基础,通过路由器将各个局域网、城域网和广域网连接起来。
计算机网络的组成包括硬件和软件两部分。其中硬件包括计算机、通信设备(如交换机、路由器、集线器等)和通信线路等;软件包括操作系统、协议栈、网络服务等。
根据网络范围的不同,计算机网络可以分为以下几类:
- 局域网(LAN):涵盖一个小区域内的网络,通常由企业或组织内部搭建和使用。
- 城域网(MAN):涵盖城市范围内的网络,通常由多个局域网互连而成。
- 广域网(WAN):覆盖大范围区域的网络,可以跨越多个城市、国家或地区。
- 无线局域网(WLAN):使用无线技术连接设备的局域网。
计算机网络的功能包括:
- 数据通信:通过网络,在不同的设备之间进行数据的传输和通信。
- 资源共享:多台计算机之间可以分享硬件和软件资源(如打印机、存储设备等)。
- 分布式处理:将任务分配到多台计算机中,通过协作完成任务。
- 远程登录和控制:通过网络远程登录到远程计算机进行操作,或者控制其他计算机执行某些任务。
计算机网络的拓扑结构包括:
- 星型拓扑:所有设备都连接到一个中央设备(如交换机或集线器)上。
- 总线型拓扑:所有设备都连接到一条总线上。
- 环型拓扑:所有设备形成一个环形网络。
- 混合型拓扑:采用多种拓扑结构组合而成。
# 2. 数据通信的基本概念、编码、多路复用技术、数据交换技术循环冗余码
数据通信是指在计算机网络中,将信息从一个地方传递到另一个地方的过程。在这个过程中,原始信息需要经过编码、多路复用等技术手段进行转换后发送,最终接收端再进行解码得到原始信息。
编码是指将原始信息转换为数字信号的过程。常见的编码方式包括:
- 单极性不归零(NRZ)编码:将 0 和 1 分别转换成低电平和高电平。
- 双极性不归零(NRZI)编码:将每个 1 的后面实现取反,以保证同步时出现 0 不产生误报。
- 曼彻斯特编码:将每一位间加入一个位反向的过渡位,用于同步时参考。
- 差分曼彻斯特编码(Differential Manchester Coding):将 NRZ 码进行差分,确保即使信号线上没有数据传送,也能生成过度位。
多路复用技术是指将多个信号合并在一条物理链路上传输的技术。其中较为常见的有:
- 时分复用(TDM):将时间分割成固定长度的时隙,每个时隙只传递一路信号。
- 分组交替复用(FDM):使用不同频率的载波同时传递多路信号,在接收端上再将它们分离出来。
- 统计时分复用(STDM):根据传输单位数据间的闲置信息进行部分作废以扩展时隙长短,处理更为灵活的多路复用技术。
数据交换技术是指在网络中实现数据传输的方式,常见的数据交换技术如下:
- 电路交换:利用建立的物理连接(主要是电话系统)来传输数据。该连接持续存在,直到通信结束。常比方为打电话过程中需要占用专线,造成资源浪费;
- 报文交换:按照逐段通过网络的方式封装数据,并确定路由路径和目的地址等信息在网络中计算机之间传递。
- 分组交换:将大文件分成若干个固定大小的数据包,每个数据包加上目的地址和源地址等相关信息,经过不同路由节点跳转而达到目标地点。因其较前两者占用更小的所需资源,因此得到广泛应用。
循环冗余码(CRC)是一种能够检测数据是否出现错误的编码方式。它可以根据所发送的数据生成一个固定长度的校验码,在接收端再根据相同的方法重新生成校验码,如果校验码不一致则说明数据出现错误。CRC 常被用于数据通信中,以便检测和纠正错误。
# 3.OSI 参考模型和 TCP/IP 模型及两个模型的特点与比较
OSI 参考模型和 TCP/IP 模型都是计算机网络协议栈的理论模型,用来描述计算机网络中协议之间的通信过程。它们根据不同的角度和思想将网络体系分为不同的层次,并规定每个层次的协议和功能,实现了模块化和分层处理,极大地方便了计算机网络协议的设计、开发、调试和维护工作。
OSI 模型国际标准化组织(ISO)创建于 20 世纪 70 年代,由 7 层组成。从下到上依次为:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。每一层都有特定的任务和服务,上层协议可以使用下层协议提供的服务。 OSI 模型只是一个理论框架,并没有广泛应用。
TCP/IP 模型是互联网发展起来之后定义的一种网络协议体系结构,由 4 个层次组成。从下到上依次为:网络接口层、网际层、传输层和应用层。与 OSI 模型相比,TCP/IP 模型没有明确的表现层和会话层。TCP/IP 模型已被广泛应用于因特网的实现和设计中。
两个模型的主要区别如下:
-
层次不同:OSI 模型有 7 层,而 TCP/IP 模型有 4 层。OSI 模型更加详细,但也复杂;TCP/IP 模型是从因特网实际需求出发而定义的。
-
功能不同:两个模型各层所担任的职能存在一些区别。例如,OSI 模型中物理层和数据链路层负责物理链接和数据传输,网络层的作用是路由和虚拟连接控制,而在 TCP/IP 模型中则都融合为网络接口层。
-
发展历史不同:OSI 模型标准定于 20 世纪 80 年代初,并未被快速采纳。而 TCP/IP 模型早在上世纪 70 年代就已经开始应用。
两个模型相同之处包括:
- 都采用了分层结构,每层之间通过协议进行交互,上层协议可以上调用下层协议提供的服务。
- 都属于抽象的网络协议开发框架,为计算机网络的设计、开发、调试和维护提供指导思想。
# 4.IP 数据报的格式、UDP 和 TCP 报文段的格式、端口,TCP 传输连 4 接的建立和释放
IP 数据报的格式是由头部和正文组成,其中头部分四部分:版本号、头部长度、服务类型和总长度;后面两部分为标识符、标记位、分段偏移量等。正文则包含数据,可以是各种协议传送的内容,如 TCP/UDP 数据,ICMP 信息等。
UDP 报文段的格式包括源端口、目的端口、长度和校验和等 4 个字段。其中源端口和目的端口用于标识通信双方的应用程序,长度字段指的是整个 UDP 报文段的长度,校验和字段则用于保证数据在传输过程中不被篡改。
TCP 报文段的格式包括源端口、目的端口、序号、确认号、头部长度、标志位、窗口大小、校验和和紧急指针等 9 个字段。这些字段都带有特殊的含义,如序列号用于指示发送方发送的字节流数据中的第一个字节的编号;确认号用于指明下一步期望收到的数据;头部长度字段是 32 位的数值,用来表示 TCP 头部的长度,标志位标识了报文段的类型(SYN、ACK、FIN 等)。
端口是 TCP/IP 中用来标识应用进程的机制。每个端口都标识特定的应用程序。TCP 使用端口号来建立连接,而 UDP 则选择随机端口发送数据。
TCP 传输连接的建立是通过三次握手来实现的。第一次握手,客户端向服务器发送 SYN 包,并进入 SYN_SEND 状态;第二次握手,服务器收到请求后,回复一个 SYN+ACK 的包,此时服务器进入 SYN_REVD 状态;第三次握手,客户端收到服务器的 SYN+ACK 响应后,再回复一个 ACK 包确认,此时客户端和服务器都进入 ESTABLISHED 状态,连接建立成功。
释放 TCP 连接称为四次挥手。第一次挥手,客户端将序列号 SEQ 设置为 X,并发送 FIN 报文给服务端,然后进入 FIN_WAIT_1 状态;第二次挥手,服务器接收到 FIN 报文后,发送 ACK 报文给客户端,确认序号应该是 X+1,此时服务器进入 CLOSE_WAIT 状态;第三次挥手,服务器发送 FIN 报文给客户端,序列号为 Y,并设置标志位 ACK=1,此时服务器进入 LAST_ACK 状态;最后一次挥手,客户端收到服务端的 FIN 报文后,回送一个 ACK 报文,表示所有数据已经接收完毕。此时客户端进入 TIME_WAIT 状态,并维持 2MSL(Maximum Segment Lifetime)时间长度后关闭连接。
# 5.IPv4 地址分类、子网技术 (划分子网的步骤 - 默认为支持 CIDR5 即子网数为 2n)、CIDR,IPv6 地址的表示方法
IPv4 地址分类主要有 A、B、C、D 和 E 五类。
A 类地址中网络号占 1 个字节,剩下的 3 个字节用来表示主机号,其范围是 1.0.0.0 到 126.x.x.x。
B 类地址中网络号占 2 个字节,主机号占 2 个字节,其范围是 128.0.0.0 到 191.255.x.x。
C 类地址中网络号占 3 个字节,主机号占 1 个字节,其范围是 192.0.0.0 到 223.255.255.x。
D 类地址为多播地址,它的第一字节是 1110,范围从 224.0.0.0 到 239.255.255.255。
E 类地址暂时没有被使用。
子网划分技术是为了更好地利用 IP 地址资源而设计的。步骤如下:
- 规划 IP 地址方案,确定需要的主机数目以及主机所在的网络数量。
- 根据需要的主机数量自动分配 IP 地址并将其配置到网络主机上,同时根据网络数量需要合理设置掩码位数。
- 对隶属同一个网络的主机添加子网掩码进行隔离性管理。
CIDR(无类型域间路由)是用于对 IP 地址进行聚合路由的一个机制。CIDR 针对的是地址的前缀长度而非特定的地址类别,可以实现更加灵活的地址规划。在 CIDR 中,使用斜线后跟着一个数字表示地址前缀长度,例如:192.168.1.0/24 表示该网段共有 24 位作为网络地址,其他 8 位则用于主机地址。
IPv6 地址采用 128 位(16 字节)来表示,分成 8 组,每个组占 16 比特(2 字节),采用冒号分隔。IPv6 地址可以缩写,去掉前导 0 并将连续的多个 0 缩写为一组 “::”。例如,2001::1 表示的就是 2001:0000:0000:0000:0000:0000:0000:0001。还可以用双冒号表示多个 16 比特的 0,例如,2001:db8::1 表示的是 2001:0db8:0000:0000:0000:0000:0000:0001。
# 6.IPv4 到 IPv6 的过渡技术
IPv4 和 IPv6 属于两个不同的协议,彼此不兼容,在 IPv4 向 IPv6 过渡期间,需要采用一些技术手段来保证网络的顺利过渡。
以下是常用的 IPv4 到 IPv6 过渡技术:
-
Dual Stack 技术:在传输层和网络层同时实现 IPv4 和 IPv6,使得同时支持 IPv4 和 IPv6 的应用程序能够同时运行。
-
Tunnel 技术:将 IPv6 数据包封装在 IPv4 数据包中进行传输。可以通过隧道技术将 IPv6 流量通过 IPv4 网路传输,以便连接不支持 IPv6 的设备。
-
6to4 技术:可以将 IPv6 数据包封装在 IPv4 数据包中,通过 IPv4 互联网上的 “6to4” 隧道转发至下一个 IPv6 路由器,进入 IPv6 网络。
-
NAT64 技术:将 IPv6 数据包映射到 IPv4 地址,允许 IPv6 主机能够访问 IPv4 主机且反之亦然。
-
DS-Lite 技术:该技术主要针对 ISP 网络设计,通过 NAT64 将 IPv6 流量转换成 IPv4,并在 IPv4 通信中维护 IPv6 地址。同时提供 IPv6 地址分配等服务。
这些技术手段可以帮助 IPv4 向 IPv6 平滑过渡,避免了网络运营商和用户一下子将所有的设备全部转换为 IPv6 所带来的短期冲击和成本压力。
# 7. 局域网体系结构与 802 标准,CSMA/CD Tken Ring Token Bus 三种介质访问控制方法,以太网技术、虚拟局域网技术和无线局域网准
局域网是一种覆盖范围相对较小的计算机网络,通常在一个组织、企业或者校园内部使用。以下是有关局域网体系结构、标准以及常见技术的介绍:
-
局域网体系结构:常见的局域网体系结构包括总线型、星型、环型和混合型等。
-
IEEE 802 标准:IEEE 802 是指由 IEEE(电气电子工程师协会)制定的标准,在局域网领域中发挥着重要的作用。
-
CSMA/CD:CSMA/CD 是以太网中常用的一种介质访问控制方法,即采用冲突检测技术来检测网络中传输冲突并进行重传,保证数据传输成功率。
-
Tken Ring:Token Ring 是一种基于环型拓扑结构的 LAN 传输协议,其中采用令牌传递方式轮流让各节点访问公共数据链路。
-
Token Bus:Token Bus 是一种基于总线型拓扑结构的 LAN 传输协议,也是通过令牌传递方式轮流让各节点访问公共数据链路。
-
以太网技术:以太网是一种常见的局域网技术,使用 CSMA/CD 访问控制协议、争用式访问以及广播方式传输数据等特点。
-
虚拟局域网技术:虚拟局域网是为解决安全性、可管理性和灵活性而设计的一种技术,可以通过交换机等设备来将整个局域网分割成多个相互隔离的虚拟局域网。
-
无线局域网技术:无线局域网是现代计算机网络中重要的一员,采用无线方式来进行通信。其中包括蓝牙、Wi-Fi、ZigBee 等多种无线通信技术标准。
# 8. 网络互联类型、主要的传输介质 (双绞线和光纤)
网络互联类型指的是不同的网络连接方式,根据连接方式的不同,可以分为以下几种:
-
点到点(Point-to-Point,简称 PPP):点对之间通过物理或逻辑传输线路建立起的连接。
-
广域网(Wide Area Network,简称 WAN):基于不同地理位置之间连接的网络。
-
局域网(Local Area Network,简称 LAN):覆盖较小的、特定的区域内的计算机网络。
-
带宽型号致电节省网络(HFC,Hybrid Fiber Coaxial): 采用混合光纤和同轴电缆的方式,传输有线电视、互联网数据等信号。
主要传输介质包括双绞线和光纤两种:
-
双绞线(Twisted Pair):常用于局域网中,由数对平衡线构成,一般采用 RJ-45 接口进行连接。
-
光纤(Fiber Optic):可用于广域网或局域网,具有高速、抗干扰、低损耗等特点,在通信领域得到了广泛应用。其中单模光纤可支持更长距离的信号传输,而多模光纤则适合在短距离内进行数据传输。
# 9. 网络互联设备 (集线器、交换机、路由器、网关)
网络互联设备是指用于连接不同计算机网络的硬件设备,其中包括:
-
集线器(Hub):通过多个端口将不同的设备相连,将来自一个端口的数据广播至其他所有端口,使得所有设备可以互相通信。
-
交换机(Switch):根据 MAC 地址转发数据的网络设备,可以实现设备之间点对点的数据通信,提高网络传输效率。
-
路由器(Router):连接不同 IP 子网的设备,能够根据源和目的地 IP 地址将数据包转发至不同的子网。
-
网关(Gateway):在两个不同的协议之间转换数据,比如将本地网络的数据转换成 Internet 所需的格式或者将 Internet 上的数据转换成本地网络所需的格式。
这些设备在互联网络中发挥着重要的作用,可实现数据的流通、传输和路由,同时也负责数据的过滤和管理,对于网络的安全性、可靠性、效率都有着很重要的影响。
# 10. 路由协议 (RIP、OSPF 和 BGP)
路由协议是指计算机网络中用于确定数据包传输路径、实现路由器之间通信的一套规则和标准,其中常见的几种路由协议包括:
-
RIP(Routing Information Protocol):基于距离向量的路由协议,使用跳数作为度量单位,每隔一段时间会发送它所知道的所有路由信息,其他路由器根据这些信息更新路由表。
-
OSPF(Open Shortest Path First):基于链路状态的路由协议,将整个网络看做一个图形,在该图形上通过 Dijkstra 算法计算出最优路径,并将其存储在路由器中,不断更新路由信息以保证网络正常运行。
-
BGP(Border Gateway Protocol):用于在互联网自治域之间进行路由选择的协议,主要负责将不同自治域之间的路由信息互相传递、交换,以便实现互联网之间的互联和通讯。BGP 主要针对在不同自治域之间寻找最佳路径问题。
这些协议各有优缺点,可以根据具体的网络架构和需求来选择合适的路由协议。例如:RIP 适用于较小的网络和带宽成本较高的环境,OSPF 则适用于大型的企业内部网络环境,而 BGP 则适用于互联网扩展和自治域之间的路由选择。
# 11. 应用层的主要协议:DNS、WWW、FTP、SMTP 及 POP3
应用层是 OSI 参考模型中负责应用程序之间通信和交互的网络协议集合,其中常见的应用层协议包括:
-
DNS(Domain Name System):用于将域名解析为 IP 地址的系统,通过查询域名服务器来获取相应的 IP 地址,从而实现互联网中的域名访问。
-
WWW(World Wide Web):基于 HTTP 协议的文本、图像、声音、视频等多媒体资源的分布式信息系统,用户可以通过浏览器在互联网上浏览和检索网页。
-
FTP(File Transfer Protocol):文件传输协议,用于将文件从一台计算机传输到另一台计算机,支持上传、下载、目录操作等功能。
-
SMTP(Simple Mail Transfer Protocol):简单邮件传输协议,用于发送电子邮件,它规定了邮件客户端和邮件服务器之间需要遵循的一系列传输规则。
-
POP3(Post Office Protocol version 3):邮局协议第三版,用于接收远程邮件服务器上的电子邮件。
这些协议在互联网应用中起着非常重要的作用,涉及到许多应用场景,在保障数据安全、可靠性和稳定性方面发挥着重要的作用。
# 网络层有哪些重要协议
网络层是 OSI 参考模型中的第三层,负责实现数据包从源主机到目的主机的逐跳传输。网络层的协议通常与 IP 地址分配、路由选择、拥塞控制、分组创建和广播等相关。
以下是网络层中的一些重要协议:
-
IP(Internet Protocol):是互联网上面的标准协议,它定义了所有在 internet 上传输的数据报格式和具体传输方式,IP 协议可以提供一种基于端到端服务的网络层数据传输服务,在 IPv4 版本和 IPv6 版本中都有相应的支持。
-
ICMP(Internet Control Message Protocol):它是 IP 协议的一个扩展,可以用来在网络层提供各种服务,如错误报告、Ping 请求与回应等,并且还可以进行路由寻径等操作。
-
ARP(Address Resolution Protocol):是将 IPv4 地址转换为其 MAC 地址的协议,即通过 IP 地址来查询对应的物理地址,这样可以方便 IP 数据包正确地发送到目标设备上。
-
RARP(Reverse Address Resolution Protocol):作用于 ARP 协议相反,主要是将物理地址(MAC 地址)转换成 IP 地址的映射,并以此来获取 IP 地址。
-
DHCP(Dynamic Host Configuration Protocol):是一种动态 IP 地址分配协议,可以自动为计算机分配 IP 地址,DNS 服务器地址、默认网关等网络参数,避免了手动设置的繁琐和出错。
-
OSPF(Open Shortest Path First):是一种开放的链路状态路由协议,可以自动发现并选择最优路径。它的优点是能够根据实际情况来动态地适应新的网络拓扑结构,并且可以支持多种类型的网络连接。
-
BGP(Border Gateway Protocol):是互联网上广泛使用的一种边界网关协议,其主要功能是进行自治系统之间路由选择和控制,在互联网规模化的环境下具有很高的可扩展性和鲁棒性。
以上这些协议都在网络层中发挥着重要的作用,保证了不同主机间数据包的正确传输、路由选择以及网络配置管理等方面的功能。