那年我双手插兜,不知道面市场上什么叫对手
你想要的面试题这儿都有
重视小小不迷路

1 请你描绘TCP三次握手与四次挥手的进程与意义

这道题想调查什么?

这个问题归于网络体系中的根底理论知识,关于这种类型的问题假如没有一个清晰的知道,那会让你在把握一些“高大上“技能的时没有支撑,也难以把整体框架理顺。比方Http、RTSP 、RTMP等被广泛运用的应用层协议都是根据TCP来完结的。所以被问到这个问题并不稀罕。

调查的知识点

网络的根底知识

考生怎么答复

TCP/IP协议定义了计算机在网络中怎么发送数据、数据格式怎么定义、宣布音讯后在网络中怎么寻址找到方针计算机,最终方针计算机又怎么检验收到音讯的正确性、对数据拆解最终得到音讯内容的一套处理规范。

有了这些规范后生产供给TCP/IP服务的软件商家就有了一套一致的规范,只要遵从这个规范去完结自己的软件功用。

三次握手

在进行事务通讯前,必须树立好衔接,而TCP/IP衔接的树立需求通过三次握手的进程。其进程如下图:

【Android面试题】2023最新面试专题:网络编程(一)

  1. 第一次握手:树立衔接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状况,等候服务器承认;SYN:同步序列编号(Synchronize Sequence Numbers)。
  2. 第2次握手:服务器收到syn包,必须承认客户的SYN(ack=j+1),一起自己也发送一个SYN包(syn=k),即SYN+ACK包,此刻服务器进入SYN_RECV状况;
  3. 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送承认包ACK(ack=k+1),此包发送结束,客户端和服务器进入ESTABLISHED(TCP衔接成功)状况,完结三次握手。
为什么要三次握手?
全双工通讯

三次握手是承认通讯两边通讯线路是全双工的最小次数,全双工通讯是指:通讯的两边能够一起发送和接纳信息 。

正如两边电话通话:

A:喂,能听到吗?

B:能够

此刻假如A没有反应,B无法承认A是否能够接纳数据。

确保牢靠性

另外TCP是牢靠传输协议,确保通讯的牢靠性的手段中包含序列号与承认应对机制。

  • 序列号:TCP传输时将每个字节的数据都进行了编号,确保数据的有序性与牢靠性(当接纳到的数据总少了某个序号的数据时,能立刻知道 );
  • 承认应对:TCP传输的进程中,每次接纳方收到数据后,都会对传输方进行承认应对。也便是发送ACK报文。这个ACK报文傍边带有对应的承认序列号,告知发送方,接纳到了哪些数据,下一次的数据从哪里发。

而三次握手的一起也能承认通讯两边的初始序列号。

  1. C –> S SYN my sequence number is X
  2. S <– C ACK your sequence number is X my sequence number is Y
  3. C –> S ACK your sequence number is Y

假如C 未承认收到 B 的。也便是说,只要 C 发送给 S 的包都是牢靠的, 而 S 发送给 C 的则不是,所以这不是牢靠的衔接。

防止资源糟蹋

除此之外,第一次握手:客户端发送衔接恳求音讯到服务端,服务端收到信息后需求进行第2次握手:应对告知客户端现已接纳衔接恳求。而服务端发送出去的应对音讯,需求等客户端第三次握手响应后,才干承认此次衔接为有用衔接。

若客户端宣布去的第一个衔接恳求由于某些原因在网络节点中滞留了导致推迟,直到客户端抛弃衔接后的某个时间点才抵达服务端,这是一个早已失效的报文,可是此刻服务端仍然以为这是客户端的树立衔接恳求第一次握手,于是服务端第2次握手回应了客户端。假如没有第三次握手,那么到这儿,衔接就树立了,可是此刻客户端并没有任何数据要发送,会让服务端空等,构成资源糟蹋。

四次挥手

在完结数据交互之后,假如挑选封闭衔接,以回收资源,则完结四次挥手来进行“平和分手”。进程如下图:

【Android面试题】2023最新面试专题:网络编程(一)

  1. 第一次挥手:自动封闭方发送第一个包,其间FIN标志位为1,发送次序号seq为X。
  2. 第2次挥手:被迫封闭方收到FIN包后发送第二个包,其间发送次序号seq为Z,接纳次序号ack为X+1。
  3. 第三次挥手:被迫封闭方再发送第三个包,其间FIN标志位为1,发送次序号seq为Y,接纳次序号ack为X。
  4. 第四次挥手:自动封闭方发送第四个包,其间发送次序号为X,接纳次序号为Y。至此,完结四次挥手。
为什么断开衔接需求四次挥手?

三次握手是由于树立衔接时,ACK和SYN能够放在一个报文里来发送。而封闭衔接时,被迫封闭方或许还需求发送一些数据后,再发送FIN报文表示同意现在能够封闭衔接了,所以它这儿的ACK报文和FIN报文大都情况下都是分开发送的。因而断开衔接需求4次。


2 谈谈你对TCP与UDP的区别是什么的了解(腾讯)

这道题想调查什么?

在平常的开发中大大都情况下都是运用Http/Https协议完结与服务端的网络交互,而Http底层是根据TCP的牢靠衔接。而TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP。把握二者的区别能够让我们在不同的场景中合理的挑选最优的传输协议。

调查的知识点

网络的根底知识

考生怎么答复

TCP/IP 是互联网相关的各类协议簇的总称,比方:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都归于 TCP/IP 协议簇 。之所以命名为TCP/IP协议,由于TCP、IP协议是两个很重要的协议,就用他两命名了。

UDP

UDP协议全称是用户数据报协议(User Data Protocol),在网络中它与TCP协议相同用于处理数据包,是一种无衔接的协议。在OSI模型中,在第四层—传输层,处于IP协议的上一层。UDP有不供给数据包分组、拼装和不能对数据包进行排序的缺陷,也便是说,当报文发送之后,是无法得知其是否安全完好抵达的。

它有以下几个特色:

  • 面向无衔接

    首要 UDP 是不需求和 TCP相同在发送数据前进行三次握手树立衔接的,想发数据就能够开始发送了。而且也仅仅数据报文的搬运工,不会对数据报文进行任何拆分和拼接操作。

    具体来说便是:

    • 在发送端,应用层将数据传递给传输层的 UDP 协议,UDP 只会给数据添加一个 UDP 头标识下是 UDP 协议,然后就传递给网络层了
    • 在接纳端,网络层将数据传递给传输层,UDP 只去除 IP 报文头就传递给应用层,不会任何拼接操作
  • 有单播,多播,播送的功用

    UDP 不止支撑1对1的传输方法,同样支撑一对多,多对多,多对一的方法,也便是说 UDP 供给了单播,多播,播送的功用。

  • UDP是面向报文的

    发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不兼并,也不拆分,而是保存这些报文的边界。因而,应用程序必须挑选适宜巨细的报文

  • 不牢靠性

    首要不牢靠性体现在无衔接上,UDP只会把想发的数据报文一股脑的丢给对方,并不在意数据有无安全完好抵达。 通讯都不需求树立衔接,想发就发,这样的情况必定不牢靠。

    而且收到什么数据就传递什么数据,而且也不会备份数据,发送数据也不会关心对方是否现已正确接纳到数据了。

    再者网络环境时好时坏,可是 UDP 由于没有拥塞操控,一直会以稳定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样完结的坏处便是在网络条件不好的情况下或许会导致丢包,可是长处也很明显,在某些实时性要求高的场景(比方电话会议)就需求运用 UDP 而不是 TCP。

  • 头部开支小,传输数据报文时是很高效的。

[外链图片转存失利,源站或许有防盗链机制,建议将图片保存下来直接上传(img-YMyu3KmE-1689748943729)(images/udp%E5%A4%B4.png)]

​ UDP 头部包含了以下几个数据:

​ 1. 两个十六位的端口号,分别为源端口(可选字段)和方针端口

​ 2. 整个数据报文的长度

​ 3. 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的过错

​ 因而 UDP 的头部开支小,只要八字节,比较 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的。

TCP

TCP协议全称是传输操控协议(**Transmission Control Protocol **),是一种面向衔接的、牢靠的、根据字节省的传输层通讯协议,由 IETF 的RFC 793定义。TCP 是面向衔接的、牢靠的流(不间断的数据结构)协议。

TCP衔接进程见:描绘TCP三次握手与四次挥手的进程与意义

它有以下几个特色:

  • 面向衔接

    面向衔接,是指发送数据之前必须在两头树立衔接。树立衔接的方法是“三次握手”,这样能树立牢靠的衔接。树立衔接,是为数据的牢靠传输打下了根底。

  • 仅支撑单播传输

    每条TCP传输衔接只能有两个端点,只能进行点对点的数据传输,不支撑多播和播送传输方法。

  • 面向字节省

    TCP不像UDP相同那样一个个报文独登时传输,而是在不保存报文边界的情况下以字节省方法进行传输。

  • 牢靠传输

    关于牢靠传输,判别丢包,误码靠的是TCP的段编号以及承认号。TCP为了确保报文传输的牢靠,就给每个包一个序号,一起序号也确保了传送到接纳端实体的包的按序接纳。然后接纳端实体对已成功收到的字节发回一个相应的承认(ACK);假如发送端实体在合理的往复时延(RTT)内未收到承认,那么对应的数据(假设丢掉了)将会被重传。

  • 供给拥塞操控

    当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞

  • TCP供给全双工通讯

    TCP允许通讯两边的应用程序在任何时候都能发送数据,由于TCP衔接的两头都设有缓存,用来暂时寄存双向通讯的数据。当然,TCP能够立即发送一个数据段,也能够缓存一段时间以便一次发送更多的数据段(最大的数据段巨细取决于MSS)

TCP和UDP的比较

UDP TCP
是否衔接 无衔接 面向衔接
是否牢靠 不牢靠传输,不运用流量操控和拥塞操控 牢靠传输,运用流量操控和拥塞操控
衔接目标个数 支撑1对1,一对多,多对一和多对多交互通讯 只能是1对1通讯
传输方法 面向报文 面向字节省
首部开支 首部开支小,仅8字节 首部最小20字节,最大60字节
适用场景 适用于实时应用(IP电话、视频会议、直播等) 适用于要求牢靠传输的应用,例如文件传输

总结

  • TCP向上层供给面向衔接的牢靠服务 ,UDP向上层供给无衔接不牢靠服务。
  • 虽然 UDP 并没有 TCP 传输来的准确,可是也能在很多实时性要求高的当地有所作为
  • 对数据准确性要求高,速度能够相对较慢的,能够选用TCP

具体重视大众号:Android老皮
还能解锁 《Android十大板块文档》 ,让学习更靠近未来实战。已构成PDF版

内容如下

1.Android车载应用开发系统学习指南(附项目实战)
2.Android Framework学习指南,助力成为系统级开发高手
3.2023最新Android中高级面试题汇总+解析,离别零offer
4.企业级Android音视频开发学习道路+项目实战(附源码)
5.Android Jetpack从入门到通晓,构建高质量UI界面
6.Flutter技能解析与实战,跨平台首要之选
7.Kotlin从入门到实战,全方面提升架构根底
8.高级Android插件化与组件化(含实战教程和源码)
9.Android 功能优化实战+360全方面功能调优
10.Android零根底入门到通晓,高手进阶之路