- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
TCP/IP面试题及答案
面试官问“TCP和UDP都是传输层协议,实际开发中怎么选?举个例子说明”,该怎么回答?
答案:选协议主要看业务对可靠性和实时性的需求。TCP是面向连接的,有三次握手、重传、流量控制这些机制,适合需要确保数据不丢不重的场景,比如文件传输(像FTP传资料,丢了一段文件就用不了)、HTTP接口请求(用户登录发的账号密码,必须准确到服务器)。UDP是无连接的,不管数据发没收到都不回头确认,优点是速度快、延迟低,适合实时性要求高于可靠性的场景,比如视频会议(偶尔丢个帧,画面卡一下不影响整体沟通,但要是等TCP重传,延迟就会特别明显)、DNS查询(查域名对应的IP,就算丢了请求,客户端再发一次就行,没必要等复杂的确认流程)。
说说TCP三次握手的过程,为什么不能是两次?
答案:三次握手简单说就是“请求-确认-再确认”。第一步,客户端给服务器发SYN包,意思是“我想跟你建立连接”;第二步,服务器收到后,发SYN+ACK包,既回应“我知道你要连了”(ACK),又告诉客户端“我这边也准备好连了”(SYN);第三步,客户端收到服务器的包后,再发一个ACK包,告诉服务器“我知道你准备好,咱们可以开始传数据了”。
不能是两次,主要怕出现“历史无效连接”。比如客户端之前发过一个SYN包,但因为网络延迟卡住了,客户端以为没发出去又重发了一个,建立连接传完数据后断开了。这时候之前卡住的那个SYN包突然到了服务器,要是两次握手,服务器发个ACK就建立连接了,但客户端早就忘了这个包,不会给服务器发数据,服务器会一直等着,浪费资源。三次握手的话,服务器发了SYN+ACK后,得等客户端的第三个ACK才确认连接,无效的SYN包不会得到客户端的第三次确认,服务器就不会建立无用连接。
TCP四次挥手为什么需要“TIME_WAIT”状态?这个状态一般持续多久?
答案:四次挥手是断开连接的过程,客户端和服务器都要分别说“我要断了”。TIME_WAIT是主动关闭连接的一方(比如客户端)发完最后一个ACK包后进入的状态,主要有两个作用:一是确保对方能收到最后一个ACK包(如果服务器没收到,会重发FIN包,客户端在TIME_WAIT状态下能再发一次ACK);二是避免“历史连接”的数据包干扰新连接,因为网络里可能还残留着之前连接的数据包,TIME_WAIT会等这些数据包过期后再释放端口。
TIME_WAIT的持续时间通常是2倍的MSL(最大分段生存期),MSL是一个数据包在网络里能存活的最长时间,一般默认是1分钟,所以TIME_WAIT通常持续2分钟。不过实际运维中,有些场景会根据需求调整这个时间,比如高并发服务器,为了快速释放端口,可能会调小,但要注意避免残留数据包的问题。
什么是TCP滑动窗口?它能解决什么问题?
答案:滑动窗口可以理解成双方约定的“一次能传多少数据”的缓冲区,是TCP实现流量控制的核心机制。比如客户端给服务器发数据,服务器会告诉客户端“我现在的接收缓冲区还能装1000字节”(这就是接收窗口大小),客户端就知道这次最多发1000字节,不用等一个字节确认了再发下一个,能提高传输效率。
它主要解决两个问题:一是避免发送方发得太快,接收方处理不过来导致数据丢失(流量控制);二是实现“流水线传输”,不用等前一个数据包的ACK回来再发下一个,比如窗口大小是5,发送方可以连续发5个数据包,等接收方确认后,窗口再“滑动”,继续发后面的,大幅提升传输速度。
实际工作中遇到过TCP丢包吗?可能是什么原因导致的?怎么排查?
答案:遇到过,比如之前做文件传输功能时,偶尔会出现传输卡住,查日志发现是TCP丢包了。常见原因有三种:一是网络链路问题,比如网线接触不良、路由器故障,导致数据包在传输过程中丢了;二是拥塞控制,当网络里数据太多,路由器缓存满了,就会丢包,TCP会触发拥塞控制机制,放慢发送速度;三是接收方处理不及时,比如接收方的应用程序没及时从TCP接收缓冲区读数据,缓冲区满了,就会告诉发送方“别发了”,如果发送方没及时收到这个信号,继续发就会丢包。
排查的话,先看网络链路,用ping命令测一下客户端和服务器之间的连通性,看有没有丢包率;再用tcpdump或Wireshark抓包,分析数据包的ACK情况,如果有很多SYN包没收到ACK,或者有重传包,说明可能是链路或拥塞问题;最后查接收方的应用日志,看是不是应用程序读缓冲区的速度太慢,比如代码里读数据的逻辑卡住了,导致缓冲区满了。
什么是子网掩码?它和IP地址配合能实现什么功能?
答案:子网
文档评论(0)