前情回顾:一篇短短的博客明显不能知足TCP和UDP这两个饥渴的汉子,并且还被应用协议占了一小半的篇幅。在昨天结束以后,相信你们都基本对TCP/IP协议栈的轮廓有一个大概的印象了,可以对总体有所把握。html
今天白天上班的时候彻底抽不出时间来复习,配了一天的环境才把一个公司的项目跑起来。将近四个月的时间,实习以来我以为配环境是最麻烦最恶心人的事儿了,没有之一。用的是Eclipse,其中还涉及maven什么的,没有了解过,只是按照文档一步一步去作,出现问题报了异常也不知道是什么缘由该怎么解决。只好一点点去试,一次又一次重复已经作过的步骤,以防是本身没有严格按照步骤作致使的错误。事情不难,但真的颇有挫败感,以为本身是两眼一抹黑。就像微博上流传一句调侃程序猿的话:程序跑不起来,我不知道为何;程序跑起来了,我也不知道为何。面试
我发现公司里面某些人也是同样,都是靠试,看到什么能够设的地方就去瞎搞。你问他为何,他也说不出个因此然来。或许有人一开始想着去弄明白,但随着项目跑起来了,也就没那么心思去学新东西了。下次仍是会遇到相同的问题,依然不懂。算法
童鞋们,前辈们能够在评论里谈谈本身这方面的经历啊,分享一下。数据库
—————————————————————————————闲聊结束——————————————————————————————编程
今天,主要就一些常见的面试题进行分析,会参考网上的一些资料,结合我本身的理解,用本身的语言去讲述。服务器
第七章:快问快答网络
在面试中,面试官会在询问项目细节的过程当中忽然问一些TCP/IP协议中的简单问题,若是思考时间过长,甚至答不出来,就很影响考核的分数。(参考我上次连TCP/IP协议多少层都没回答出来)eclipse
1.OSI参考模型有多少层?分别是哪几层?(不建议死记硬背,能够看看我在系列文章第一篇里的描述,效果比较好,不会由于紧张而答不出来)socket
七层模型,自下而上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。maven
2.TCP/IP协议栈有多少层?分别是哪几层?(有四层和五层的说法,其实都对,这里就只讲四层的)
四层,自上而下分别是:应用层、传输层、网络层以及数据链路层。
3.应用层典型的协议中,基于TCP、UDP协议的分别有哪些?(面试中比较少问,笔试题中经常会以选择题的形式考察)
TCP:SMTP,FTP,TELNET,POP3,IMAP, BGP,http,SSH
UDP:SNMP,TFTP简单文件传输协议,用于传小文件,功能简单少,DNS
4.ipconfig的做用是什么?(一些经常使用的指令记一记仍是有好处的,最好能实际操做一下,加深印象)
显示当前TCP/IP配置的信息。
5.请说出三个你以为比较常见的端口以及对应的应用?(这个没什么好说的,注意点就是了)
21-FTP、22-SSH、23-telnet、25-SMTP、80-HTTP、SNMP-16一、MySQL数据库服务-3306
6.简单讲讲ICMP协议(HTTP协议、DHCP协议等)的做用和基本原理(这道题就不说答案了,你们本身去看看以前的博客,最好能再总结其余常见协议的做用和基本原理)
7.如何进行两台电脑ping不通,你以为可能的缘由有哪些?
(这道题仍是挺有意思的,若是事先不知道答案要准确回答出来,要基础知识很扎实而且思考比较全面才行,下面是网上的参考答案,欢迎童鞋们吐槽)
(1)首先考虑是不是网络的问题
(2)局域网设置问题,电脑互联是要设置的。看是否安装了必要的网络协议,最重要的是IP地址是否设置正确。
(3)网卡驱动未安装正确
(4)防火墙设置有问题
(5)是否有什么软件阻止了ping包
相似的问题还有不少,我就不一一列举出来了。光是列举是没有意义的,其实,只要把基础的知识掌握好,再加上必要的练习,这样问题就算不能脱口而出,想想也是能回答出来的。最重要的是不要太紧张,要对本身有信心,否则很容易悲剧。至于掌握基础知识嘛,最好是联系起来记忆,结合模型。我能想象到某一个程度,闭上眼睛,会有一个计算机网络世界展示在你的眼前。
第八章:有备而战
通常写过计算机行业简历的童鞋都对这么几个字眼不会陌生:精通、熟练掌握、熟悉、了解。在上一章,快问快答的问题基本都只是了解,而下面的几道题,至少要达到熟悉的程度。甚至在一些要求高的面试当中,会在编程层面上做要求。
第一题:TCP与UDP的区别
TCP---传输控制协议,提供的是面向链接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间创建一个TCP链接,以后才能传输数据。TCP提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另外一端。
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,可是并不能保证它们能到达目的地。因为UDP在传输数据报前不用在客户和服务器之间创建一个链接,且没有超时重发等机制,故而传输速度很快。
(最好还可以各自举例说明一下,例如什么协议或应用采用TCP,为何;又有什么协议或应用采用UDP,为何。主要是给面试官说明具体问题具体分析,两协议没有优劣之分)
第二题:讲讲TCP的三次握手(四次挥手)的整个过程
TCP 链接是经过三次握手进行初始化的。三次握手的目的是同步链接双方的序列号和确认号并交换 TCP 窗口大小信息。如下步骤概述了一般状况下客户端计算机联系服务器计算机的过程:
1)客户端向服务器发送一个SYN置位的TCP报文,其中包含链接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
2)服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号(sequence number)y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
3).客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1和序号x+1的ACK报文,一个标准的TCP链接完成。
(四次挥手的过程相似,这里就很少说了,图片来自参考资料http://www.cnblogs.com/hnrainll/archive/2011/10/14/2212415.html,上面画的图不错。建议你们在面试的时候要随身带一支笔和一张白纸,在被问到这种须要画图的问题时主动画图给面试官看,加分很多的!像我这样画图很丑的人,能够多练习几回,不会到时候涂涂抹抹,影响讲解的效果)
第三题:为何创建链接协议是三次握手,而关闭链接倒是四次握手呢?
这是由于服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它能够把ACK和SYN(ACK起应答做用,而SYN起同步做用)放在一个报文里来发送。但关闭链接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你全部的数据都所有发送给对方了,因此你不能够立刻关闭SOCKET,也即你可能还须要发送一些数据给对方以后,再发送FIN报文给对方来表示你赞成如今能够关闭链接了,因此它这里的ACK报文和FIN报文多数状况下都是分开发送的。
第四题:讲讲TCP协议中滑动窗口
TCP的首部中有一个很重要的字段就是16位长的窗口大小,它出如今每个TCP数据报中,配合32位的确认序号,用于向对端通告本地socket的接收窗口大小。也就是说,若是本地socket发送一个TCP数据,其32位确认序号是5,窗口大小是5840,则用于告诉对端,对端已经发出的4个字节的数据已经收到并确认,接下来,本地socket最多可以接收从第5个字节开始的5840个字节长度的数据。这是由接收方进行的一种流量控制,接收方经过告诉发送方本身所可以接收数据的大小,达到控制发送方发送速度的目的。(本段内容引子班里的一位offer大神给个人总结资料。其实还会涉及慢启动算法等相关内容,值得深刻研究)
(其实我没有怎么看懂这一部分,《图解TCP/IP》里面的相关内容反复读了两三遍都有不是很理解滑动窗口的原理究竟是怎么回事。看来是脑子短路了,貌似也不是很难的样子。等我让会的人给我讲解讲解,或者过一段时间冷却再回头去看,会好一些。到时弄懂了,再具体贴出来。网上随便搜了一下,没找到特别好的讲解文章,童鞋们找到的话麻烦在评论中推荐一下。)
面试题就贴这么多,尤为是第八章我只选了最最最经典的三道题型:TCP与UDP的区别、TCP的三次握手四次挥手以及TCP的滑动窗口。其实,我以为你们没有必要去背答案,理解记忆的效果才是最好的。有些面试官,会在你给出比较标准的答案以后询问一些细节,这些细节是在那些总结面试题答案中没有的。仍是要去看看教材或者一些详解的博客,了解其中的机制和原理,知道究竟是什么样子的,而且为何要设计成这个样子,设计成这个样子有什么好处。例如:面试官问你,DNS用的是TCP仍是UDP?你记住了答案,回答说:UDP。那他接着问,为何要用UDP呢?你总不能回答说:他就是用UDP吖,我有什么办法。囧。
TCP/IP相关的面试题远远不止这么些,题海战术不是说没有用,但真的是事倍功半,付出了不少代价却没有对等的回报。记不住答案也不要紧,由于总有你没碰过的题目,关键是把握原理,可以根据基础知识推出来。讲到推出来,我想起我一个高数很厉害的舍友。在期末考试数值计算(数学类科目)这门课以前,我问他为何不记公式,他回答我说:记什么记,到时候推出来就行喇!不亏是高数两学期满绩点的人,最后考了六十几分。
True story O(∩_∩)O~
—————————————————————————————————————————————————————————————————
又坚持了一天,确定是要说几句的:
1.今天由于配环境的事儿,搞得有点烦躁,以为本身很没用。其实也是本身的问题,平时用eclipse稀里糊涂,不少设置都不知道怎么弄,项目启动以后跑不起来一堆报错也不知道是什么问题,更别谈找到相应的解决办法。最后求助前辈,前辈有点不耐烦,搞定后跟我说了句:记住怎么作了啊,之后别叫我帮你弄这个。这句话从下班一直让我想到如今,一开始会以为这个前辈怎么这样,你有解决问题的经验,帮帮我怎么了,你用十分钟就顶的上我用一天的时间去瞎猫撞死老鼠。后来想一想他有本身的事情要忙,能帮我已是很够意思了,真的不能要求太多。有些问题仍是得本身去解决,不能一味依赖别人,不动脑子永远也进步不了。
2.之后碰见这种事情,第一步是要积极去找到问题所在,思考、找资料摸索出解决方法。实在比较棘手或者赶时间才是第二步,虚心请教前辈或者同事。多要求本身,少要求别人。
3.TCP/IP协议这一块基本结束了,明天该进行哪一部分呢?童鞋们什么好建议,能够在评论中提一提哦。