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

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

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

相关文章

什么是有效的电子签名?PDF电子签名怎样具备法律效力?

电子签名逐渐成为商务文书和法律文件中不可或缺的一部分。《电子签名法》自2005年4月1日起施行,这一立法是中国信息化法律的重要里程碑,为电子签名应用奠定了法律基础。电子签名不仅仅是一种技术手段,更是一种法律认可的签名形式。那么究竟什…

Python私教张大鹏 PyWebIO通过事件回调实现表格的编辑和删除功能

从上面可以看出,PyWebIO把交互分成了输入和输出两部分:输入函数为阻塞式调用,会在用户浏览器上显示一个表单,在用户提交表单之前输入函数将不会返回;输出函数将内容实时输出至浏览器。这种交互方式和控制台程序是一致的…

学习TTS遇到的问题2 什么是TCN模型

学习TTS遇到的问题2 什么是TCN模型 什么是TCN模型怎么理解 TCN中的 dilation?什么是 Dilation具体例子数学表达作用例子代码示例 什么是TCN模型 https://juejin.cn/post/7262269863343079479 https://blog.csdn.net/weixin_57726558/article/details/132163074 由下…

出手便是王炸,曙光存储将高端存储推向新高度

二十年磨一剑,今朝试锋芒。 近日,曙光存储重磅发布全球首个亿级IOPS集中式全闪存储FlashNexus,正式宣告进入高端存储市场。 作为存储产业皇冠上的明珠,高端存储一向以技术难度大、市场准入门槛高和竞争格局稳定著称,…

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

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

Centos7源码方式安装sqle及开发相关

官方文档-源码安装 操作系统:centos:7.9,everything (DVD版应该也可以) (在ubuntu22.04装了两天之后乖乖开了一个新Centos7虚拟机) 镜像:清华大学开源软件镜像站 centos/7.9.2009 安装git sudo yum update -y sudo yum install -y git git --version安…

数据结构与算法笔记:高级篇 - B+树:MySql数据库索引是如何实现的?

概述 作为一名软件开发工程师,你对数据库肯定再熟悉不过了。MySQL 作为主流的数据库存储系统,它在我们的业务开发中,有着举足轻重的地位。在工作中,为了加速数据库中数据的查找速度,我们常用的处理思路是,…

01.Ambari自定义服务开发-项目初始化

文章目录 基础环境在PyCharm中初始化项目配置项目相关依赖在PyCharm中导入依赖 基础环境 PyCharmPython 2.7已经安装完成的Ambari服务端 在PyCharm中初始化项目 项目名称就是我们要安装服务的名称,要求名称为全大写,如:DORIS创建Python2.7…

龙迅LT8711V TYPE-CDP 1.2转VGA芯片,内置MCU,成熟批量产品

龙迅LT8711V描述: LT8711V是一种高性能的Type-C/DP1.2到VGA转换器,设计用于连接USB Type-C源或DP1.2源到VGA接收器。LT8711V集成了一个DP1.2兼容的接收器,和一个高速三通道视频DAC。此外,还包括两个CC控制器,用于CC通…

图像大小调整(缩放)

尺寸调整前尺寸调整前 1、背景介绍 在深度学习中,将图像调整到固定尺寸(如28x28像素)的操作是非常常见的,尤其是在处理诸如图像分类、物体检测和图像分割等任务时。这种操作有几个重要原因: 标准化输入:许…

【可控图像生成系列论文(五)】ControlNet 和 IP-Adapter 之间的区别有哪些?

系列文章目录 【可控图像生成系列论文(一)】 简要介绍了 MimicBrush 的整体流程和方法;【可控图像生成系列论文(二)】 就MimicBrush 的具体模型结构、训练数据和纹理迁移进行了更详细的介绍。【可控图像生成系列论文&…

【漏洞复现】锐捷统一上网行为管理与审计系统——远程命令执行漏洞

声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 锐捷统一上网行为管理与审计系统naborTable/static_convert.php…

Linux系统编程(七)进程间通信IPC

进程间通讯的7种方式_进程间通信的几种方法-CSDN博客 管道 pipe(命名管道和匿名管道);信号 signal;共享内存;消息队列;信号量 semaphore;套接字 socket; 1. 管道 内核提供&#x…

Arduino平台软硬件原理及使用——SR04超声波传感器的使用

文章目录: 一、超声波传感器工作原理 二、SR04超声波库的使用 三、SR04超声波传感器在Arduino中的使用 一、超声波传感器工作原理 如上图所示:HCSR04超声波传感器拥有4个针脚,除了VCC接正极、GND接负极外,还有两个引脚“Trig”及“…

Linux线程互斥锁

目录 🚩看现象,说原因 🚩解决方案 🚩互斥锁 🚀关于互斥锁的理解 🚀关于原子性的理解 🚀如何理解加锁和解锁是原子的 🚩对互斥锁的简单封装 引言 大家有任何疑问,可…

CCSP自考攻略+经验总结

备考攻略 备考攻略准备阶段通读阶段精度阶段总复习阶段刷题阶段命运审判 写到最后 备考攻略 趁着对ssp知识点的理解还在,开始ccsp的考证之路,文章结构还是按照cissp备考篇的结构梳理。本次备考和cissp的离职在家备考不同,ccsp是在职利用非工…

如何用亚马逊合作伙伴网络快速上线跨境电商

目前跨境电商已成为行业发展主流,如何快速、低成本打造品牌海外独立站和智能客服营销中心、构建全链路跨境电商体系是出海电商商家都会遇到的难题。亚马逊云科技凭借与亚马逊电商平台易于集成的先天优势成为首选的电商解决方案平台。本文介绍了如何用亚马逊云科技平…

Elasticsearch8.x聚合查询全面指南:从理论到实战

聚合查询的概念 聚合查询(Aggregation Queries)是Elasticsearch中用于数据汇总和分析的查询类型。它不同于普通的查询,而是用于执行各种聚合操作,如计数、求和、平均值、最小值、最大值、分组等。 聚合查询的分类 分桶聚合&…

centos7 安装单机MongoDB

centos7安装单机 yum 安装 1、配置yum源 vim /etc/yum.repos.d/mongodb.repo [mongodb-org-7.0] nameMongoDB Repository baseurlhttps://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/ gpgcheck1 enabled1 gpgkeyhttps://www.mongodb.org/static/pgp…

未来已来,如何打造智慧养殖场?

近年来,国家出台了一系列扶持政策,以促进养殖行业高质量发展,推动行业转型升级。在国家政策和市场需求的双重驱动下,养殖行业正迎来前所未有的发展机遇。智慧养殖以其高效、智能和可持续的特点,正逐步取代传统养殖方式…