当前位置: 首页 > news >正文

OSI七层模型TCP/IP四层面试高频考点

OSI七层模型&TCP/IP四层&面试高频考点

1 OSI七层模型

在这里插入图片描述

1. 物理层:透明地传输比特流

在物理媒介上传输原始比特流,定义了连接主机的硬件设备和传输媒介的规范。它确保比特流能够在网络中准确地传输,例如通过以太网、光纤和无线电波等媒介。

  • 通过光纤等媒介传输原始比特流

2. 数据链路层:帧编码、误差纠正控制

提供点对点的数据传输服务,负责将原始比特流转换为数据帧,并检测和纠正传输中出现的错误。它还控制访问物理媒介的方式,以及数据帧的传输和接收。

  • 将原始比特流转换为数据帧

3. 网络层:路由、寻址(决定数据在网络的游走路径)

负责数据包的路由和转发,以及网络中的寻址和拥塞控制。它选择最佳的路径来传输数据包,以确保它们能够从源主机到目标主机进行传输。

  • 数据包的路由和转发

4. 传输层:两台主机进程之间通信提供通用的数据传输服务,TCP、UDP

为应用程序提供端到端的数据传输服务,负责数据的分段、传输控制、错误恢复和流量控制。它主要使用 TCP(传输控制协议)和 UDP(用户数据报协议)来实现这些功能。

  • 通过TCP、UDP实现端到端的数据传输

常见协议:

  1. TCP(Transmission Control Protocol):提供可靠的、面向连接的数据传输服务,确保数据的可靠性、顺序性和完整性。TCP适用于对数据传输质量要求较高的场景,如文件传输、网页浏览等
  2. UDP(User Datagram Protocol):提供无连接的数据传输服务,不保证数据的可靠性,也不保证数据的顺序性和完整性。UDP适用于实时性要求较高、对数据传输质量要求不那么严格的场景,如音视频传输、在线游戏等。

5. 会话层:管理(建立、维护、重连)应用程序之间的会话

管理应用程序之间的通信会话,负责建立、维护和终止会话。它还提供了数据的同步和检查点恢复功能,以确保通信的完整性和持续性。

6. 表示层:数据处理(编解码、加解密、压缩解压缩)

负责数据的格式化、加密和压缩,以确保数据在不同系统之间的交换是有效的和安全的。它还提供了数据格式转换和语法转换的功能

  • 数据编辑码、加解密、压缩解压缩

7. 应用层:为计算机提供服务(email、文件传输等)

提供用户接口和应用程序之间的通信服务。在这一层,用户可以访问各种网络应用程序,如电子邮件、文件传输和远程登录

  • 应用层常见协议:
  1. HTTP(HyperText Transfer Protocol):用于在客户端和服务器之间传输超文本数据,通常用于 Web 浏览器和 Web 服务器之间的通信。
  2. FTP(File Transfer Protocol):用于在客户端和服务器之间传输文件,支持上传和下载文件的功能。
  3. SMTP(Simple Mail Transfer Protocol):用于在邮件服务器之间传输电子邮件,负责发送邮件。
  4. POP3(Post Office Protocol version 3):用于从邮件服务器上下载邮件到本地计算机,负责接收邮件。
  5. IMAP(Internet Message Access Protocol):也是用于接收邮件的协议,与 POP3 类似,但提供了更丰富的功能,如在服务器上管理邮件等。
  6. DNS(Domain Name System):用于将域名解析为对应的 IP 地址,从而实现域名和 IP 地址之间的映射。
  7. HTTPS(HyperText Transfer Protocol Secure):是 HTTP 的安全版本,通过 SSL/TLS 加密传输数据,保证通信过程中的安全性。
  8. SSH(Secure Shell):用于远程登录和执行命令,提供了加密的网络连接,保证了通信的安全性。
  9. SNMP(Simple Network Management Protocol):用于网络设备之间的管理和监控,可以实现对网络设备的远程配置和监控。
  10. Telnet:用于远程登录和执行命令,类似于 SSH,但不提供加密功能,通信数据不安全。

2 TCP/IP四层模型

TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议

在这里插入图片描述

1. 网络接口层(数据链路层)【物理+数据链路层,传输比特流+将比特流转换为数据帧】

网络接口层 Link Layer:OSI中的物理层+数据链路层,负责管理网络硬件设备和物理媒介之间的通信。它包括以太网、Wi-Fi、蓝牙等各种物理层和数据链路层协议。

  • 通过光纤等透明传送比特流+将原始比特流转换为数据帧

常见协议:

  1. 以太网协议(Ethernet):是一种常见的局域网技术,使用MAC地址进行帧的传输和接收。
  2. 无线局域网协议(Wi-Fi):用于无线局域网的数据传输,通常基于IEEE 802.11标准。
  3. 点对点协议(P2P):用于建立点对点连接的协议,通常用于拨号连接和虚拟专用网(VPN)等场景。
  4. 数据链路层交换协议(DLC):用于在数据链路层进行数据交换和管理的协议,如HDLC、SLIP和PPP等。

2. 网络层(数据包在网络的路由和寻址)

网络层(Internet Layer):相当于 OSI 模型中的网络层,负责数据包的路由和转发。它使用 IP(Internet Protocol)协议来定义数据包的传输路径,并处理不同网络之间的通信。

  • 路由和寻址,决定数据包在网络的游走路径

常见协议:

  1. IP(Internet Protocol):是互联网中最基本的协议,用于在网络中传输数据包。IP协议定义了数据包的格式、寻址方式和路由选择等信息,是整个互联网的基础。
  2. ICMP(Internet Control Message Protocol):用于在IP网络中传递控制消息和错误信息。ICMP通常用于网络设备之间的通信,如路由器和主机之间的通信,以及用于检测网络连通性和故障诊断。
  3. ARP(Address Resolution Protocol):用于将IP地址映射为MAC地址(物理地址)。ARP协议在局域网内部使用,通过发送ARP请求获取目标设备的MAC地址,从而实现数据包的传输。
  4. RARP(Reverse Address Resolution Protocol):与ARP相反,用于将MAC地址映射为IP地址。RARP协议通常用于无盘工作站等设备,可以根据MAC地址获取对应的IP地址。
  5. IPv6(Internet Protocol version 6):是IP协议的下一代版本,用于解决IPv4地址空间不足的问题。IPv6采用128位地址长度,提供了更大的地址空间,支持更多的设备连接到互联网。

3. 传输层(通过TCP、UDP让两台主机间的进程互相通信,传输数据)

传输层(Transport Layer):与 OSI 模型中的传输层相对应,提供端到端的数据传输服务。在 TCP/IP 模型中,主要有两个协议:TCP(传输控制协议)和 UDP(用户数据报协议),用于确保可靠的数据传输和简单的数据传输。

  • 通过TCP可靠慢速、UDP不可靠高速实现两台主机进程之间通信,传输数据

常见协议:

  1. TCP(Transmission Control Protocol):提供可靠的、面向连接的数据传输服务,确保数据的可靠性、顺序性和完整性。TCP适用于对数据传输质量要求较高的场景,如文件传输、网页浏览等。
  2. UDP(User Datagram Protocol):提供无连接的数据传输服务,不保证数据的可靠性,也不保证数据的顺序性和完整性。UDP适用于实时性要求较高、对数据传输质量要求不那么严格的场景,如音视频传输、在线游戏等。

4. 应用层【会话+表示+应用层】

应用层(Application Layer):OSI 模型中的会话层+表示层+应用层,负责处理用户与网络应用程序之间的通信。它包括诸如 HTTP、FTP、SMTP 等协议,用于实现不同类型的网络服务和应用。

  • 管理(建立、维护、重连)应用程序间的会话=》会话层
  • 数据处理(编解码、加解密、压缩解压缩)=》表示层
  • 为用户提供邮件服务、远程登录服务等 =》应用层

常见协议:

  1. HTTP(HyperText Transfer Protocol):用于在客户端和服务器之间传输超文本数据,通常用于 Web 浏览器和 Web 服务器之间的通信。
  2. FTP(File Transfer Protocol):用于在客户端和服务器之间传输文件,支持上传和下载文件的功能。
  3. SMTP(Simple Mail Transfer Protocol):用于在邮件服务器之间传输电子邮件,负责发送邮件。
  4. POP3(Post Office Protocol version 3):用于从邮件服务器上下载邮件到本地计算机,负责接收邮件。
  5. IMAP(Internet Message Access Protocol):也是用于接收邮件的协议,与 POP3 类似,但提供了更丰富的功能,如在服务器上管理邮件等。
  6. DNS(Domain Name System):用于将域名解析为对应的 IP 地址,从而实现域名和 IP 地址之间的映射。
  7. HTTPS(HyperText Transfer Protocol Secure):是 HTTP 的安全版本,通过 SSL/TLS 加密传输数据,保证通信过程中的安全性。
  8. SSH(Secure Shell):用于远程登录和执行命令,提供了加密的网络连接,保证了通信的安全性。
  9. SNMP(Simple Network Management Protocol):用于网络设备之间的管理和监控,可以实现对网络设备的远程配置和监控。
  10. Telnet:用于远程登录和执行命令,类似于 SSH,但不提供加密功能,通信数据不安全。

面试高频考点【TCP/IP四层】

1. 什么是TCP/IP网络分层,分层有什么好处

TCP/IP模型是一个四层模型,包括应用层、传输层、网络层和网络接口层(数据链路层)。

  • 网络接口层则负责数据链路的具体操作。
  • 网络层负责数据包的路由,如IP协议;
  • 传输层负责端到端的数据传输,如TCP和UDP;
  • 应用层负责处理特定应用程序的数据,如HTTP、FTP等;
  1. 各层独⽴:限制了依赖关系的范围,各层之间使⽤标准化的接⼝,各层不需要知道上下层是如何⼯作的,增加或者修改⼀个应⽤层协议不会影响传输层协议
  2. 灵活性更好:⽐如路由器不需要应⽤层和传输层,分层以后路由器就可以只⽤加载更少的⼏个协议层
  3. 易于测试和维护:提⾼了可测试性,可以独⽴的测试特定层,某⼀层有了更好的实现可以整体替换掉
  4. 能促进标准化:每⼀层职责清楚,⽅便进⾏标准化

2. TCP的三次握⼿中为什么是三次?为什么不是两次、四次?

在这里插入图片描述

两次不够可靠。

  • 如果只有两次握手,服务器无法确认客户端是否真的收到了它的确认响应,这样服务器可能会误以为连接已经建立,而实际上客户端可能没有收到服务器的响应,导致服务器空等资源浪费。

四次也可以,但是没必要,“投资比不高,效益不高”。

  • 三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数

3. TCP的四次挥⼿为什么是四次?为什么不能是三次?[还有最后一波数据要传]

在这里插入图片描述

  1. 关闭请求:当一方(比如客户端)想要断开连接时,它会发送一个FIN(Finish)标志,告诉对方它不再发送数据了。
  2. 确认收到关闭请求:另一方(服务器)接收到FIN后,会回复一个ACK,确认收到了关闭请求,但此时服务器可能还有数据需要发送给客户端,所以连接并未立即关闭。
  3. 服务器也准备关闭:当服务器准备好关闭连接时,它也会发送一个FIN给客户端,表明自己也没有数据要发送了。
  4. 客户端确认关闭:客户端收到服务器的FIN后,发送最后一个ACK,确认收到了服务器的关闭请求,这时等待一段时间(确保所有数据包都已到达),连接正式关闭。
  • 为什么不能是三次挥手? 主要是由于全双工通信的特性,即连接双方都可以同时发送和接收数据。在断开连接时,必须确保双方都没有数据要发送了。两次挥手(客户端发送FIN,服务器发送FIN+ACK,客户端ACK)不能解决这个问题,因为服务器在第一步的ACK中无法同时表达自己是否还有数据要发送。因此,需要额外的步骤来确保两边都完成了数据发送并且同意关闭连接,这就是为什么需要四次挥手。

4. 为什么 SYN/FIN 不包含数据却要消耗⼀个序列号?

维护TCP连接的可靠性和有序性,确保连接的建立与终止过程能够被准确无误地管理。凡是需要对端确认的,⼀定消耗TCP报⽂的序列号。SYN 和FIN需要对端的确认,所以需要消耗⼀个序列号

  • 在三次握手过程中,SYN段标志着客户端或服务器希望建立连接的意愿。这个序列号初始化了该连接的传输序列,为后续的数据传输打下基础。它需要被确认,以确保连接请求被对方正确接收,因此消耗一个序列号确保了这个控制信息能够被可靠地处理和确认。

5. 什么是半连接队列?什么是SYN Flood攻击?[伪造IP+SYN]

在这里插入图片描述

客户端⼤量伪造 IP 发送 SYN 包,服务端回复的 ACK+SYN 去到了⼀个「未知」的 IP 地址,势必会造成服务端⼤量的连接处于 SYN_RCVD 状态,⽽服务器的半连接队列⼤⼩也是有限的,如果半连接队列满,也会出现⽆法处理正常请求的情况。

6. 说说TCP快速打开(TFO)的原理【SYN包就带数据】

TFO 是在原来 TCP 协议上的扩展协议,它的主要原理就在发送第⼀个 SYN 包的时候就开始传数据了,不过它要求当前客户端之前已经完成过「正常」的三次握⼿。

  • 快速打开分两个阶段:请求 Fast Open Cookie 和 真正开始 TCP Fast Open
  1. Fast Open Cookie
    在这里插入图片描述
  2. TCP Fast Open
  • 好处:⼀个最显著的优点是可以利⽤握⼿去除⼀个往返 RTT
    可以防⽌ SYN-Flood 攻击之类的在这里插入图片描述
    普通TCP/IP连接与TFO(TCP Fast Open)对比:在这里插入图片描述

7. TCP报⽂中的时间戳有什么作⽤?[解决RTT、防止序列号回绕]

  1. 解决计算往返时延 RTT(Round-Trip Time)
  • 在启⽤ Timestamps 选项以后,因为 ACK 包⾥包含了 TSval 和 TSecr,这样⽆论是正常确认包,还是重传确认包,都可以通过这两个值计算出 RTT。
  1. 防⽌序列号的回绕问题(知道哪个包是什么时候发的,)
  • TCP 的序列号⽤ 32bit 来表示,因此在 2^32 字节的数据传输后序列号就会溢出回绕。TCP 的窗⼝经过窗⼝缩放可以最⾼到 1GB(2^30),在⾼速⽹络中,序列号在很短的时间内就会被重复使⽤。
    在这里插入图片描述
    假设发送了 6 个数据包,每个数据包的⼤⼩为 1GB,第 5 个包序列号发⽣回绕。
    第 2 个包因为某些原因延迟导致重传,但没有丢失到时间 t7 才到达。
    这个迷途数据包与后⾯要发送的第 6 个包序列号完全相同,如果没有⼀些措施进⾏区分,将会造成数据的紊乱。
    有 Timestamps 的存在,迷途数据包与第 6 个包可以区分

8. TCP 的超时重传时间是如何计算的?【平滑因子】

TCP 具有超时重传机制,即间隔⼀段时间没有等到数据包的回复时,重传这个数据包。
这个重传间隔也叫做超时重传时间(Retransmission TimeOut, 简称RTO)
在这里插入图片描述
经典算法:往返时延 RTT(Round-Trip Time)

  • ⼀个最简单的想法就是取平均值,⽐如第⼀次 RTT 为 500ms,第⼆次 RTT 为 800ms,那么第三次发送时,各让⼀步取平均值 RTO 为 650ms。
    经典算法引⼊了「平滑往返时间」(Smoothed round trip time,SRTT):经过平滑后的RTT的值,每测量⼀次 RTT 就对 SRTT 作⼀次更新计算。
    在这里插入图片描述

9. 能不能说⼀说 TCP 的流量控制?【滑动窗口】

对于发送端和接收端⽽⾔,TCP 需要把发送的数据放到发送缓存区, 将接收的数据放到接收缓存区。

  • ⽽流量控制要做的事情,就是在通过接收缓存区的⼤⼩,控制发送端的发送。如果对⽅的接收缓存区满了,就不能再继续发送了。
  • 为了控制发送端的速率,接收端会告知客户端⾃⼰接收窗⼝(rwnd),也就是接收缓冲区中空闲的部分

在这里插入图片描述

  1. 首先双方三次握手,初始化各自的窗口大小,如双方均为 400 个字节。假如当前发送方给接收方发送了 200 个字节,那么,发送方的SND.NXT(下一个发送位置)会右移 200 个字节,也就是说当前的可用窗口减少了 200 个字节。
  2. 接受方收到后,放到缓冲队列里面,窗口大小REV.WND =400-200=200 字节,所以 win=200 字节返回给发送方。接收方会在 ACK 的报文首部带上缩小后的滑动窗口 200 字节
  3. 发送方又发送 200 字节过来,200 字节到达,继续放到缓冲队列。不过这时候,由于大量负载的原因,接受方处理不了这么多字节,只能处理 100 字节,剩余的 100 字节继续放到缓冲队列。这时候,REV.WND = 400-200-100=100 字节,即 win=100 返回发送方。
  4. 发送方继续发送 100 字节过来,这时候,接收窗口 win 变为 0。
  5. 发送方停止发送,开启一个定时任务,每隔一段时间,就去询问接受方,直到 win 大于 0,才继续开始发送。

注:窗口单位大小一般是MSS的整数倍。

滑动窗口:

  • 初始化窗口:一开始,发送方会获知接收方的窗口大小,这个大小代表了接收方当前能接受的数据量。比如,如果窗口大小是1000个字节,发送方就知道最多可以连续发送1000个字节的数据,而不会造成接收方处理不过来。
  • 发送数据:发送方开始发送数据,每发送一个数据包(或一部分数据),它就会从自己的“待发送窗口”中移除相应数量的字节,这个窗口就像是可以左右滑动的门框,随着数据的发送而向前移动。
  • 接收确认:接收方接收到数据后,会发送一个ACK(Acknowledgment)确认报文,告诉发送方收到了哪些数据,并且更新自己还能接收多少数据(即新的窗口大小)。如果接收方处理数据的速度赶不上接收速度,它会减小窗口大小来减缓发送方的发送速率。
  • 窗口调整:发送方根据接收方的ACK报文中的窗口大小信息,动态调整自己的发送窗口大小。如果接收方处理了一些数据,窗口大小变大,发送方就可以发送更多的数据;反之,如果接收方的缓冲区快满了,窗口大小缩小,发送方就需要减慢发送速度。
  • 滑动:这个过程中,“滑动”的概念体现在发送窗口随着数据的发送和接收确认而向前滑动,同时也可能根据接收方的处理能力向后收缩或扩展,形象地模拟了数据传输的动态过程。

10. 如何理解 TCP 的keep-alive的原理?

⼀个 TCP 连接上,如果通信双⽅都不向对⽅发送数据,那么 TCP 连接就不会有任何数据交换。

  • 假设应⽤程序是⼀个 web 服务器,客户端发出三次握⼿以后故障宕机或被踢掉⽹线,对于 web 服务器⽽已,下⼀个数据包将永远⽆法到来,但是它⼀⽆所知。
  • TCP 协议的设计者考虑到了这种检测⻓时间死连接的需求,于是乎设计了 keepalive 机制。它的作⽤就是探测对端的连接有没有失效,通过定时发送探测包来探测连接的对端是否存活。不过默认情况下需要 7200s 没有数据包交互才会发送 keepalive 探测包,往往这个时间太久了,我们熟知的很多组件都没有开启 keepalive 特性,⽽是选择在应⽤层做⼼跳机制。
    在这里插入图片描述

11. 聊⼀聊TCP中的端⼝号(端口号与网络分层)

TCP ⽤两字节的整数来表示端⼝,⼀台主机最⼤允许 65536 个端⼝号。

  • 熟知端⼝号:范围0~1023
    HTTP:80
    HTTPS:443
    SSH:22
  • 已登记的端⼝号:范围1024~49151
    MySQL:3306
    Redis:6379
    MongoDB:27017
  • 临时端⼝号:范围49152~65535
    在这里插入图片描述

12. TCP场景题1:报文返回的确认号判断

A B 两个主机之间建⽴了⼀个 TCP 连接,A 主机发给 B 主机两个 TCP 报⽂,⼤⼩分别是 500 和 300,第⼀个报⽂的序列号是 200,那么 B 主机接收两个报⽂后,返回的确认号是多少?

在这里插入图片描述

  1. 第一个报文处理:A发送的第一个报文序列号是200,含有500字节数据,因此该报文的序列号范围是200到699(200 + 499)。
  2. B收到后,应确认收到的所有数据,所以确认号应该是下一个期待的序列号,即700。
  3. 第二个报文处理:紧接着,A发送的第二个报文序列号紧接着上一个报文,由于第一个报文是500字节,故第二个报文的序列号从700开始(实际上,TCP报文的序列号是连续的,但这里为了说明方便,我们直接按数据累加理解)。这个报文有300字节数据,因此序列号范围是700到999(700 + 299)。
  4. B主机在接收到这两个报文后,会合并确认,即确认收到第一个和第二个报文的所有数据。因此,B主机返回的确认号应当是第二个报文的数据结束后的下一个序列号,即1000。
  5. 结论:B主机返回的确认号是1000。

答:500+300+200

13. TCP场景题2:收到 IP 数据包解析以后,它怎么知道这个分组应该投递到上层的哪⼀个协议(UDP 或 TCP)?

协议: 区分IP协议上的上层协议。在Linux系统的/etc/protocols⽂件中定义了所有上层协议对应的协议字段,ICMP为1,TCP为6,UDP为17

14. TCP场景题3:TCP 提供了⼀种字节流服务,⽽收发双⽅都不保持记录的边界,应⽤程序应该如何提供他们⾃⼰的记录标识呢?

应⽤程序使⽤⾃⼰约定的规则来表示消息的边界,⽐如有⼀些使⽤回⻋+换⾏(“\r\n”),⽐如 Redis的通信协议(RESP protocol)

  1. 定长消息:如果应用层的数据记录长度固定,接收端可以每次读取固定大小的数据块,以此来区分不同的记录。
  2. 前缀/长度字段:在每个数据记录前添加一个字段来表示该记录的长度或接下来数据的字节数。接收端先读取长度信息,然后根据该长度读取对应数量的字节作为一条完整记录。
  3. 特殊分隔符:在数据记录间使用特定的分隔符(如换行符\n),接收端通过查找这些分隔符来分割出不同的记录。需要注意的是,如果数据内容中也可能包含分隔符,则需采用转义机制避免混淆。
  4. 结束标记:在数据流的末尾添加一个特殊的结束标记,接收端识别到此标记即认为一个完整的消息结束。这种方式适用于一次性发送整个数据块的场景。
  5. 协议封装:设计应用层协议时,可以在协议头部包含额外的信息字段,比如记录计数或者记录ID,帮助接收端理解和重组数据。
  6. 消息帧:将每个记录封装成带有头部和数据部分的帧结构,头部中包含帧的长度或其他控制信息,接收端解析头部后,按指定长度读取数据部分。

15. telnet的用法:检查端口是否打开、发送http请求

  1. 检查端口是否打开
    telnet 的⼀个最⼤作⽤就是检查⼀个端⼝是否处于打开,使⽤的命令是 telnet [domainname or ip] [port],这条命令能告诉我们到远端 server 指定端⼝的⽹连接是否可达
  2. 发送http请求

16. tcpdump的用法:分析网络流量,抓tcp包

tcpdump 则是⼀个命令⾏的⽹络流量分析⼯具,功能⾮常强⼤,⼀般我们⽤来抓TCP的包

sudo apt-get install tcpdump
#执行命令开始抓包,ctrl+C,停止抓包
tcpdump
# 指定抓取2个数据包
tcpdump -c 2
# 将抓包数据写入指定文件
tcpdump -c 10 -w tcpdump_test.log
# 打印出所有可用的网卡
tcpdump -D
# 监控指定eth0网卡
tcpdump -i eth0
# 抓包时显示时间
tcpdump -tttt
# 抓取指定协议
tcpdump udp
tcpdump icmp 
tcpdump tcp
tcpdump arp# 过滤源、目标
tcpdump src port 8080
tcpdump dst port 80# 抓取指定ip、指定端口数据
tcpdump tcp and src 192.168.1.112 and port 8080

tcpdump截取包默认显示数据包的头部。

  • 普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。
  • 基础格式:时间 数据包类型 源IP 端口/协议 > 目标IP 端口/协议 协议详细信息

在这里插入图片描述

17. TCP、UDP区别

  1. TCP是⼀个⾯向连接的、可靠的(三次握手)、基于字节流的传输层协议。UDP(没有相应建立连接过程)是⼀个⾯向⽆连接的传输层协议。
  2. TCP有状态:TCP 会精准记录哪些数据发送了,哪些数据被对⽅接收了,哪些没有被接收到,⽽且保证数据包按序到达,不允许半点差错。
  3. TCP可控制:意识到丢包了或者⽹络环境不佳,TCP 会根据具体情况调整⾃⼰的⾏为,控制⾃⼰的发送速度或者重发。
  4. TCP更可靠,常用于对数据完整性要求严格:文件传输、电子邮件等。UDP常用于对速度要求更高,对数据完整性要求较低的场景,如音视频传输、在线游戏等。

18. 如要要你来设计QQ,在网络协议上你会如何考虑

登陆采⽤TCP协议和HTTP协议,你和好友之间发送消息,主要采⽤UDP协议,内⽹传⽂件采⽤了P2P技术。
总来的说:

  1. 登陆过程,客户端client 采⽤TCP协议向服务器server发送信息,HTTP协议下载信息。登陆之后,会有⼀个TCP连接来保持在线状态。
  2. 和好友发消息,客户端client采⽤UDP协议,但是需要通过服务器转发。腾讯为了确保传输消息的可靠,采⽤上层协议来保证可靠传输。如果消息发送失败,客户端会提示消息发送失败,并可重新发送。
  3. 如果是在内⽹⾥⾯的两个客户端传⽂件,QQ采⽤的是P2P技术,不需要服务器中转。

参考文章:
https://blog.csdn.net/wwy0324/article/details/109310658
https://blog.csdn.net/weixin_44772566/article/details/136717134

相关文章:

OSI七层模型TCP/IP四层面试高频考点

OSI七层模型&TCP/IP四层&面试高频考点 1 OSI七层模型 1. 物理层:透明地传输比特流 在物理媒介上传输原始比特流,定义了连接主机的硬件设备和传输媒介的规范。它确保比特流能够在网络中准确地传输,例如通过以太网、光纤和无线电波等媒…...

Swagger2及常用校验注释说明

Api(value "后台用户管理") RestController RequestMapping("bossuser") public class BossUserController {ApiOperation(value "测试接口")PostMapping("test")public String testUser(Valid RequestBody TestUser user) {LOG.inf…...

【项目实训】各种反爬策略及爬虫困难点总结

在这里,我总结了本次项目的数据收集过程中遇到的反爬虫策略以及一些爬虫过程中容易出现问题的地方。 user-agent 简单的设置user-agent头部为浏览器即可: 爬取标签中带href属性的网页 对于显示岗位列表的页面,通常检查其源代码就会发现&…...

能量智慧流转:全面升级储能电站的智能网关解决方案

监控系统是电化学储能电站的关键组成部分,储能电站也需要相应的监控系统,通过监控系统对储能设备的状态进行监测,实时感知储能设备的健康状态,控制储能设备的充放电功率和时机等, 一个好的监控系统可以实现储能电站安全…...

【金融研究】6月,对冲基金狂卖美国科技股 短期乐观,长期悲观?“油价最大空头”花旗:明年跌到60

科技股新高的背后,是对冲基金与散户投资者的分歧,对冲基金正在向散户投资者出售创纪录数量的科技/半导体/美股“七姐妹”股票。 对冲基金狂卖美国科技股 在五大明星科技股(苹果、亚马逊、微软、英伟达、谷歌)轮番创下历史新高的…...

GroundingDINO1.5突破开放式物体检测界限:介绍与应用

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...

centos编译内核ko模块

1、make报错 make: * /lib/modules/4.14.0-49.el7a.aarch64/build: 没有那个文件或目录。 停止。 [rootlocalhost 4.14.0-49.el7a.aarch64]# pwd /lib/modules/4.14.0-49.el7a.aarch64 [rootlocalhost 4.14.0-49.el7a.aarch64]# ll 总用量 1744 lrwxrwxrwx. 1 root root …...

Android13 WMS窗口层级树

1,认识层级树 可以通过dumpsys activity containers 看到 WMS 层级树的结构 ACTIVITY MANAGER CONTAINERS (dumpsys activity containers) ROOT typeundefined modefullscreen override-modeundefined requested-bounds[0,0][0,0] bounds[0,0][1440,2960]#0 Displa…...

计算机毕业设计Python+LSTM+Tensorflow股票分析预测 基金分析预测 股票爬虫 大数据毕业设计 深度学习 机器学习 数据可视化 人工智能

基于TensorFlow-LSTM的股票预测系统开题报告 一、研究背景与意义 随着信息技术的飞速发展,股票市场作为现代经济活动的重要组成部分,其价格波动受到广泛关注。投资者们迫切希望通过科学的方法预测股票价格,以优化投资决策,实现利…...

仓库管理系统14--仓库设置

1、添加窗体 <UserControl x:Class"West.StoreMgr.View.StoreView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.openxmlformats.…...

Python 算法交易实验73 QTV200第二步: 数据清洗并写入ClickHouse

说明 先检查一下昨天启动的worker是否正常工作&#xff0c;然后做一些简单的清洗&#xff0c;存入clickhouse。 内容 1 检查数据 from Basefuncs import * # 将一般字符串转为UCS 名称 def dt_str2ucs_blockname(some_dt_str):some_dt_str1 some_dt_str.replace(-,.).re…...

记录:有趣的C#多元运算符 ? : 表达式写法

有时候用 if //...Whatre you she wanna go else if //...do do do else //...and i know something just like this... 感觉代码太多了怎么优雅的、高端的替换&#xff1f; 看个高端的栗子菊&#xff1a; LedCOM["parity"] ledData[4] "N" ? …...

华宽通中标长沙市政务共性能力建设项目,助力智慧政务建设新飞跃

在数字化浪潮的推动下&#xff0c;长沙市政府正积极拥抱智慧城市建设&#xff0c;以科技力量提升政务服务效能。华宽通凭借其卓越的技术实力与丰富的项目经验&#xff0c;成功中标长沙市政务共性能力建设项目&#xff0c;这无疑是对华宽通在智慧城市领域实力的高度认可。 华宽…...

[面试题]计算机网络

[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…...

企业级低代码开发效率变革赋能业务增长

企业级低代码开发已经成为当今软件开发领域的一大趋势&#xff0c;它为企业带来了前所未有的效率变革&#xff0c;从而赋能业务增长。本文将围绕这一主题&#xff0c;深入探讨低代码开发的概念、优势以及如何在企业级应用中实现高效的低代码开发&#xff0c;以助力我国企业实现…...

2024最新总结:1500页金三银四面试宝典 记录35轮大厂面试(都是面试重点)

学习是你这个职业一辈子的事 手里有个 1 2 3&#xff0c;不要想着去怼别人的 4 5 6&#xff0c;因为还有你不知道的 7 8 9。保持空瓶心态从 0 开始才能学到 10 全。 毕竟也是跳槽高峰期&#xff0c;我还是为大家准备了这份1500页金三银四宝典&#xff0c;记录的都是真实大厂面…...

使用Spring Boot和Thymeleaf构建动态Web页面

使用Spring Boot和Thymeleaf构建动态Web页面 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;我们将探讨如何利用Spring Boot和Thymeleaf构建动…...

扫盲之webSocket

介绍 webSocket 是一种协议&#xff0c;设计用于在客户端和服务器之间提供低延迟、全双工、和长期运行的连接。 全双工&#xff1a;通信的两个参与方可以同时发送和接收数据&#xff0c;不需要等待对方的响应或传输完成 websocket就是为了解决实时通信的问题 建立webSocke…...

一些硬件知识(十二)

1、请说明一下滤波磁珠和滤波电感的区别。 因此磁珠通常用于模数地的连接。 磁珠由导线穿过铁氧体组成&#xff0c;直流电阻很小&#xff0c;在低频时阻抗也很小&#xff0c;对直流信号几乎没有影响。 在高频&#xff08;几十兆赫兹以上&#xff09;时磁珠阻抗比较大&#xff0…...

Adobe Acrobat编辑器最新版下载安装 Adobe Acrobat版本齐全!

功能强大&#xff0c;Adobe Acrobat无疑是PDF文档处理领域的翘楚。这款软件集多种PDF文档处理功能于一身&#xff0c;不仅使得用户可以轻松地编辑PDF文档&#xff0c;更能轻松应对转换和合并等多种需求。 在编辑功能上&#xff0c;Adobe Acrobat的表现尤为出色。无论是添加文字…...

k8s如何使用 HPA 实现自动扩展

使用Horizontal Pod Autoscaler (HPA) 实验目标&#xff1a; 学习如何使用 HPA 实现自动扩展。 实验步骤&#xff1a; 创建一个 Deployment&#xff0c;并设置 CPU 或内存的资源请求。创建一个 HPA&#xff0c;设置扩展策略。生成负载&#xff0c;观察 HPA 如何自动扩展 Pod…...

Hi3861 OpenHarmony嵌入式应用入门--0.96寸液晶屏 iic驱动ssd1306

使用iic驱动ssd1306&#xff0c;代码来源hihope\hispark_pegasus\demo\12_ssd1306 本样例提供了一个HarmonyOS IoT硬件接口的SSD1306 OLED屏驱动库&#xff0c;其功能如下&#xff1a; 内置了128*64 bit的内存缓冲区&#xff0c;支持全屏刷新;优化了屏幕刷新速率&#xff0c;…...

代码随想录训练营第二十二天 77组合

第一题&#xff1a; 原题链接&#xff1a;77. 组合 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 经典的回溯模板题&#xff1a; 终止条件&#xff0c;当中间变量用来存储单个结果的大小等于k&#xff0c;则将中间变量存放到结果数组中。 一个for循环横向遍历…...

Unity踩坑记录

1. 如果同时在父物体和子物体上挂载BoxCollider&#xff0c;那么当使用&#xff1a; private void OnTriggerEnter2D(Collider2D collision){if (collision.CompareTag("CardGroup")){_intersectCardGroups.Add(collision.GetComponent<CardGroup>());}} 来判…...

内容安全复习 1 - 信息内容安全概述

文章目录 信息内容安全简介网络空间信息内容安全大模型 人工智能简介 信息内容安全简介 网络空间 网络空间是融合物理域、信息域、认知域和社会域&#xff0c;控制实体行为的信息活动空间。 上图展示了网络空间安全的结构。可以看到将网络空间划分为了网络域和内容域两个部分。…...

【深度学习】python之人工智能应用篇--跨模态生成技术

跨模态生成技术概述 跨模态生成技术是一种将不同模态的数据&#xff08;如文本、图像、音频、视频等&#xff09;进行融合和转换的技术。其目标是通过将一个模态的数据作为输入&#xff0c;生成与之对应的另一个模态的输出。这种技术对于突破单一模态的局限性&#xff0c;提高…...

springboot中获取某个注解下面的某个方法的方法名,参数值等等详细实例

在Spring Boot应用中&#xff0c;获取某个类或方法上的注解及其相关信息&#xff0c;包括方法名称、参数值等&#xff0c;通常涉及到反射和Spring的AOP&#xff08;面向切面编程&#xff09;特性。下面是一个示例&#xff0c;展示如何利用Spring AOP的Around注解来拦截带有特定…...

代码随想录——跳跃游戏Ⅱ(Leetcode 45)

题目链接 贪心 class Solution {public int jump(int[] nums) {if(nums.length 1){return 0;}int count 0;// 当前覆盖最远距离下标int curDistance 0;// 下一步覆盖距离最远下标int nextDistance 0;for(int i 0; i < nums.length; i){nextDistance Math.max(nums[…...

从0-1搭建一个web项目(package.json)详解

本章分析package.json文件详解 本文主要对packge.json配置子文件详解 ObJack-Admin一款基于 Vue3.3、TypeScript、Vite3、Pinia、Element-Plus 开源的后台管理框架。在一定程度上节省您的开发效率。另外本项目还封装了一些常用组件、hooks、指令、动态路由、按钮级别权限控制等…...

图解ReentrantLock的基石AQS-独占锁的获取与释放

大家好&#xff0c;我是呼噜噜&#xff0c;我们之前聊过Java中以互斥同步的方式保证线程安全&#xff1a;Sychronized&#xff0c;这次我们来再聊聊另一种互斥同步的方式Lock&#xff0c;本文会介绍ReentrantLock及其它的基石AQS的源码解析&#xff0c;一个非常重要的同步框架 …...

Perl语言入门学习读物

1. PERL 是什么? Perl 最初的设计者为Larry Wall&#xff0c;Perl借取了C、sed、awk、shell scripting以及很多其他程序语言的特性。Perl一般被称为“实用报表提取语言”(PracticalExtraction andReportLanguage)&#xff0c;有时也被称做“病态折中垃圾列表器”(Pathologica…...

电脑浏览器问题

网络连接正常&#xff0c;但是浏览器就是打不开网页&#xff0c;显示未连接什么的。 搞了半天&#xff0c;不是代理服务器问题。 也不是端口问题。 也不是软件版本问题。 竟然是浏览器插件的问题&#xff0c;插件禁用&#xff0c;奇迹般的好了。 参考&#xff1a; 电脑有网…...

[Docker] Ubuntu安装Home Assistant

本文主要记载一些Ubuntu安装Home Assistant的细节,方便后面重装。 1. 安装Docker 安装依赖 $ sudo apt-get install \apt-transport-https \ca-certificates \curl \gnupg-agent \software-properties-common添加 Docker 官方 GPG 密钥 $ curl -fsSL https://mirrors.ustc…...

浅谈请求中数据转换

目录 1. 前端 JS 数据类型2. JSON 数据类型&#xff08;数据传输格式&#xff09;3. 后端 Java 数据类型4. 后端序列化框架 Fastjson && Jackson 转换4.1. JSON 转换 Java4.2. Java 转换 JSON 1. 前端 JS 数据类型 数据类型示例Stringvar str 张三Number (数字)var a…...

Flutter学习:从搭建环境到运行

一、开发环境的搭建 本文所示内容都是在Windows系统下进行的。 1、下载 Flutter SDK Flutter 官网&#xff08;https://docs.flutter.cn/release/archive?tabwindows&#xff09; 或者通过 git clone -b master https://github.com/flutter/flutter.git 下载 2、配置环境…...

sheng的学习笔记-AI-聚类(Clustering)

ai目录 sheng的学习笔记-AI目录-CSDN博客 基础知识 什么是聚类 在“无监督学习”(unsupervised learning)中&#xff0c;训练样本的标记信息是未知的&#xff0c;目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律&#xff0c;为进一步的数据分析提供基础。此类学…...

从0构建一个录制UI测试工具

很多UI自动化测试工具都具备录制UI自动化测试的能力&#xff0c;例如playwright&#xff0c;可以通过playwright vscode插件完成录制&#xff0c;如下图所示&#xff0c;当选择录制脚本时&#xff0c;会打开一个浏览器&#xff0c;在浏览器中输入被测应用url&#xff0c;用户在…...

代码随想录算法训练营第五十一天|LeetCode72 编辑距离、LeetCode647 回文子串、LeetCode516 最长回文子序列、动态规划的小总结

题1&#xff1a; 指路&#xff1a;72. 编辑距离 - 力扣&#xff08;LeetCode&#xff09; 思路与代码&#xff1a; 关于dp数组的定义&#xff0c;我们定义一个二维数组dp[i][j]&#xff0c;其含义为以i-1为结尾的字符串word1和以j-1为结尾的字符串word2&#xff0c;最近编辑…...

sessionStorage 能在多个标签页之间共享数据吗?

&#x1f9d1;‍&#x1f4bb; 写在开头 点赞 收藏 学会&#x1f923;&#x1f923;&#x1f923; 最近&#xff0c;我的一个朋友在面试中被一个关于 sessionStorage 的问题难住了。我们来聊聊这个话题。 sessionStorage 能在多个标签页之间共享数据吗&#xff1f; 在回答…...

鸿蒙期末项目(完结)

两天仅睡3个小时的努力奋斗之下&#xff0c;终于写完了这个无比拉跨的项目&#xff0c;最后一篇博客总体展示一下本项目运行效果兼测试&#xff0c;随后就是答辩被同学乱沙&#xff08;悲 刚打开软件&#xff0c;会看到如下欢迎界面&#xff0c;介绍本app的功能和优点 随后我们…...

【Linux】对共享库加载问题的深入理解——基本原理概述

原理概述 【linux】详解——库-CSDN博客 共享库被加载后&#xff0c;系统会为该共享库创建一个结构&#xff0c;这个结构体中的字段描述了库的各种属性。在内存中可能会加载很多库&#xff0c;每一个库都用一个结构体描述。把这些结构体用一些数据结构管理起来&#xff0c;系…...

easyui的topjui前端框架使用指南

博主今天也是第一次点开easyui的商业搜权页面&#xff0c;之前虽然一直在使用easyui前端框架&#xff08;easyui是我最喜欢的前端ui框架&#xff09;&#xff0c;但是都是使用的免费版。 然后就发现了easyui的开发公司居然基于easyui开发出了一个新的前端框架&#xff0c;于是我…...

Java中的程序异常处理介绍

一、异常处理机制 Java提供了更加优秀的解决办法&#xff1a;异常处理机制。 异常处理机制能让程序在异常发生时&#xff0c;按照代码的预先设定的异常处理逻辑&#xff0c;针对性地处理异常&#xff0c;让程序尽最大可能恢复正常并继续执行&#xff0c;且保持代码的清晰。 Ja…...

Gradle学习-3 Gradle插件

1、Gredle插件是什么 Gradle插件是用于扩展和增强Gradle构建系统的功能模块通过插件&#xff0c;Gradle可以执行各种构建任务&#xff0c;如编译代码、打包应用、运行测试等 Gradle插件主要分为&#xff1a;二进制插件、脚本插件 二进制插件二进制插件是预编译的、可以复用的…...

百度文心智能体,创建属于自己的智能体应用

百度文心智能体平台为你开启。百度文心智能体平台&#xff0c;创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台&#xff0c;集成了先进的自然语言处理技术和人工智能技术&#xff0c;可以用来创建属于自己的智能体应用&#xff0c;访问官网链接&#xff1…...

【软件测试】白盒测试与接口测试详解

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是白盒测试 白盒测试是一种测试策略&#xff0c;这种策略允许我们检查程序的内部结构&a…...

【SpringBoot Web框架实战教程】03 SpingBoot 获取 http 请求参数

不积跬步&#xff0c;无以至千里&#xff1b;不积小流&#xff0c;无以成江海。大家好&#xff0c;我是闲鹤&#xff0c;微信&#xff1a;xxh_1459&#xff0c;十多年开发、架构经验&#xff0c;先后在华为、迅雷服役过&#xff0c;也在高校从事教学3年&#xff1b;目前已创业了…...

Mac14.1.2 M1芯片免费读写ntfs硬盘-亲测有效,免费!!!

1. 安装homebrew 打开终端&#xff0c;使用以下命令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 根据提示逐步完成即可&#xff0c;镜像选择我这里都是保持1的选项。 2. 重启终端 安装完成homebrew后&#xff0c;需…...

手写SpringMVC之ApplicationContextListener

什么是Spring MVC&#xff1f; Spring Web MVC是基于Servlet API构建的原始Web框架&#xff0c;从一开始就包含在Spring Framework中。正式名称“Spring Web MVC”来自其源模块的名称&#xff08; spring-webmvc &#xff09;&#xff0c;但它通常被称为“Spring MVC”。 手写…...

Paimon 在汽车之家的业务实践

汽车之家基于Paimon的实践 摘要&#xff1a;本文分享自汽车之家的王刚、范文、李乾⽼师。介绍了汽车之家基于 Paimon 的一些实践&#xff0c;和一些背景。内容主要为以下四部分&#xff1a; 一、背景 二、业务实践 三、paimon 优化实践 四、未来规划 一、背景 在使用Paimon之前…...