开发面试基础篇之TCP协议

Posted 莫瑜茶社

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发面试基础篇之TCP协议相关的知识,希望对你有一定的参考价值。

今天开始给大家分享一些关于计算机基础方面的面试题目。计算机有四大基础课程计算机组成原理,数据结构,计算机网络,操作系统。在校招面试中被各个大厂最热爱的是后三个,其中每一门都需要掌握,在面试过程中如果基础题目没有回答上来是很减分的一个体验。在公司中,我和同事面试一个应届生,问 TCP 的三次握手,回答忘了;问进程和线程的区别,回答也是支支吾吾的。所以,接下来和大家一起复习复习这些计算机基础。

 

今天先来看计算机网络中必考的协议—TCP协议。
TCP协议内容较多,分两个篇幅来写。今天写面试中更为高频的考点。

什么是TCP协议?


TCP协议,传输控制协议,是一种面向连接的,可靠的,基于字节流的传输层协议。

开发面试基础篇之TCP协议

TCPUDP的区别?应用场景有哪些?


TCPUDP都位于OSI模型中的传输层。
TCP是面向连接的,需要通过建立连接进行通信;而UDP协议是无连接的,不需要建立连接就可以进行通信。
TCP是可靠交付的通信层协议。可靠交付体现在差错,不丢失,不重复,且按序到达。而UDP是尽最大努力交付。
由于TCP需要建立连接和可靠交付,所以TCP的头部会比UDP进行复杂。因此UDP比TCP相比具有更好的实时性,工作效率更高,适用于对实时性要求较高的场景。
TCP是点对点通信,而UDP可以用于1对多通信,广播通信等场景。

 

开发面试基础篇之TCP协议

TCP是如何保证可靠交付的?


TCP协议通过序号,确认机制,超时重传,拥塞避免,流量控制等方法来保证可靠交付。

TCP是如何建立连接?如何断开连接的?

开发面试基础篇之TCP协议


开发面试基础篇之TCP协议

TCP通过三次握手建立,简单讲解一下?


第一次握手:建立连接。客户端发起连接请求。将SYN(连接建立时的同步标志位)置为1,序号Seq = x,等待服务器的响应。
第二次握手:服务端确认收到建立连接的请求。同意建立连接,并发送确认报文。此时仍需要将SYN标志位置为1Ack(确认标志位)置为x+1(收到的客户端传来的Seq+1)表示已经收到序号Seq=x的报文,期待收到x+1的报文,Seq置为y
第三次握手:客户端收到服务器的报文段后,需要对该报文回复确认收到的报文,将ACK置为y+1。该报文段发送完毕后,客户端和服务端的连接建立完成。

 


TCP通过四次挥手断开连接,简单讲解一下?


第一次挥手:当主机1发送完数据后,此时仍需要对上一条数据进行确认,所以ACK=y+1Seq=x,然后将FIN标志位置为,,再加上SeqACK代表我的数据发送完了。
第二次挥手:当主机2收到来自主机1FIN报文时,需要对这条报文发送确认,代表我收到了该报文,并同意主机1来关闭请求。所以返回一个ACK=x+1的报文。此时主机2仍可以向主机1发送数据。
第三次挥手:当主机2所有的数据发送完后,需要向主机1发送FIN报文,请求断开连接。所以此时将FIN标志位置为1,加上序号Seq=y
第四次挥手:一样的,主机1收到来自主机2FIN报文,向主机2发送确认报文后,表示同意断开连接。

TimeWait是什么?为什么需要TimeWait状态?


TimeWait状态是第四次挥手完成时,主机1发送完ACK报文后的状态,主机1需要等待2MSL(为报文往返的时间)后,仍没有收到回复,则表示主机2已经关闭,此时可以正常断开连接。那么为什么需要等待呢?如果不等待2MSL直接断开连接,如果最后一条ACK报文丢失,主机2由于没有收到ACK报文进行重传,但此时主机1的连接已经关闭,所以进入了不可控的状态。

 

TCP中高频考点就是以上这些,但是有些面试官会进行追问,比如TCP如何进行超时重传,如何进行流量控制,TCP粘包问题等等。由于篇幅有限,这些将在下一篇文章中进行分享讲解。
 
我是店长莫瑜,奋斗在一线互联网公司的程序员一枚,喜欢我的文章就点个赞和在看吧。
最近在建立一个“每日一道技术题”群,有兴趣的话,公众号回复 每日一道技术题 获取加群方式。

 



以上是关于开发面试基础篇之TCP协议的主要内容,如果未能解决你的问题,请参考以下文章

Java面试-基础篇之5

计算机网络高频面试题解析(含书籍推荐)

Linux从青铜到王者第十八篇:Linux网络基础第二篇之TCP协议

网络基础面试常考知识点

面试时,你被问到过 TCP/IP 协议吗?

面试时,你被问到过 TCP/IP 协议吗?