【前端面试】在TCP/IP四层模型中,TCP和UDP是传输层中两个非常重要的协议

例题1

在TCP/IP四层模型中,TCP和UDP是传输层中两个非常重要的协议,下列选项中,关于这两种协议的区别描述错误的是
A .TCP提供的是面向连接的、可靠的端到端通信机制
B .为了确保数据的可靠传输,TCP采用了确认和重发机制
C .允许丢包的前提下, TCP相比UDP传输效率更高
D .UDP相对数据传送可靠性要求没有TCP那么严格

解析

A.TCP 是一种面向连接的协议,它确保通信双方在传输数据前,必须先建立连接,且提供了可靠的传输机制,通过三次握手建立连接
B.TCP 为了确保数据的可靠性,会进行数据包的确认(ACK)和在必要时进行重发,从而保证传输的可靠性
C.TCP 的设计目标是确保数据的可靠性,因此其传输效率往往低于不提供确认、重发和流量控制的 UDP。在允许丢包的情况下,UDP 的传输效率明显高于 TCP,因为 UDP 不需要建立连接,也不需要处理确认或重发
D.UDP 是一种无连接的协议,它不提供保证数据传送的可靠性(不确认、不重发),因此相对而言,它的可靠性不如 TCP 严格。

例题2

下列关于TCP和UDP说法错误的是()
A.UDP是面向字节流的协议
B.TCP的头部消息较UDP来说更全面
C.TCP是端对端的不支持广播、多播
D.TCP可以用在远程登陆方面,UDP可以用在语音通话方面

解析

A. UDP(User Datagram Protocol)是面向报文的协议,而不是面向字节流的协议。每个UDP数据包是一个独立的完整报文,不需要像TCP那样组装或拆分字节流。
TCP 才是面向字节流的协议,TCP通过将数据流分段进行传输,并确保顺序和完整性。
B. TCP头部比UDP头部更复杂,TCP需要维护连接、顺序、确认、流量控制等信息,而UDP只需要源端口、目标端口、长度和校验和等基本信息。因此,TCP头部比UDP头部更全面。
C. TCP是一个面向连接端对端传输协议,不支持广播和多播。广播和多播属于UDP常用的传输方式,UDP不需要建立连接,能够快速将数据发送给多个接收方。
D. TCP是一种可靠的传输协议,常用于需要数据完整性和确认的场景,例如远程登录(如SSH、Telnet)。UDP不提供可靠性,但它的低延迟特性使其非常适合实时应用场景,比如语音通话、视频会议等。

补充

TCP/IP四层模型

TCP/IP四层模型 Transmission Control Protocol/Internet Protocol model 是网络协议栈的一个抽象模型,用来定义不同协议之间如何相互通信。它将网络通信分为四个层次,每层负责不同的功能,各层之间通过接口相互作用

  1. 链路层(Link Layer):这一层负责物理连接和数据链路的管理,处理具体硬件传输。它包括以太网、Wi-Fi等协议,负责将数据帧传送到相邻节点。
  2. 网络层(Internet Layer):负责跨网络的路由和寻址,最主要的协议是 IP(Internet Protocol)。它将数据从源节点路由到目的节点,并提供网络中唯一的地址,即 IP 地址。
  3. 传输层(Transport Layer):提供进程间的端到端数据传输。常见协议有 TCP(Transmission Control Protocol,传输控制协议) 和 UDP(User Datagram Protocol,用户数据报协议)。TCP 提供面向连接、可靠的传输,而 UDP 提供无连接、快速的传输。
  4. 应用层(Application Layer):负责与用户的直接交互,支持网络应用。常见协议有 HTTP(Hypertext Transfer Protocol,超文本传输协议)、FTP(File Transfer Protocol,文件传输协议)、SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)等,具体定义了应用如何使用底层协议传输数据。

说白了,TCP/IP四层模型就像是互联网的交通规则,它把网络通信的工作分为四个步骤或“层”,每层负责处理不同类型的任务。可以用寄快递来做个类比:

  1. 链路层:相当于快递员帮你把包裹送到最近的快递站,这一层确保你的数据能从一个设备传输到另一个相邻的设备(比如网线或无线网络传递数据)。
  2. 网络层:像是给包裹贴上了一个地址标签,确保快递能够通过不同的快递站点,找到正确的目的地。这一层负责寻找最短的路线,并通过“地址”(IP地址)来识别每一台计算机。
  3. 传输层:确保包裹安全到达并确认收货。比如说,TCP 会反复确认你的包裹到了没,丢了的话就再发一个。而 UDP 比较随意,不会一直确认包裹是否收到,但它速度快、效率高,适合不需要精确确认的场景(像视频直播,丢几帧也不影响整体体验)。
  4. 应用层:这就是你真正使用互联网的部分了,比如你在网页上浏览信息、发送邮件、看视频,这些具体的操作就是应用层的工作。

总结

TCP/IP四层模型是互联网通信的基础协议栈,将通信过程划分为链路网络传输应用四个层次,分别处理物理传输路由寻址端到端传输用户应用
TCP/IP四层模型像寄快递一样,分成四个步骤,从打包、贴地址、发送,到最后交到收件人手中。它就是让你在互联网上顺利“寄”数据的交通规则。

TCP的三次握手与四次挥手

  1. TCP的三次握手(Three-Way Handshake)
    三次握手是建立TCP连接的过程,确保客户端和服务器双方都准备好进行数据传输。
  • 第一次握手(SYN):客户端发送一个带有SYN标志的数据包,表示请求建立连接,并发送初始序列号(Seq = x)。
    客户端说“我要和你建立连接”(发送SYN包)。
  • 第二次握手(SYN-ACK):服务器收到SYN后,回复一个带有SYN和ACK标志的数据包,确认收到客户端的SYN,并发送自己的初始序列号(Seq = y,Ack = x+1)。
    服务器回应“我收到了请求,并且我也准备好了,你呢?”(发送SYN+ACK包)。
  • 第三次握手(ACK):客户端收到服务器的SYN-ACK后,发送一个ACK包,确认服务器的SYN(Ack = y+1)。
    客户端回复“我也准备好了,现在可以正式通信了”(发送ACK包)。
  1. TCP的四次挥手(Four-Way Handshake)
  • 第一次挥手(FIN): 一方(如客户端)发送一个FIN包,表示数据发送完毕,准备关闭连接。
    客户端说“我这边数据传完了,准备断开”(发送FIN包)。
  • 第二次挥手(ACK): 另一方(如服务器)确认收到FIN,发送一个ACK包。
    服务器回应“我知道你要断开了,但我还有点事没做完”(发送ACK包)。
  • 第三次挥手(FIN): 服务器发送一个FIN包,表示数据也发送完毕。
    服务器忙完了,说“我也准备好了,断开吧”(发送FIN包)。
  • 第四次挥手(ACK): 客户端确认收到服务器的FIN,发送一个ACK包,连接关闭。
    客户端回应“我收到了,再见”(发送ACK包)。

示例题

为什么需要三次握手而不是两次?

三次握手的目的是为了确保连接的可靠性,防止因旧的连接请求导致混乱。两次握手无法保证客户端和服务器都能明确对方的接收能力。三次握手的第三步(ACK)确保客户端知道服务器已经接收并同意建立连接,从而避免网络中的冗余数据包引发的问题。
说白了,两次握手像是你敲门(请求连接)对方回应你开门了,但你并不确定他真的准备好了。三次握手就是你敲门,对方说“进来吧”,你再确认“好的,我准备进来了”。三次确认才能保证大家都在同一节奏上,不会出现信息错乱。

如果在三次握手过程中某一步失败,会发生什么?

如果三次握手的任何一步失败,比如丢包或超时,TCP会触发重传机制,重新发送未确认的数据包。如果尝试多次后仍未成功,连接建立将被放弃,客户端和服务器不会建立TCP连接。
说白了,如果你敲门时对方没听见,或者他回应你时你没听见,双方都会再试几次。如果一直没人回应,那这门就不开了,大家各自回去,不再尝试建立连接。

为什么需要四次挥手而不是三次?

TCP连接的关闭是一个双向的过程,发送和接收数据的两方需要分别确认传输完毕。四次挥手确保双方都完成了自己的数据发送任务。由于双方可能有不同的数据处理和清理需求,所以必须分开确认各自的关闭状态。如果用三次挥手,会导致其中一方未能完全释放资源,造成潜在的资源浪费或错误。
说白了,断开连接就像你和朋友告别时,不光你要说“再见”,朋友也要说“我也准备走了”。四次挥手就是确认你们双方都没有事情要再做,真正可以放心离开。如果只用三次挥手,可能会导致一方还没准备好离开,结果另一方已经走了。

四次挥手过程中各个状态的变化
  1. 第一次挥手(FIN_WAIT_1): 客户端主动关闭连接,发送FIN,进入FIN_WAIT_1状态,等待服务器确认。
  2. 第二次挥手(FIN_WAIT_2): 服务器收到FIN,发送ACK,客户端进入FIN_WAIT_2状态,等待服务器的FIN。
  3. 第三次挥手(CLOSE_WAIT → LAST_ACK): 服务器处理完自己的数据后,发送FIN,进入LAST_ACK状态。
  4. 第四次挥手(TIME_WAIT → CLOSED): 客户端收到FIN,发送ACK后进入TIME_WAIT状态,等待一定时间后关闭连接。

说白了,四次挥手就像两个人分别挂电话:

  1. 你先说“我这边要挂了”(第一次挥手)。
  2. 对方说“好的,我知道了”(第二次挥手)。
  3. 然后对方也说“我这边也挂了”(第三次挥手)。
  4. 你说“好的,挂吧”,但等个几秒,确认通话真的结束了,再挂断电话(第四次挥手)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值