渣渣小本求职复习之路每天一博客系列——TCP/IP协议栈(5)

      前情回顾:一篇短短的博客明显不能满足TCP和UDP这两个饥渴的汉子,而且还被应用协议占了一小半的篇幅。在昨天结束之后,相信大家都基本对TCP/IP协议栈的轮廓有一个大概的印象了,能够对整体有所把握。

      今天白天上班的时候完全抽不出时间来复习,配了一天的环境才把一个公司的项目跑起来。将近四个月的时间,实习以来我觉得配环境是最麻烦最恶心人的事儿了,没有之一。用的是Eclipse,其中还涉及maven什么的,没有了解过,只是按照文档一步一步去做,出现问题报了异常也不知道是什么原因该怎么解决。只好一点点去试,一次又一次重复已经做过的步骤,以防是自己没有严格按照步骤做导致的错误。事情不难,但真的很有挫败感,觉得自己是两眼一抹黑。就像微博上流传一句调侃程序猿的话:程序跑不起来,我不知道为什么;程序跑起来了,我也不知道为什么。

      我发现公司里面某些人也是一样,都是靠试,看到什么可以设的地方就去瞎搞。你问他为什么,他也说不出个所以然来。或许有人一开始想着去弄明白,但随着项目跑起来了,也就没那么心思去学新东西了。下次还是会遇到相同的问题,依然不懂。

      童鞋们,前辈们可以在评论里谈谈自己这方面的经历啊,分享一下。

—————————————————————————————闲聊结束——————————————————————————————

      今天,主要就一些常见的面试题进行分析,会参考网上的一些资料,结合我自己的理解,用自己的语言去讲述。

第七章:快问快答

      在面试中,面试官会在询问项目细节的过程中突然问一些TCP/IP协议中的简单问题,如果思考时间过长,甚至答不出来,就很影响考核的分数。(参考我上次连TCP/IP协议多少层都没回答出来)

      1.OSI参考模型有多少层?分别是哪几层?(不建议死记硬背,可以看看我在系列文章第一篇里的描述,效果比较好,不会因为紧张而答不出来)

         七层模型,自下而上分别是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。

      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-161、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协议这一块基本结束了,明天该进行哪一部分呢?童鞋们什么好建议,可以在评论中提一提哦。

posted @ 2013-10-23 08:39  LevenYes  阅读(1254)  评论(6编辑  收藏  举报