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

news2024/11/24 12:29:05

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1871165.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

等保测评初级简答题试题

基本要求,在应用安全层面的访问控制要求中,三级系统较二级系统增加的措施有哪些? 答:三级比二级增加的要求项有: 应提供对重要信息资源设置敏感标记的功能; 应按照安全策略严格控制用户对有敏感标记重要…

MySQL高级-索引-使用规则-单列索引联合索引

文章目录 1、单列索引2、联合索引3、查看表索引4、创建 name 和 phone 索引5、查询 phone17799990010 and name韩信6、执行计划 phone17799990010 and name韩信7、创建联合唯一索引 idx_user_phone_name8、再次执行计划 phone17799990010 and name韩信9、使用了USE INDEX提示来…

为什么叫云计算?云计算的优势有哪些

说起云计算大家并不会感到陌生,那么为什么叫云计算?云计算技术的引入通常会使企业的信息技术应用更高效、更可靠、更安全。云计算支持用户在任意位置、使用各种终端获取应用服务。使用了数据多副本容错、计算节点同构可互换等措施来保障服务的高可靠性&a…

从RLHF到DPO再到TDPO,大模型对齐算法已经是「token-level」

在人工智能领域的发展过程中,对大语言模型(LLM)的控制与指导始终是核心挑战之一,旨在确保这些模型既强大又安全地服务于人类社会。早期的努力集中于通过人类反馈的强化学习方法(RLHF)来管理这些模型&#x…

mmdetection2.28修改backbone不使用预训练参数、从头训练

背景 最近需要测试一下在backbone部分如果不使用预训练参数的话,模型需要多少轮才能收敛所使用的backbone是mmcls.ConvNeXtmmdetection版本为2.28.2,mmcls版本为0.25.0 修改流程 最简单的方法,直接去mmcls的model zoo里找到对应backbone的…

新能源汽车CAN总线故障定位与干扰排除的几个方法

CAN总线是目前最受欢迎的现场总线之一,在新能源车中有广泛应用。新能源车的CAN总线故障和隐患将影响驾驶体验甚至行车安全,如何进行CAN总线故障定位及干扰排除呢? 目前,国内机动车保有量已经突破三亿大关。由于大量的燃油车带来严峻的环境问题,因此全面禁售燃油车的日程在…

ResNet-50算法

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、理论知识储备 1.CNN算法发展 AlexNet是2012年ImageNet竞赛中,由Alex Krizhevsky和Ilya Sutskever提出,在2012年ImageNet竞赛中&a…

防火墙双双机热备

设备直路部署,上下行连接交换机 如 图所示,DeviceA和DeviceB的业务接口都工作在三层,上下行分别连接二层交换机。上行交换机连接运营商的接入点,运营商为企业分配的IP地址为1.1.1.3和1.1.1.4。现在希望DeviceA和DeviceB以负载分担…

鸿蒙 雷达图 绘制 人生四运图

let radius = Math.min(this.context.width, this.context.height) / 2 - 20;let centerX = this.context.width / 2;let centerY = this.context.height / 2;// 绘制圆环this.context.strokeStyle = #E4E4E4;const numRings = 5;const ringInterval = 1;for (let i = 0; i <…

Zookeeper:基于Zookeeper的分布式锁

一、Zookeeper分布式锁原理 二、Zookeeper JavaAPI操作 1、Curator介绍 Curator是Apache Zookeeper的Java客户端。常见的Zookeeper Java API&#xff1a; 原生Java API。ZkClient。Curator。 Curator项目目标是简化Zookeeper客户端的使用。Curator最初是Netfix研发的&#xf…

C++学习笔记---串口通信

串口基础知识 DB9针的RS-232串口&#xff0c;分别是公头、母头&#xff0c;这两种串口可以连接在一起。DB9针的串口信号脚编号及信号脚的具体含义如下 串口通信可以使用3根线完成&#xff0c;对应信号脚分别是&#xff1a;2接收、3发送、5地线。对此&#xff0c;有个简单的记法…

你知道大数据信用分低需要如何改善吗?

在当今社会&#xff0c;大数据信用分已经成为个人信用评估的重要指标之一。然而&#xff0c;有时候我们会发现自己的大数据信用分较低&#xff0c;这可能会对我们的信用状况产生负面影响。那么&#xff0c;如何改善自己的大数据信用分呢?本文将从信用分低的原因进行分析&#…

python pyautogui.position实时输出坐标

import pyautogui import timewhile True:# 获取鼠标当前坐标x, y pyautogui.position()# 打印坐标print(f"当前坐标&#xff1a;({x}, {y})")# 暂停1秒time.sleep(1) 输出实时鼠标位置坐标

6.26.4.1 基于交叉视角变换的未配准医学图像多视角分析

1. 介绍 许多医学成像任务使用来自多个视图或模式的数据&#xff0c;但很难有效地将这些数据结合起来。虽然多模态图像通常可以在神经网络中作为多个输入通道进行配准和处理&#xff0c;但来自不同视图的图像可能难以正确配准(例如&#xff0c;[2])。因此&#xff0c;大多数多视…

【集成学习】基于python的stacking回归预测

1 回归模型 当涉及到线性回归、岭回归、套索回归、决策树回归、随机森林回归、梯度提升回归和支持向量机回归模型的原理时&#xff0c;我们可以按照以下方式清晰地解释它们&#xff1a; 1.1 线性回归 线性回归是利用数理统计中的回归分析来确定两种或两种以上变量间相互依赖的…

说一说ABAP CDS View的发展历史与特性

1. 背景 随着SAP Fiori应用程序的兴起&#xff0c;SAP领域的小伙伴接触和使用ABAP CDS View的机会也是越来越多。今天&#xff0c;让我们花些时间&#xff0c;一起在了解下这项技术的设计初衷和发展历史。 2. 设计初衷 说起ABAP CDS View&#xff0c;就不得不提及SAP HANA。…

从零开始了解GPT-4o模型:它是如何工作的?

人工智能&#xff08;AI&#xff09;技术正以惊人的速度发展&#xff0c;其中最引人注目的是OpenAI发布的GPT-4o模型。作为GPT系列的新成员&#xff0c;GPT-4o在多模态输入处理和响应速度上取得了重大进展。本文将深入探讨GPT-4o的工作原理&#xff0c;帮助您全面了解这一尖端A…

2、数据库模型图、er图

关系 user和administarators是多对一的关系 user和order是一对多的关系 shipped和order是多对一的关系 order和books是多对多的关系 leavewords和order是一对一的关系 stock和books是一对多的关系 Chens 数据库表示法——ER图 Crows Foot数据库表示法——数据库模型图 Navicat表…

【实战教程】如何使用JMeter来轻松测试WebSocket接口?

1、websocket接口原理 打开网页&#xff1a;从http协议&#xff0c;升级到websocket协议&#xff0c;请求建立websocket连接服务器返回建立成功成功客户端向服务端发送匹配请求服务端选择一个客服上线服务器返回客服id客户端向服务器发送消息服务器推送消息给指定的客服服务器…

经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2)

经典神经网络(13)GPT-1、GPT-2原理及nanoGPT源码分析(GPT-2) 2022 年 11 月&#xff0c;ChatGPT 成功面世&#xff0c;成为历史上用户增长最快的消费者应用。与 Google、FaceBook等公司不同&#xff0c;OpenAI 从初代模型 GPT-1 开始&#xff0c;始终贯彻只有解码器&#xff0…