计算机网络面试 - CSDN
精华内容
参与话题
  • 计算机网络面试问题集锦

    千次阅读 多人点赞 2018-09-06 10:29:39
    1、Http和Https的区别  Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP...二者之间存在如下不同: ... ...

    1、Http和Https的区别

      Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。二者之间存在如下不同:

    • 端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;

    • 资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;

    • 开销:Https通信需要证书,而证书一般需要向认证机构购买; 
        
      Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。


    2、对称加密与非对称加密

      对称密钥加密是指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;而非对称加密是指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。

      由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。


    3、三次握手与四次挥手

     (1). 三次握手(我要和你建立链接,你真的要和我建立链接么,我真的要和你建立链接,成功):

    • 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

    • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

    • 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

                  三次握手.png-12.4kB


     (2). 四次挥手(我要和你断开链接;好的,断吧。我也要和你断开链接;好的,断吧):

    • 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

    • 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。此时TCP链接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接收。

    • 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

    • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。

                  四次挥手.png-12.6kB


    4、为什么TCP链接需要三次握手,两次不可以么,为什么?

      为了防止 已失效的链接请求报文突然又传送到了服务端,因而产生错误。

      客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达Server。这是,Server误以为这是Client发出的一个新的链接请求,于是就向客户端发送确认数据包,同意建立链接。若不采用“三次握手”,那么只要Server发出确认数据包,新的链接就建立了。由于client此时并未发出建立链接的请求,所以其不会理睬Server的确认,也不与Server通信;而这时Server一直在等待Client的请求,这样Server就白白浪费了一定的资源。若采用“三次握手”,在这种情况下,由于Server端没有收到来自客户端的确认,则就会知道Client并没有要求建立请求,就不会建立链接。


    5、TCP协议如何来保证传输的可靠性

      TCP提供一种面向连接的、可靠的字节流服务。其中,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信;而字节流服务意味着两个应用程序通过TCP链接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。

      对于可靠性,TCP通过以下方式进行保证:

    • 数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;

    • 对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;

    • 丢弃重复数据:对于重复数据,能够丢弃重复数据;

    • 应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;

    • 超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;

    • 流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。


    6、客户端不断进行请求链接会怎样?DDos(Distributed Denial of Service)攻击?

      服务器端会为每个请求创建一个链接,并向其发送确认报文,然后等待客户端进行确认


    1)、DDos 攻击

    • 客户端向服务端发送请求链接数据包
    • 服务端向客户端发送确认数据包
    • 客户端不向服务端发送确认数据包,服务器一直等待来自客户端的确认

    2)、DDos 预防 ( 没有彻底根治的办法,除非不使用TCP )

    • 限制同时打开SYN半链接的数目
    • 缩短SYN半链接的Time out 时间
    • 关闭不必要的服务

    7、Get与POST的区别

      GET与POST是我们常用的两种HTTP Method,二者之间的区别主要包括如下五个方面:

    (1). 从功能上讲,GET一般用来从服务器上获取资源,POST一般用来更新服务器上的资源;

    (2). 从REST服务角度上说,GET是幂等的,即读取同一个资源,总是得到相同的数据,而POST不是幂等的,因为每次请求对资源的改变并不是相同的;进一步地,GET不会改变服务器上的资源,而POST会对服务器资源进行改变;

    (3). 从请求参数形式上看,GET请求的数据会附在URL之后,即将请求数据放置在HTTP报文的 请求头 中,以?分割URL和传输数据,参数之间以&相连。特别地,如果数据是英文字母/数字,原样发送;否则,会将其编码为 application/x-www-form-urlencoded MIME 字符串(如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII);而POST请求会把提交的数据则放置在是HTTP请求报文的 请求体 中。

    (4). 就安全性而言,POST的安全性要比GET的安全性高,因为GET请求提交的数据将明文出现在URL上,而且POST请求参数则被包装到请求体中,相对更安全。

    (5). 从请求的大小看,GET请求的长度受限于浏览器或服务器对URL长度的限制,允许发送的数据量比较小,而POST请求则是没有大小限制的。


    1). GET请求中URL编码的意义

      我们知道,在GET请求中会对URL中非西文字符进行编码,这样做的目的就是为了 避免歧义。看下面的例子,

      针对“name1=value1&name2=value2”的例子,我们来谈一下数据从客户端到服务端的解析过程。首先,上述字符串在计算机中用ASCII吗表示为:

    
     
    1. 6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532

    2. 6E616D6531:name1

    3. 3D:=

    4. 76616C756531:value1

    5. 26:&

    6. 6E616D6532:name2

    7. 3D:=

    8. 76616C756532:value2

    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

      服务端在接收到该数据后就可以遍历该字节流,一个字节一个字节的吃,当吃到3D这字节后,服务端就知道前面吃得字节表示一个key,再往后吃,如果遇到26,说明从刚才吃的3D到26子节之间的是上一个key的value,以此类推就可以解析出客户端传过来的参数。

      现在考虑这样一个问题,如果我们的参数值中就包含=或&这种特殊字符的时候该怎么办?比如,“name1=value1”,其中value1的值是“va&lu=e1”字符串,那么实际在传输过程中就会变成这样“name1=va&lu=e1”。这样,我们的本意是只有一个键值对,但是服务端却会解析成两个键值对,这样就产生了歧义。

      那么,如何解决上述问题带来的歧义呢?解决的办法就是对参数进行URL编码:例如,我们对上述会产生歧义的字符进行URL编码后结果:“name1=va%26lu%3D”,这样服务端会把紧跟在“%”后的字节当成普通的字节,就是不会把它当成各个参数或键值对的分隔符。更多关于 URL编码 的内容,请参考我的博文《使用 URLDecoder 和 URLEncoder 对中文字符进行编码和解码》,此不赘述。


    8、TCP与UDP的区别

      TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,它们之间的区别包括:

    • TCP是面向连接的,UDP是无连接的;

    • TCP是可靠的,UDP是不可靠的;

    • TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;

    • TCP是面向字节流的,UDP是面向报文的;

    • TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;

    • TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;


    9、TCP的拥塞处理

      计算机网络中的带宽、交换结点中的缓存及处理机等都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就会变坏,这种情况就叫做拥塞。拥塞控制就是 防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。注意,拥塞控制和流量控制不同,前者是一个全局性的过程,而后者指点对点通信量的控制。拥塞控制的方法主要有以下四种:


    1). 慢启动:不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小;


    2). 拥塞避免:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长。

              慢开始与拥塞避免.png-90.3kB


    3). 快重传:快重传要求接收方在收到一个 失序的报文段 后就立即发出 重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器时间到期。

              快重传.jpg-42.3kB


    4). 快恢复:快重传配合使用的还有快恢复算法,当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半,但是接下去并不执行慢开始算法:因为如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞。所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。

              快恢复.jpg-52.9kB


    10、从输入网址到获得页面的过程

      (1). 浏览器查询 DNS,获取域名对应的IP地址:具体过程包括浏览器搜索自身的DNS缓存、搜索操作系统的DNS缓存、读取本地的Host文件和向本地DNS服务器进行查询等。对于向本地DNS服务器进行查询,如果要查询的域名包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析(此解析具有权威性);如果要查询的域名不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析(此解析不具有权威性)。如果本地域名服务器并未缓存该网址映射关系,那么将根据其设置发起递归查询或者迭代查询;

      (2). 浏览器获得域名对应的IP地址以后,浏览器向服务器请求建立链接,发起三次握手;

      (3). TCP/IP链接建立起来后,浏览器向服务器发送HTTP请求;

      (4). 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器;

      (5). 浏览器解析并渲染视图,若遇到对js文件、css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源;

      (6). 浏览器根据其请求到的资源、数据渲染页面,最终向用户呈现一个完整的页面。


    11、Session、Cookie 与 Application

      Cookie和Session都是客户端与服务器之间保持状态的解决方案,具体来说,cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。


    (1). Cookie及其相关API

      Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie,而客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器,服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

               Cookoe-HttpServletResponse.png-38.6kB

               HttpServletrequest-cookie.png-8.6kB


    (2). Session及其相关API

      同样地,会话状态也可以保存在服务器端。客户端请求服务器,如果服务器记录该用户状态,就获取Session来保存状态,这时,如果服务器已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用;如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,并将这个sessionid在本次响应中返回给客户端保存。保存这个sessionid的方式可以采用 cookie机制 ,这样在交互过程中浏览器可以自动的按照规则把这个标识发挥给服务器;若浏览器禁用Cookie的话,可以通过 URL重写机制 将sessionid传回服务器。

               Session-HttpServletRequest.png-10.1kB


    (3). Session 与 Cookie 的对比

    • 实现机制:Session的实现常常依赖于Cookie机制,通过Cookie机制回传SessionID;

    • 大小限制:Cookie有大小限制并且浏览器对每个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关;

    • 安全性:Cookie存在安全隐患,通过拦截或本地文件找得到cookie后可以进行攻击,而Session由于保存在服务器端,相对更加安全;

    • 服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。

      Application(ServletContext):与一个Web应用程序相对应,为应用程序提供了一个全局的状态,所有客户都可以使用该状态。


    (4). Application

      Application(Java Web中的ServletContext):与一个Web应用程序相对应,为应用程序提供了一个全局的状态,所有客户都可以使用该状态。


    12、SQL 注入

      SQL注入就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

    1). SQL注入攻击的总体思路

      (1). 寻找到SQL注入的位置 
      (2). 判断服务器类型和后台数据库类型 
      (3). 针对不通的服务器和数据库特点进行SQL注入攻击


    2). SQL注入攻击实例

      比如,在一个登录界面,要求输入用户名和密码,可以这样输入实现免帐号登录:

    
     
    1. 用户名: ‘or 1 = 1 --

    2. 密 码:

    • 1
    • 2
    • 1
    • 2

      用户一旦点击登录,如若没有做特殊处理,那么这个非法用户就很得意的登陆进去了。这是为什么呢?下面我们分析一下:从理论上说,后台认证程序中会有如下的SQL语句:String sql = “select * from user_table where username=’ “+userName+” ’ and password=’ “+password+” ‘”; 因此,当输入了上面的用户名和密码,上面的SQL语句变成:SELECT * FROM user_table WHERE username=’’or 1 = 1 – and password=’’。分析上述SQL语句我们知道, 
    username=‘ or 1=1 这个语句一定会成功;然后后面加两个-,这意味着注释,它将后面的语句注释,让他们不起作用。这样,上述语句永远都能正确执行,用户轻易骗过系统,获取合法身份。


    3). 应对方法

    (1). 参数绑定

      使用预编译手段,绑定参数是最好的防SQL注入的方法。目前许多的ORM框架及JDBC等都实现了SQL预编译和参数绑定功能,攻击者的恶意SQL会被当做SQL的参数而不是SQL命令被执行。在mybatis的mapper文件中,对于传递的参数我们一般是使用#和$来获取参数值。当使用#时,变量是占位符,就是一般我们使用javajdbc的PrepareStatement时的占位符,所有可以防止sql注入;当使用$时,变量就是直接追加在sql中,一般会有sql注入问题。

    (2). 使用正则表达式过滤传入的参数


    13、 XSS 攻击

      XSS是一种经常出现在web应用中的计算机安全漏洞,与SQL注入一起成为web中最主流的攻击方式。XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些脚本代码嵌入到web页面中去,使别的用户访问都会执行相应的嵌入代码,从而盗取用户资料、利用用户身份进行某种动作或者对访问者进行病毒侵害的一种攻击方式。


    1). XSS攻击的危害

    • 盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号

    • 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力

    • 盗窃企业重要的具有商业价值的资料

    • 非法转账

    • 强制发送电子邮件

    • 网站挂马

    • 控制受害者机器向其它网站发起攻击


    2). 原因解析

      主要原因:过于信任客户端提交的数据!

      解决办法:不信任任何客户端提交的数据,只要是客户端提交的数据就应该先进行相应的过滤处理然后方可进行下一步的操作。

      进一步分析细节:客户端提交的数据本来就是应用所需要的,但是恶意攻击者利用网站对客户端提交数据的信任,在数据中插入一些符号以及javascript代码,那么这些数据将会成为应用代码中的一部分了,那么攻击者就可以肆无忌惮地展开攻击啦,因此我们绝不可以信任任何客户端提交的数据!!!


    3). XSS 攻击分类

    (1). 反射性XSS攻击 (非持久性XSS攻击)

      漏洞产生的原因是攻击者注入的数据反映在响应中。一个典型的非持久性XSS攻击包含一个带XSS攻击向量的链接(即每次攻击需要用户的点击),例如,正常发送消息:

    http://www.test.com/message.php?send=Hello,World!
    • 1
    • 1

    接收者将会接收信息并显示Hello,World;但是,非正常发送消息:

    http://www.test.com/message.php?send=<script>alert(‘foolish!’)</script>!
    • 1
    • 1

    接收者接收消息显示的时候将会弹出警告窗口!


    (2). 持久性XSS攻击 (留言板场景)

      XSS攻击向量(一般指XSS攻击代码)存储在网站数据库,当一个页面被用户打开的时候执行。也就是说,每当用户使用浏览器打开指定页面时,脚本便执行。与非持久性XSS攻击相比,持久性XSS攻击危害性更大。从名字就可以了解到,持久性XSS攻击就是将攻击代码存入数据库中,然后客户端打开时就执行这些攻击代码。

    例如,留言板表单中的表单域:
    
    <input type=“text” name=“content” value=“这里是用户填写的数据”>
    • 1
    • 1

    正常操作流程是:用户是提交相应留言信息 —— 将数据存储到数据库 —— 其他用户访问留言板,应用去数据并显示;而非正常操作流程是攻击者在value填写:

    <script>alert(‘foolish!’);</script> <!--或者html其他标签(破坏样式。。。)、一段攻击型代码-->
    • 1
    • 1

    并将数据提交、存储到数据库中;当其他用户取出数据显示的时候,将会执行这些攻击性代码。


    4). 修复漏洞方针

      漏洞产生的根本原因是 太相信用户提交的数据,对用户所提交的数据过滤不足所导致的,因此解决方案也应该从这个方面入手,具体方案包括:

    • 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能 
      获取到cookie了(如果在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击);

    • 表单数据规定值的类型,例如:年龄应为只能为int、name只能为字母数字组合。。。。

    • 对数据进行Html Encode 处理

    • 过滤或移除特殊的Html标签,例如: <script>, <iframe> , < for <, > for>, &quot for

    • 过滤JavaScript 事件的标签,例如 “οnclick=”, “onfocus” 等等。

        需要注意的是,在有些应用中是允许html标签出现的,甚至是javascript代码出现。因此,我们在过滤数据的时候需要仔细分析哪些数据是有特殊要求(例如输出需要html代码、javascript代码拼接、或者此表单直接允许使用等等),然后区别处理!


    14、OSI网络体系结构与TCP/IP协议模型

      为了更好地了解计算机网络体系结构,笔者以两篇博客的篇幅来介绍这个计算机网络中最为重要的知识点,具体见《计算机网络体系结构综述(上)》 和 《计算机网络体系结构综述(下)》。下面只做简要的总结。

      在《计算机网络体系结构综述(下)》一文中,我们知道TCP/IP与OSI最大的不同在于:OSI是一个理论上的网络通信模型,而TCP/IP则是实际上的网络通信标准。但是,它们的初衷是一样的,都是为了使得两台计算机能够像两个知心朋友那样能够互相准确理解对方的意思并做出优雅的回应。现在,我们对OSI七层模型的各层进行简要的介绍:

              OSI网络体系结构与TCPIP协议模型.png-51.3kB


    1). 物理层

      参考模型的最低层,也是OSI模型的第一层,实现了相邻计算机节点之间比特流的透明传送,并尽可能地屏蔽掉具体传输介质和物理设备的差异,使其上层(数据链路层)不必关心网络的具体传输介质。


    2). 数据链路层(data link layer)

      接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层在物理层提供的比特流的基础上,通过差错控制、流量控制方法,使有差错的物理线路变为无差错的数据链路,即提供可靠的通过物理介质传输数据的方法。


    3). 网络层

      将网络地址翻译成对应的物理地址,并通过路由选择算法为分组通过通信子网选择最适当的路径。

              数据链路层与网路层.png-58.4kB


    4). 传输层(transport layer)

      在源端与目的端之间提供可靠的透明数据传输,使上层服务用户不必关系通信子网的实现细节。在协议栈中,传输层位于网络层之上,传输层协议为不同主机上运行的进程提供逻辑通信,而网络层协议为不同主机提供逻辑通信,如下图所示。

              网路层与传输层.png-52.8kB

      实际上,网络层可以看作是传输层的一部分,其为传输层提供服务。但对于终端系统而言,网络层对它们而言是透明的,它们知道传输层的存在,也就是说,在逻辑上它们认为是传输层为它们提供了端对端的通信,这也是分层思想的妙处。


    5). 会话层(Session Layer)

      会话层是OSI模型的第五层,是用户应用程序和网络之间的接口,负责在网络中的两节点之间建立、维持和终止通信。


    6). 表示层(Presentation Layer):数据的编码,压缩和解压缩,数据的加密和解密

      表示层是OSI模型的第六层,它对来自应用层的命令和数据进行解释,以确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。


    7). 应用层(Application layer):为用户的应用进程提供网络通信服务


    15、TCP和UDP分别对应的常见应用层协议

    1). TCP对应的应用层协议

    • FTP:定义了文件传输协议,使用21端口。常说某某计算机开了FTP服务便是启动了文件传输服务。下载文件,上传主页,都要用到FTP服务。

    • Telnet:它是一种用于远程登陆的端口,用户可以以自己的身份远程连接到计算机上,通过这种端口可以提供一种基于DOS模式下的通信服务。如以前的BBS是-纯字符界面的,支持BBS的服务器将23端口打开,对外提供服务。

    • SMTP:定义了简单邮件传送协议,现在很多邮件服务器都用的是这个协议,用于发送邮件。如常见的免费邮件服务中用的就是这个邮件服务端口,所以在电子邮件设置-中常看到有这么SMTP端口设置这个栏,服务器开放的是25号端口。

    • POP3:它是和SMTP对应,POP3用于接收邮件。通常情况下,POP3协议所用的是110端口。也是说,只要你有相应的使用POP3协议的程序(例如Fo-xmail或Outlook),就可以不以Web方式登陆进邮箱界面,直接用邮件程序就可以收到邮件(如是163邮箱就没有必要先进入网易网站,再进入自己的邮-箱来收信)。

    • HTTP:从Web服务器传输超文本到本地浏览器的传送协议。


    2). UDP对应的应用层协议

    • DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。

    • SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。

    • TFTP(Trival File Transfer Protocal):简单文件传输协议,该协议在熟知端口69上使用UDP服务。


    3). 图示

              TCP和UDP分别对应的常见应用层协议.png-41.5kB


    16、网络层的ARP协议工作原理

      网络层的ARP协议完成了IP地址与物理地址的映射。首先,每台主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。当源主机需要将一个数据包要发送到目的主机时,会首先检查自己ARP列表中是否存在该IP地址对应的MAC地址:如果有,就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址;源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。


    17、IP地址的分类

      IP地址是指互联网协议地址,是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。IP地址编址方案将IP地址空间划分为A、B、C、D、E五类,其中A、B、C是基本类,D、E类作为多播和保留使用,为特殊地址。

      每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。A~E类地址的特点如下:

    • A类地址:以0开头,第一个字节范围:0~127;

    • B类地址:以10开头,第一个字节范围:128~191;

    • C类地址:以110开头,第一个字节范围:192~223;

    • D类地址:以1110开头,第一个字节范围为224~239;

    • E类地址:以1111开头,保留地址


    1). A类地址:1字节的网络地址 + 3字节主机地址,网络地址的最高位必须是“0”

      一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为8位,主机标识的长度为24位,A类网络地址数量较少,有126个网络,每个网络可以容纳主机数达1600多万台。

      A类IP地址的地址范围1.0.0.0到127.255.255.255(二进制表示为:00000001 00000000 00000000 00000000 - 01111110 11111111 11111111 11111111),最后一个是广播地址。A类IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256的3次方-2=16777214台。


    2). B类地址: 2字节的网络地址 + 2字节主机地址,网络地址的最高位必须是“10”

      一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位,B类网络地址适用于中等规模的网络,有16384个网络,每个网络所能容纳的计算机数为6万多台。

      B类IP地址地址范围128.0.0.0-191.255.255.255(二进制表示为:10000000 00000000 00000000 00000000—-10111111 11111111 11111111 11111111),最后一个是广播地址。B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256的2次方-2=65534台。


    3). C类地址: 3字节的网络地址 + 1字节主机地址,网络地址的最高位必须是“110”

      一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位,C类网络地址数量较多,有209万余个网络。适用于小规模的局域网络,每个网络最多只能包含254台计算机。

      C类IP地址范围192.0.0.0-223.255.255.255(二进制表示为: 11000000 00000000 00000000 00000000 - 11011111 11111111 11111111 11111111)。C类IP地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台。


    4). D类地址:多播地址,用于1对多通信,最高位必须是“1110”

      D类IP地址在历史上被叫做多播地址(multicast address),即组播地址。在以太网中,多播地址命名了一组应该在这个网络中应用接收到一个分组的站点。多播地址的最高位必须是“1110”,范围从224.0.0.0到239.255.255.255。


    5). E类地址:为保留地址,最高位必须是“1111”


    18、IP地址与物理地址

      物理地址是数据链路层和物理层使用的地址,IP地址是网络层和以上各层使用的地址,是一种逻辑地址,其中ARP协议用于IP地址与物理地址的对应。


    21、 常见状态码及原因短语

      HTTP请求结构: 请求方式 + 请求URI + 协议及其版本 
      HTTP响应结构: 状态码 + 原因短语 + 协议及其版本


    • 1×× : 请求处理中,请求已被接受,正在处理

    • 2×× : 请求成功,请求被成功处理 
      200 OK

    • 3×× : 重定向,要完成请求必须进行进一步处理 
      301 : 永久性转移 
      302 :暂时性转移 
      304 : 已缓存

    • 4×× : 客户端错误,请求不合法 
      400:Bad Request,请求有语法问题 
      403:拒绝请求 
      404:客户端所访问的页面不存在

    • 5×× : 服务器端错误,服务器不能处理合法请求 
      500 :服务器内部错误 
      503 : 服务不可用,稍等 

    引用

    浅谈HTTP中Get与Post的区别 
    TCP的拥塞控制 
    Session简介 
    javaweb学习总结(十一)——使用Cookie进行会话管理 
    XSS跨站脚本攻

    展开全文
  • 计算机网络——计算机网络常见面试题总结

    万次阅读 多人点赞 2018-08-29 23:27:50
    一、三次握手和四次挥手的具体过程: 三次握手: server处于Listen状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了; 当client端socket执行connect连接时,首先发送SVN报文到server,进入SVN_SENT...

    转自https://blog.csdn.net/u012856866/article/details/76824726
    参考 https://blog.csdn.net/qzcsu/article/details/72861891

    一、OSI,TCP/IP,五层协议的体系结构,以及各层协议

    OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
    TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。
    五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。

    每一层的协议如下:

    物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器,网关)
    数据链路:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
    网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
    传输层:TCP、UDP、SPX
    会话层:NFS、SQL、NETBIOS、RPC
    表示层:JPEG、MPEG、ASII
    应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

    HTTP的长连接和短连接?

    HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议.

    短连接:浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

    长连接:当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。

    TCP短连接: client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起 close操作.短连接一般只会在 client/server间传递一次读写操作

    TCP长连接: client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

    每一层的作用如下:

    物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
    数据链路层:将比特组装成帧和点到点的传递(帧Frame)
    网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
    传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
    会话层:建立、管理和终止会话(会话协议数据单元SPDU)
    表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
    应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

    运输层协议与网络层协议的区别?

    网络层协议负责的是提供主机间的逻辑通信
    运输层协议负责的是提供进程间的逻辑通信

    数据链路层协议可能提供的服务?

    成帧、链路访问、透明传输、可靠交付、流量控制、差错检测、差错纠正、半双工和全双工。最重要的是帧定界(成帧)、透明传输以及差错检测。

    二、IP地址的分类

    A类地址:以0开头, 第一个字节范围:0~127(1.0.0.1 - 126.255.255.254);

    B类地址:以10开头, 第一个字节范围:128~191(128.0.0.1 - 191.255.255.254);

    C类地址:以110开头, 第一个字节范围:192~223(192.0.0.1- 223.255.255.254);

    10.0.0.0—10.255.255.255, 172.16.0.0—172.31.255.255, 192.168.0.0—192.168.255.255。(Internet上保留地址用于内部)

    IP地址与子网掩码相与得到主机号

    三、各种协议

    3.1 ARP是地址解析协议,简单语言解释一下工作原理。

    1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。

    2:当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。

    3:当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。

    4:源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
    广播发送ARP请求,单播发送ARP响应。

    3.2 ICMP协议:因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。

    3.3 TFTP协议:是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。

    3.4 HTTP协议:超文本传输协议,是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

    3.5 DHCP协议:动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。一个局域网的网络协议,使用UDP协议工作,用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。

    3.6 NAT协议:网络地址转换属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,

    3.7 RARP

    RARP是逆地址解析协议,作用是完成硬件地址到IP地址的映射,主要用于无盘工作站,因为给无盘工作站配置的IP地址不能保存。工作流程:在网络中配置一台RARP服务器,里面保存着IP地址和MAC地址的映射关系,当无盘工作站启动后,就封装一个RARP数据包,里面有其MAC地址,然后广播到网络上去,当服务器收到请求包后,就查找对应的MAC地址的IP地址装入响应报文中发回给请求者。因为需要广播请求报文,因此RARP只能用于具有广播能力的网络。

    四、三次握手和四次挥手的具体过程:

    三次握手:

    server处于Listen状态,表示服务器端的某个SOCKET处于监听状态,可以接受连接了;
    当client端socket执行connect连接时,首先发送SVN报文到server,进入SVN_SENT状态,等待server发送ACK;
    server接受到SVN进入SVN_RCVD状态,(很短暂,一般查询不到),发送SVN+ACK给client端;
    client端接受到server的ACK,发送ACK给server,server接收到后进入established状态,client也进入established状态。
    这里写图片描述
    建立TCP连接
    这里写图片描述

    四次挥手:

    client发起断开连接,给server发送FIN,进入FIN_WAIT1状态,表示client想主动断开连接;
    server接受到FIN字段后,会继续发送数据给client端,并发送ACK给client端,表明自己知道了,但是还没有准备好断开,请等我的消息;
    当server确定自己的数据已经发送完成,就发送FIN到client;
    client接受到来自server的FIN,发送ACK给server端,表示可以断开连接了,再等待2ms,没有收到server端的数据后,表示可以正常断开连接。
    这里写图片描述
    断开TCP连接成功
    这里写图片描述

    为什么TIME_WAIT状态还需要等2*MSL(Max SegmentLifetime,最大分段生存期)秒之后才能返回到CLOSED状态呢?

    因为虽然双方都同意关闭连接了,而且握手的4个报文也都发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SENT状态到ESTABLISH状态那样),但是我们必须假想网络是不可靠的,你无法保证你最后发送的ACK报文一定会被对方收到,就是说对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文

    为什么TCP连接要建立三次连接?

    为了防止失效的连接请求又传送到主机,因而产生错误。

    如果使用的是两次握手建立连接,假设有这样一种场景,客户端发送了第一个请求连接并且没有丢失,只是因为在网络结点中滞留的时间太长了,由于TCP的客户端迟迟没有收到确认报文,以为服务器没有收到,此时重新向服务器发送这条报文,此后客户端和服务器经过两次握手完成连接,传输数据,然后关闭连接。此时此前滞留的那一次请求连接,网络通畅了到达了服务器,这个报文本该是失效的,但是,两次握手的机制将会让客户端和服务器再次建立连接,这将导致不必要的错误和资源的浪费。

    如果采用的是三次握手,就算是那一次失效的报文传送过来了,服务端接受到了那条失效报文并且回复了确认报文,但是客户端不会再次发出确认。由于服务器收不到确认,就知道客户端并没有请求连接。

    为什么要4次挥手?

    TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,是一个全双工模式:
    1、当主机A确认发送完数据且知道B已经接受完了,想要关闭发送数据口(当然确认信号还是可以发),就会发FIN给主机B。

    2、主机B收到A发送的FIN,表示收到了,就会发送ACK回复。

    3、但这是B可能还在发送数据,没有想要关闭数据口的意思,所以FIN与ACK不是同时发送的,而是等到B数据发送完了,才会发送FIN给主机A。

    4、A收到B发来的FIN,知道B的数据也发送完了,回复ACK, A等待2MSL以后,没有收到B传来的任何消息,知道B已经收到自己的ACK了,A就关闭链接,B也关闭链接了。
    确保数据能够完成传输。

    如果已经建立了连接,但是客户端突然出现故障了怎么办?

    TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75分钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

    例子:

    三次握手:
    A:“喂,你听得到吗?”A->SYN_SEND

    B:“我听得到呀,你听得到我吗?”应答与请求同时发出 B->SYN_RCVD | A->ESTABLISHED

    A:“我能听到你,今天balabala……”B->ESTABLISHED

    四次挥手:
    A:“喂,我不说了。”A->FIN_WAIT1

    B:“我知道了。等下,上一句还没说完。Balabala…..”B->CLOSE_WAIT | A->FIN_WAIT2

    B:”好了,说完了,我也不说了。”B->LAST_ACK

    A:”我知道了。”A->TIME_WAIT | B->CLOSED

    A等待2MSL,保证B收到了消息,否则重说一次”我知道了”,A->CLOSED

    五、在浏览器中输入www.baidu.com后执行的全部过程

    1、客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。

    2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。

    3、客户端的网络层不用关系应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。

    4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

    六、TCP和UDP的区别?

    区别 TCP UDP
    1.连接 面向连接 面向非连接
    2.可靠性 可靠 非可靠
    3.有序性 有序 不保证有序
    4.速度
    5.量级 重量级 轻量级
    6.拥塞控制或流量控制 没有
    7 面向字节流,无记录边界 面向报文,有记录边界
    8 只能单播 可以广播或组播
    9.应用场景 效率低,准确性高 效率高,准确性低

    TCP对应的协议和UDP对应的协议

    TCP对应的协议:

    (1) FTP:定义了文件传输协议,使用21端口。

    (2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。

    (3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。

    (4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。

    (5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。

    UDP对应的协议:

    (1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。

    (2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。

    (3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

    端口及对应的服务?

    服务 端口号 服务 端口号
    FTP 21 SSH 22
    telnet 23 SMTP 25
    Domain(域名服务器) 53 HTTP 80
    POP3 110 NTP(网络时间协议) 123
    MySQL数据库服务 3306 Shell或 cmd 514
    POP-2 109 SQL Server 1433

    TCP/IP的流量控制?

    利用滑动窗口实现流量控制,如果发送方把数据发送得过快,接收方可能会来不及接收,这就会造成数据的丢失。所谓流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。

    TCP为每一个连接设有一个持续计时器(persistence timer)。只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。若持续计时器设置的时间到期,就发送一个零窗口控测报文段(携1字节的数据),那么收到这个报文段的一方就重新设置持续计时器。

    TCP拥塞控制?

    防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。

    拥塞控制代价:需要获得网络内部流量分布的信息。在实施拥塞控制之前,还需要在结点之间交换信息和各种命令,以便选择控制的策略和实施控制。这样就产生了额外的开销。拥塞控制还需要将一些资源分配给各个用户单独使用,使得网络资源不能更好地实现共享。

    几种拥塞控制方法:

    慢开始(slow-start )、拥塞避免(congestion avoidance )、快重传( fastretransmit )和快恢复( fastrecovery )。

    慢开始和拥塞避免

    发送方维持一个拥塞窗口cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。
    发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
    慢开始算法:当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。

    每经过一个传输轮次,拥塞窗口 cwnd 就加倍。一个传输轮次所经历的时间其实就是往返时间RTT。不过“传输轮次”更加强调:把拥塞窗口cwnd所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。
    另,慢开始的“慢”并不是指cwnd的增长速率慢,而是指在TCP开始发送报文段时先设置cwnd=1,使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况),然后再逐渐增大cwnd。
    为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量(如何设置ssthresh)。慢开始门限ssthresh的用法如下:
    当 cwnd < ssthresh 时,使用上述的慢开始算法。
    当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
    当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
    拥塞避免算法:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。
    无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。过程图如下:
    这里写图片描述

    快速重传:

    那就是收到3个相同的ACK。TCP在收到乱序到达包时就会立即发送ACK,TCP利用3个相同的ACK来判定数据包的丢失,此时进行快速重传,快速重传做的事情有:

    1. 把ssthresh设置为cwnd的一半
    2. 把cwnd再设置为ssthresh的值(具体实现有些为ssthresh+3)
    3. 重新进入拥塞避免阶段。

    快速恢复:

    1. 当收到3个重复ACK时,把ssthresh设置为cwnd的一半,把cwnd设置为ssthresh的值加3,然后重传丢失的报文段,加3的原因是因为收到3

    2. 再收到重复的ACK时,拥塞窗口增加1。

    3. 收到新的数据包的ACK时,把cwnd设置为第一步中的ssthresh的值。原因是因为该ACK确认了新的数据,说明从重复ACK时的数据都已收到,该恢复过程已经结束,可以回到恢复之前的状态了,也即再次进入拥塞避免状态。

    七、IP数据包的格式

    IP数据报由首部 和数据 两部分组成。首部由固定部分和可选部分 组成。首部的固定部分有20字节。可选部分的长度变化范围为1——40字节。固定部分的字段:

    字段名 位数(bit) 字段名 位数
    版本 4 Ipv4 首部长度 4(表示的最大数为15个单位,一个单位表示4字节)
    服务类型 8 以前很少用 总长度 16 (首部和数据部分的总长度,因此数据报的最大长度为65535字节,即64KB,但是由于链路层的MAC都有一定的最大传输单元,因此IP数据报的长度一般都不会有理论上的那么大,如果超出了MAC的最大单元就会进行分片)
    标识 16 (相同的标识使得分片后的数据报片能正确的重装成原来的数据报) 标志 3 (最低位MF=1表示后面还有分片,MF=0表示这是若干个数据报片的最后一个中间位DF=0才允许分片)
    片偏移 片偏移指出较长的分组在分片后,某片在原分组中的相对位置,都是8字节的偏移位置 生存时间 数据报在网络中的生存时间,指最多经过路由器的跳数
    协议 8 (指出该数据报携带的数据是何种协议,以使得目的主机的IP层知道应将数据部分上交给哪个处理程序)如ICMP=1 IGMP=2 TCP=6 EGP=8 IGP=9 UDP=17 Ipv6=41 OSPF=89 首部校验和 这个部分只校验首部,不包括数据部分,计算方法:将首部划分为多个16位的部分,然后每个16位部分取反,然后计算和,再将和取反放到首部校验和。接收方收到后按同样的方法划分,取反,求和,在取反,如果结果为零,则接收,否则就丢弃
    源地址 32 目的地址 32

    八、TCP数据报的格式?

    这里写图片描述
    一个TCP报文段分为首部和数据两部分。首部由固定部分和选项部分组成,固定部分是20字节。TCP首部的最大长度为60。首部固定部分字段:
    这里写图片描述

    TCP的12字节伪首部:

    源IP地址(4) 目的IP地址(4) 0 (1) 6(1) 代表这是TCP,IP协议中提到过 TCP长度(2)

    TCP数据报的格式?

    用户数据报UDP由首部和数据部分组成。首部只有8个字节,由4个字段组成,每个字段都是两个字节。

    字段名 字节 字段名 字节
    源端口 2 目的端口 2
    长度 2 检验和 2 (检验首部和数据,加12字节的伪首部)

    UDP的12字节伪首部:

    源IP地址(4) 目的IP地址(4) 0 (1) 17(1) 代表这是UDP UDP长度(2)

    以太网MAC帧格式?

    前导码 前定界符 目的地址 源目的地址 长度字段 数据字段 校验字段
    7B 1B 6B 6B 2B 46-1500 4B

    九、了解交换机、路由器、网关的概念,并知道各自的用途

    1)交换机

    在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背 部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部 交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表 中。

    交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张 ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不 能划分网络层广播,即广播域。

    交换机被广泛应用于二层网络交换,俗称“二层交换机”。

    交换机的种类有:二层交换机、三层交换机、四层交换机、七层交换机分别工作在OSI七层模型中的第二层、第三层、第四层和第七层,并因此而得名。

    2)路由器

    路由器(Router)是一种计算机网络设备,提供了路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过 的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转 送。路由工作在OSI模型的第三层——即网络层,例如网际协议。

    路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。 路由器与交换器的差别,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。

    说说静态路由和动态路由有什么区别。

    静态路由是由管理员手工配置的,适合比较简单的网络或需要做路由特殊控制。而动态路由则是由动态路由协议自动维护的,不需人工干预,适合比较复杂大型的网络。
    路由器能够自动地建立自己的路由表,并且能够根据实际实际情况的变化适时地进行调整。动态路由机制的运作依赖路由器的两个基本功能:对路由表的维护;路由器之间适时的路由信息交换。

    在Linux环境中怎么配置一条默认路由?

    在linux上可以用“route add default gw<默认路由器 IP>”命令配置一条默认路由。

    3)网关

    网关(Gateway),网关顾名思义就是连接两个网络的设备,区别于路由器(由于历史的原因,许多有关TCP/IP 的文献曾经把网络层使用的路由器(Router)称为网关,在今天很多局域网采用都是路由来接入网络,因此现在通常指的网关就是路由器的IP),经常在家 庭中或者小型企业网络中使用,用于连接局域网和Internet。 网关也经常指把一种协议转成另一种协议的设备,比如语音网关。

    在传统TCP/IP术语中,网络设备只分成两种,一种为网关(gateway),另一种为主机(host)。网关能在网络间转递数据包,但主机不能 转送数据包。在主机(又称终端系统,end system)中,数据包需经过TCP/IP四层协议处理,但是在网关(又称中介系 统,intermediate system)只需要到达网际层(Internet layer),决定路径之后就可以转送。在当时,网关 (gateway)与路由器(router)还没有区别。

    在现代网络术语中,网关(gateway)与路由器(router)的定义不同。网关(gateway)能在不同协议间移动数据,而路由器(router)是在不同网络间移动数据,相当于传统所说的IP网关(IP gateway)。

    网关是连接两个网络的设备,对于语音网关来说,他可以连接PSTN网络和以太网,这就相当于VOIP,把不同电话中的模拟信号通过网关而转换成数字信号,而且加入协议再去传输。在到了接收端的时候再通过网关还原成模拟的电话信号,最后才能在电话机上听到。

    对于以太网中的网关只能转发三层以上数据包,这一点和路由是一样的。而不同的是网关中并没有路由表,他只能按照预先设定的不同网段来进行转发。网关最重要的一点就是端口映射,子网内用户在外网看来只是外网的IP地址对应着不同的端口,这样看来就会保护子网内的用户。

    4)网络接口卡(网卡)的功能?

    (1)进行串行/并行转换。

    (2)对数据进行缓存。

    (3)在计算机的操作系统安装设备驱动程序。

    (4)实现以太网协议。
    5)网桥的作用?

    网桥是一个局域网与另一个局域网之间建立连接的桥梁

    十、IO中同步与异步,阻塞与非阻塞区别

    同步和异步关注的是消息通信机制 (synchronous communication/asynchronous communication)
    所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。
    换句话说,就是由调用者主动等待这个调用的结果。
    而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。

    阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

    阻塞调用是指调用结果返回之前,当前线程会被挂起。函数只有在得到结果之后才会返回。

    非阻塞:不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。

    展开全文
  • 网络协议:是计算机网络和分布系统中互相通信的对等实体间交换信息时所必须遵守的规则的集合。 语法(syntax):包括数据格式、编码及信号电平等。 语义(semantics):包括用于协议和差错处理的控制信息。 定时(t...

    1、网络体系结构


    1.1 基本概念:

    网络体系结构(network architecture):是计算机之间相互通信的层次,以及各层中的协议和层次之间接口的集合。

    网络协议:是计算机网络和分布系统中互相通信的对等实体间交换信息时所必须遵守的规则的集合。

    语法(syntax):包括数据格式、编码及信号电平等。

    语义(semantics):包括用于协议和差错处理的控制信息。

    定时(timing):包括速度匹配和排序。


    1.2 简介

    1978年ISO提出了”异种机连网标准”的框架结构,这就是著名的开放系统互联基本参考模型 OSI/RM (Open Systems Interconnection Reference Modle),简称为 OSI 。

    OSI参考模型用物理层、数据链路层、网络层、传输层、对话层、表示层和应用层七个层次描述网络的结构,它的规范对所有的厂商是开放的,具有指导国际网络结构和开放系统走向的作用。它直接影响总线、接口和网络的性能。常见的网络体系结构有FDDI、以太网、令牌环网和快速以太网等。从网络互连的角度看,网络体系结构的关键要素是协议和拓扑。


    1.3 OSI模型

    第一层:物理层(PhysicalLayer)

    规定通信设备的机械的、电气的、功能的和规程的特性,用以建立、维护和拆除物理链路连接。具体地讲,机械特性定了网络连接时所需接插件的规格尺寸、引脚数量和排列情况等;电气特性规定了在物理连接上传输bit流时线路上信号电平的大小、阻抗匹配、传输速率距离限制等;功能特性是指对各个信号先分配确切的信号含义,即定义了DTE和DCE之间各个线路的功能;规程特性定义了利用信号线进行bit流传输的一组操作规程,是指在物理连接的建立、维护、交换信息时,DTE和DCE双方在各电路上的动作系列。

    在这一层,数据的单位称为比特(bit)。物理层的主要设备:中继器、集线器、适配器。

    第二层:数据链路层(DataLinkLayer)

    物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。

    数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。

    在这一层,数据的单位称为帧(frame)。

    数据链路层主要设备:二层交换机、网桥。

    第三层:网络层(Networklayer)

    在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点,确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。

    如果你在谈论一个IP地址,那么你是在处理第3层的问题,这是”数据包”问题,而不是第2层的”帧”。IP是第3层问题的一部分,此外还有一些路由协议和地址解析协议(ARP)。有关路由的一切事情都在第3层处理。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。

    在这一层,数据的单位称为数据包(packet)。

    网络层协议的代表包括:IP、IPX、RIP、ARP、RARP、OSPF等。

    网络层主要设备:路由器

    第四层:传输层(Transportlayer)

    第4层的数据单元也称作处理信息的传输层(Transport layer)。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段(segments)而UDP协议的数据单元称为”数据报(datagrams)”。这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所谓透明的传输是指在通信过程中传输层对上层屏蔽了通信传输系统的具体细节。

    传输层协议的代表包括:TCP、UDP、SPX等。

    第五层:会话层(Sessionlayer)

    这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。

    第六层:表示层(Presentationlayer)

    这一层主要解决用户信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责。例如图像格式的显示,就是由位于表示层的协议来支持。

    第七层:应用层(Applicationlayer)

    应用层为操作系统或网络应用程序提供访问网络服务的接口。

    应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。


    2、TCP和UDP有什么区别

    2.1 UDP (User Data Protocol,用户数据报协议)

    首先UDP协议是无连接,不可靠,面向数据报的。

    无连接:知道对端的IP和端⼝号就直接进⾏传输, 不需要建⽴连接;
    不可靠: UDP没有确认机制来确保报文的到达,没有对报文进行排序的机制,也不提供反馈信息来控制端到端报文传输的速度,所以它的传输是不可靠的。
    面向数据报:不能够灵活的控制读写数据的次数和数量。

    UDP常用端口:

    • 53:DNS域名服务
    • 69:TFTP(简单文件传输协议)
    • 123:NTP(网络时间协议)
    • 161:SNMP(简单网络管理协议)
    • 162:SNMP(简单网络管理协议:陷阱)
    • 520:RIP(路由信息协议)

    2.1 TCP(Transmission Control Protocol,传输控制协议)

    TCP协议是面向连接的,可靠地,面向字节的。

    连接管理机制:

    正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接。

    确认应答(ACK)机制:

    TCP主机A每次给主机B发送一次数据,主机B都要给主机A发送一个确认应答(每一个ACK都带有对应的确认序列号,告诉发送者我已经收到了那些数据,下一次该从哪里开始发)。

    超时重传机制:

    如果主机A发送给主机B的数据因为网络拥堵等原因丢包了,数据无法到达主机B。
    在特定时间内,主机A没有接收到主机B发送回来的ACK,就会把数据进行重发。

    滑动窗口:

    因为加入了确认应答机制和超时重传机制,导致性能变差,为了提高性能,引入滑动窗口机制。

    即两主机发送数据帧时,不是一帧帧的发送,而是每次发送指定窗口大小的数据帧(当然可以不满,窗口的大小取决于接收窗口和拥塞窗口中的较小值)。

    TCP滑动窗口工作过程如下:

    1. 双方在建立连接时确定发送和接受的字节序号,确定最大段长度MSS的值为标准长度(确定发送和接受的窗口)。
    2. 发送方发送一个报文(其数据长度为MSS)后启动计时器,转到步骤4等待接收方应答。
    3. 接收方收到报文后给出应答,其中包含的窗口值即为可以接受的字节数,调整可接收的序列号(接受窗口)。
    4. 发送方等待接收方应答,如果收到对方的应答,则根据接收到的应答报文段中的窗口值更新自己的MSS值,转到步骤二。
    5. 发送方如果超时未接收到对方应答,则重传该报文段后启动计时器,转到步骤四。

    流量控制:

    接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继⽽引起丢包重传等等⼀系列连锁反应。

    因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制就叫做流量控制。

    拥塞控制:

    虽然TCP有了滑动窗⼝机制, 能够⾼效可靠的发送⼤量的数据. 但是如果在刚开始阶段就发送⼤量的数据, 仍然可能引发问题。
    因为网络上有很多的计算机, 可能当前的网络状态就已经比较拥堵。在不清楚当前网络状态下,贸然发送大量的数据,很有可能造成严重的问题。

    TCP引入慢启动机制,先发少量的数据,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据。

    拥塞窗口的增长速度,是指数级别的。“慢启动”只是初始时慢,但是增长速度非常快。为了不增长的那么快,因此不能使拥塞窗口单纯的加倍,此处引用一个叫做慢启动的阈值,当拥塞窗口超过这个阈值的时候,不再按照指数方式增长,而是按照线性方式增长。

    延迟应答:

    如果接收数据的主机⽴刻返回ACK应答, 这时候返回的窗⼝可能⽐较⼩。

    但实际上可能接收端的处理端的速度很快,很快就会将发送来的数据从缓冲区消费掉,这种情况下,接收端处理远不能达到自己的极限,即使窗口再大一些也可以处理过来。

    因此引入延时应答机制,接收端每次都略等一会在应答,这时候返回的窗口大小就又会变大,从而在保证了网络不拥塞的情况下尽量提高了传输效率。窗口越大,网络吞吐量就越大,传输效率就越高。

    捎带应答:

    在延时应答的基础上,发送端与接收端在应用层也是“一发一收”的,在这个基础上,捎带应答就是令ACK与接收端回送的消息一起回给客户端。

    面向字节流:

    TCP通过字节流传输,即TCP将应用程序看成是一连串的无结构的字节流。每个TCP套接口有一个发送缓冲区,如果字节流太长时,TCP会将其拆分进行发送。当字节流太短时,TCP会等待缓冲区中的字节流达到一定程度时再构成报文发送出去,TCP发给对方的数据,对方在收到数据时必须给矛确认,只有在收到对方的确认时,本方TCP才会把TCP发送缓冲区中的数据删除。


    3.什么是网络套接字(Socket)?流套接字(SOCK_STREAM)基于什么协议?

    3.1 套接字(socket)

    TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字(socket)或插口。

    套接字用(IP地址:端口号)表示。

    它是网络通信过程中端点的抽象表示,包含进行网络通信必需的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。

    3.2 流套接字(SOCK_STREAM)

    流式套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流式套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。

    流式套接字提供没有记录边界的数据流:可以是双向的字节流(应用程序是全双工:可以通过套接字同时传输和接收)。可依赖流传递有序的、不重复的数据。(“有序”指数据包按发送顺序送达。”不重复”指一个特定的数据包只能获取一次。)这能确保收到流消息,而流非常适合处理大量数据。


    4、IP首部,TCP首部,UDP首部

    4.1 IP首部

    这里写图片描述

    • 版本:占4位,用于标识该数据报的IP协议的版本信息,对于IPv4,该字段值为4,对于IPv6,该字段值为6。无论是主机还是中间路由器,在处理每个接收到的IP数据报时,根据版本值以选择相应版本的IP协议模块来进行处理。
    • 首部长度:占4位,用于表示IP数据报首部的长度,其值以32位(4字节)为单位,因此,IP首部长度必须是32位的整数倍。当IP数据报首部长度不是32位的整数倍时,必须用填充字段加以填充来补齐32位。如果IP数据报长度为20个字节,该字段值为5。
    • 区分服务:占8位,用来获得更好的服务。这个字段在旧标准中称为服务类型ToS( Type of Service)。它包括优先权字段(3位,现在已不用)、ToS字段(4位,分别表示最小时延、最大吞吐量、最高可靠性和最小费用)、未用字段(1位)。
    • 总长度:占16位,总长度是指IP首部和数据部分长度之和,单位为字节。IP数据
      报的最大长度为215-1=65535字节。但是,这并不意味着IP数据报必须都按最大长度来组织。因为数据链路层存在着最大传送单元MTU( Maximum Transfer Unit)或网络中可能存在其他因素的限制。
    • 标识:占16位。标识的作用是当IP数据报在传输过程中由于低层网络传输限制而需要分片时,同一个P数据报的每个分片所共有的标记,表示这些分片属于同一个IP数据报,以便在目的主机重组这些分片时参照使用。标识的产生:IP层维持着个计数器,每产生一个IP数据报,计数器就加1,并将该值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。
    • 标志:占3位。第1位保留;第2位为不分片标志,记为DF(Don' t Fragment),当DF=1时,表示此IP数据报不允许被分片;当DF=0时,表示此IP数据报允许被分片;第3位为更多分片标志,记为MF( More Fragment),当MF=1时,表示此分片不是最后分片,其后还有更多分片;当MF=0时,表示此分片是最后分片,其后没有其他分片。
    • 片偏移:占13位。片偏移的作用是指明此分片在原IP数据报(未分片前)中的绝对位置,其值以8字节为单位。因为IP数据报的传输受物理网络的MTU限制,当
      个IP数据报较大,无法承载在数据链路层的一个帧中传输时,IP协议需要将IP数据报划分成多个较小的分片,并为每个分片构造一个单独的IP数据报,以适应物理网络的传输。
    • 寿命TTL( Time to Live):也称为生存时间,占8位。TTL以秒为单位设置了该IP数据报在互联网中允许存在的时间。当IP数据报经过主机或路由器时,它们将对数据报进行处理,根据时间的消逝,递减TTL的值。一旦TTL递减至0,路由器就丢弃该数据报,并向源主机发送一个ICMP超时差错报告报文。但是由于计算IP
      数据报延迟比较复杂,而且不准确。因此现在的路由器大多采用IP数据报所经过
      的路由器数量来计算TTL值,每经过一个路由器,TTL减1,直到减为0为止,这种计算方法又称为跳数(Hop)衡量法。
    • 协议:占8位,用于指出IP数据报携带的数据属于哪一种高层协议,该字段的值是高层协议对应的编号。
    • 首部校验和:占16位。用用于保证IP数据报首部数据的完整性。其计算方法是将首部看作一个16位的整数序列,对每个整数分别进行二进制反码相加,然后再对计算的结果求反。
    • 源IP地址和目的IP地址:各占32位,分别为发送主机的IP地址和接收主机的IP地址。IP数据报在传输过程中可能经过多个中间路由器,但这两个字段值在传送期间始终不变。
    • IP选项:可选项,长度可变。常用于网络测试和调试。目前常用的IP选项有记录路由选项、源路由选项和时间戳选项等。
    • 记录路由选项:用来监视和控制互联网路由器如何路由数据报。
    • 源路由选项:分为严格源路由选项和宽松源路由选项。严格源路由选项规定IP数据报必须严格按照指定的路径到达目的主机,否则报告错误。宽松源路由选项要求IP数据报必须沿着IP地址表中的地址序列传输,但允许表中相继两个地址之间经过其他的IP地址。
    • 时间戳选项:用于测量IP数据报路由过程中所经过的每个路由器的时间,便于对路由的性能进行分析。
    • 填充:可可选项,长度可变,取决于IP选项的长度,其目的是保证数据报首部为32位的整数倍。填充时,填充内容全为“0”。

    4.2 UDP协议

    这里写图片描述

    • 源端口和目的端口:源端口和目的端口字段各为16位(2字节),它是UDP协议的端口号,其中源端口是可选的(因为UDP不需要反馈信息,因此源端口基本不起作用),目的端口必须填写。若源端口不选,则取值为0。
    • 长度:长度字段为16位(2字节),它是指UDP报文的总长度,包括UDP首部和用户数据两部分,长度以字节为单位。
    • 校验和:校校验和字段为16位(2字节),UDP的校验和字段是保证UDP数据正确的惟一手段。计算UDP校校验和时必须包括UDP伪首部、UDP首部和用户数据3个部分。

    4.3 TCP协议

    这里写图片描述

    • 源端口号和目的端口号:各占2字节,分别表示发送方和接收方的应用程序端口号。
    • 序列号:占4字节,指派给该报文段第一个数据字节的一个号,表示该数据在发送方的数据流中的位置。初始序列号一般并不是从1开始的,而是根据采用某些算法计算出的一个数值作为起始序列号(5.3.3节讲述)。这样做的目的是为避免出现重复序列号。
    • 确认号:占4字节,确认号是接收方期望收到对方的下一个报文段数据的第一个字节的序号,也就是期望收到对方的下一个TCP报文段首部序列号字段的值。
    • 首部长度:占4位,表示TCP报文首部信息的长度。由于首部可能含有选项内容,因此TCP首部的长度是不确定的。首部长度的单位不是字节而是32位(以4字节为计算单位),其范围是5~15,对应首部的长度是20~~60字节。首部长度也指示了数据区在报文段中的起始偏移值。
    • 保留:占6位,保留为今后使用。目前为全0。
    • 紧急标志URG(U):占1位,当URG=1时,表示紧急指针字段有效。通知发送方本数据报文段中含有紧急数据,需要马上传输,这时发送方不会等到缓冲区满再发送,而是直接优先将该报文段发送出去。
    • 确认标志ACK(A):占1位,当ACK=1时,表示确认号字段有效。
    • 推送标志PSH(P):占1位,PSH=1时,表示当前报文段需要请求推送(Push)操作,即接收方TCP收到推送标志为1的报文时,就立即提交给接收的应用进程,而不必等到整个缓存都填满后再向上提交。
    • 复位标志RST(R):占1位,当RST=1时,表表示TCP连接中出现严重差错(如主机崩溃或其他原因),必须先释放连接,然后再重新建立传输连接。
    • 同步标志SYN(S):占1位,当SYN=1时,表示这是一个连接请求或连接接收报文,用于建立传输连接。
    • 终止标志FIN(F):占1位,当FIN=1时,表示此报文段的发送方的数据已发送完毕,并要求释放传输连接。
    • 窗口大小:占2字节,它是窗口通告值。该值由接收方设置,发送方根据接收到的窗口通告值来来调整发送窗口的大小。通过窗口机制,可以控制发送方发送的数据量,实现流量控制。
    • 校验和:占2字节,TCP的校验和是必选项,它的计算方法与UDP校验和的计算方法相同,同样需要包含TCP伪首部。TCP伪首部中的协议类型值为6(UDP伪首部中的协议类型为17)
    • 紧急指针:占2字节,与紧急标志URG配合使用。在TCP通信中,如果一方有紧急的数据(例如中断或退出命令等)需要尽快发送给另一方,并且让接收方的TCP协议尽快通知相应的应用程序时,可以将URG位置1,并通过紧急指针指示紧急数在报文段中的结束位置。
    • 选项:长度可变,可以是一个或多个字节,规定相应的功能。每个选项由类型、长度、数据3部分组成。
    • MSS:用于TCP连接双方在建立连接时相互告知对方期望的最大报文段长度MSS值。
    • 填充:为了使选项字段对齐32位,可以采用若干0作为填充数据。
    展开全文
  • 计算机网络常见面试

    千次阅读 2018-09-06 10:48:24
     IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络。  2)广播地址  广播地址通常称为直接广播地址,是为了区分受限广播地址。  广播地址与网络地址的主机号正好...

    IP地址

     1)网络地址

      IP地址由网络号(包括子网号)和主机号组成,网络地址的主机号为全0,网络地址代表着整个网络。

      2)广播地址

      广播地址通常称为直接广播地址,是为了区分受限广播地址。

      广播地址与网络地址的主机号正好相反,广播地址中,主机号为全1。当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。

      3)组播地址

      D类地址就是组播地址。

      先回忆下A,B,C,D类地址吧:

      A类地址以0开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255;(modified @2016.05.31)

      B类地址以10开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255;

      C类地址以110开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255。

      D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址作为组播地址(一对多的通信);

      E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用。

      注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。

      4)255.255.255.255

      该IP地址指的是受限的广播地址。受限广播地址与一般广播地址(直接广播地址)的区别在于,受限广播地址只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;一般广播地址既可在本地广播,也可跨网段广播。例如:主机192.168.1.1/30上的直接广播数据包后,另外一个网段192.168.1.5/30也能收到该数据报;若发送受限广播数据报,则不能收到。

      注:一般的广播地址(直接广播地址)能够通过某些路由器(当然不是所有的路由器),而受限的广播地址不能通过路由器。

      5)0.0.0.0

      常用于寻找自己的IP地址,例如在我们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围(具体而言是被各个路由器屏蔽的范围内)的服务器发送IP请求分组。

      6)回环地址

      127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1。

      7)A、B、C类私有地址

      私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。

      A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255

      B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255

      C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255

    子网掩码及网络划分

    随着互连网应用的不断扩大,原先的IPv4的弊端也逐渐暴露出来,即网络号占位太多,而主机号位太少,所以其能提供的主机地址也越来越稀缺,目前除了使用NAT在企业内部利用保留地址自行分配以外,通常都对一个高类别的IP地址进行再划分,以形成多个子网,提供给不同规模的用户群使用。

      这里主要是为了在网络分段情况下有效地利用IP地址,通过对主机号的高位部分取作为子网号,从通常的网络位界限中扩展或压缩子网掩码,用来创建某类地址的更多子网。但创建更多的子网时,在每个子网上的可用主机地址数目会比原先减少。

      什么是子网掩码?

      子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。

      在计算子网掩码时,我们要注意IP地址中的保留地址,即“ 0”地址和广播地址,它们是指主机地址或网络地址全为“ 0”或“ 1”时的IP地址,它们代表着本网络地址和广播地址,一般是不能被计算在内的。

      子网掩码的计算:

      对于无须再划分成子网的IP地址来说,其子网掩码非常简单,即按照其定义即可写出:如某B类IP地址为 10.12.3.0,无须再分割子网,则该IP地址的子网掩码255.255.0.0。如果它是一个C类地址,则其子网掩码为 255.255.255.0。其它类推,不再详述。下面我们关键要介绍的是一个IP地址,还需要将其高位主机位再作为划分出的子网网络号,剩下的是每个子网的主机号,这时该如何进行每个子网的掩码计算。

      下面总结一下有关子网掩码和网络划分常见的面试考题:

      1)利用子网数来计算

      在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。

      (1) 将子网数目转化为二进制来表示;

      如欲将B类IP地址168.195.0.0划分成27个子网:27=11011;

      (2) 取得该二进制的位数,为N;

      该二进制为五位数,N = 5

      (3) 取得该IP地址的类子网掩码,将其主机地址部分的的前N位置1即得出该IP地址划分子网的子网掩码。

      将B类地址的子网掩码255.255.0.0的主机地址前5位置 1,得到 255.255.248.0

      2)利用主机数来计算

      如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:

      (1) 将主机数目转化为二进制来表示;

      700=1010111100;

      (2) 如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为N,这里肯定 N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位;

      该二进制为十位数,N=10;

      (3) 使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。

      将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255,然后再从后向前将后 10位置0,即为:11111111.11111111.11111100.00000000,即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址 168.195.0.0的子网掩码。

      3)还有一种题型,要你根据每个网络的主机数量进行子网地址的规划和计算子网掩码。这也可按上述原则进行计算。

      比如一个子网有10台主机,那么对于这个子网需要的IP地址是:

      10+1+1+1=13

      注意:加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网络地址和广播地址。

      因为13小于16(16等于2的4次方),所以主机位为4位。而256-16=240,所以该子网掩码为255.255.255.240。

      如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为14+1+1+1=17,17大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224。

    ARP/RARP协议

    地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;由此攻击者就可以向某一主机发送伪ARP应答报文,使其发送的信息无法到达预期的主机或到达错误的主机,这就构成了一个ARP欺骗。ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系、添加或删除静态对应关系等。

    ARP协议工作流程:

      逆地址解析协议,即RARP,功能和ARP协议相对,其将局域网中某个主机的物理地址转换为IP地址,比如局域网中有一台主机只知道物理地址而不知道IP地址,那么可以通过RARP协议发出征求自身IP地址的广播请求,然后由RARP服务器负责回答。

      RARP协议工作流程:

      (1)给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;

      (2)本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址;

      (3)如果存在,RARP服务器就给源主机发送一个响应数据包并将此IP地址提供给对方主机使用;

      (4)如果不存在,RARP服务器对此不做任何的响应;

      (5)源主机收到从RARP服务器的响应信息,就利用得到的IP地址进行通讯;如果一直没有收到RARP服务器的响应信息,表示初始化失败。

    请简述TCP/UDP的区别

    TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
    两者的区别大致如下:

    • TCP面向连接,UDP面向非连接即发送数据前不需要建立链接
    • TCP提供可靠的服务(数据传输),UDP无法保证
    • TCP面向字节流,UDP面向报文
    • TCP数据传输慢,UDP数据传输快
    • TCP提供一种面向连接的、可靠的字节流服务
    • 在一个TCP连接中,仅有两方进行彼此通信,因此广播和多播不能用于TCP
    • TCP使用校验和,确认和重传机制来保证可靠传输
    • TCP使用累积确认
    • TCP使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制

    TCP和UDP的应用场景

    TCP:当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。 
    在日常生活中,常见使用TCP协议的应用如:浏览器,用的HTTP;FlashFXP,用的FTP;Outlook,用的POP、SMTP;Putty,用的Telnet、SSH;QQ文件传输

    UDP:当强调传输性能而不是传输的完整性时, 要求网络通讯速度能尽量的快。如:QQ语音 QQ视频等。

    TCP对应的协议和UDP对应的协议

    TCP对应的协议:

    • FTP:定义了文件传输协议,使用21端口。
    • Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
    • SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
    • POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
    • HTTP:是从Web服务器传输超文本到本地浏览器的传送协议,端口默认80。

    UDP对应的协议:

    • DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
    • SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
    • TFTP(Trival File TransferProtocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

    为什么 TCP 叫数据流模式? UDP 叫数据报模式?

    • 所谓的“流模式”,是指TCP发送端发送几次数据和接收端接收几次数据是没有必然联系的,比如你通过 TCP连接给另一端发送数据,你只调用了一次 write,发送了100个字节,但是对方可以分10次收完,每次10个字节;你也可以调用10次write,每次10个字节,但是对方可以一次就收完。
    • 原因:这是因为TCP是面向连接的,一个 socket 中收到的数据都是由同一台主机发出,且有序地到达,所以每次读取多少数据都可以。

    • 所谓的“数据报模式”,是指UDP发送端调用了几次 write,接收端必须用相同次数的 read 读完。UDP是基于报文的,在接收的时候,每次最多只能读取一个报文,报文和报文是不会合并的,如果缓冲区小于报文长度,则多出的部分会被丢弃。
    • 原因:这是因为UDP是无连接的,只要知道接收端的 IP 和端口,任何主机都可以向接收端发送数据。 这时候,如果一次能读取超过一个报文的数据, 则会乱套。

    TCP中的流量控制和拥塞控制

    注:tcp协议如何保证传输的可靠性

    • 流量控制主要针对的是端到端传输中控制流量大小并保证传输可靠性(未收到ack就不滑动)。流量控制往往是指点对点通信量的控制,所要做的是抑制发送端发送数据的速率。
    • 拥塞控制主要是一个全局性过程,涉及到所有主机,路由器,以及与降低网络传输性能有关的所有因素。防止过多的数据注入到网络中。如果有发生丢包则通过拥塞控制减小窗口,确定出合适(慢启动 拥塞避免 快重传 快恢复)的拥塞窗口(增性加乘性减)。

           详见博客链接(重点)以及《计算机网络》(谢希仁)。

    说一说TCP的三次握手和四次挥手

    在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息

     

    • 核心思想:让双方都证实对方能发收。知道对方能收是因为收到对方的因为收到信息之后发的回应(ACK)。

    详解见一个总结的很好的博客

    请简单说一下你了解的端口及对应的服务

    端口详解链接(百度百科)

    端口

    注意区别硬件端口。

    • 软件端口是应用层的各种协议进程与运输实体进行层间交互的一种地址。
    • 端口号只具有本地意义,它只为标志计算机应用层中的各个进程在和运输层交互时的层间接口,在互联网不同计算机中,相同的端口号是没有关联的。
    • 两个计算机的进程相互通信,不仅需要知道对方的IP地址(为了找到对方计算机),还要知道对方的端口号(为了找到对方计算机中的应用进程)
    • 两大类:1.服务器端使用的端口号(常用熟知)2.客户端使用的端口号(短暂)。

     

    TCP如何实现可靠性传输

    确认机制、重传机制、滑动窗口。

     

    UDP如何实现可靠性传输

    传输层无法保证数据的可靠传输,只能通过应用层来实现了。实现的方式可以参照tcp可靠性传输的方式,只是实现不在传输层,实现转移到了应用层。

    实现确认机制、重传机制、窗口确认机制。

    如果你不利用linux协议栈以及上层socket机制,自己通过抓包和发包的方式去实现可靠性传输,那么必须实现如下功能:

    发送:包的分片、包确认、包的重发

    接收:包的调序、包的序号确认

    注: 
    1)给数据包编号,按照包的顺序接收并存储; 
    2)接收端接收到数据包后发送确认信息给发送端,发送端接收确认数据以后再继续发送下一个包,如果接收端收到的数据包的编号不是期望的编号,则要求发送端重新发送。

    目前有如下开源程序利用udp实现了可靠的数据传输。分别为RUDP、RTP、UDT。

    在浏览器中输入www.baidu.com后执行的全部过程

    一个总结的比较好的博客

    1、应用层:客户端浏览器通过DNS解析到www.baidu.com的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.161.27.48,然后通过TCP进行封装数据包,输入到网络层。

    • DNS解析过程

    • HTTP请求与响应

      2、运输层:在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层(网络层)的IP地址查找目的端。

      3、网络层:客户端的网络层不用关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。

      4、链路层:客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

        

    交换机、路由器的概念,并知道各自的用途

            交换机

    • 在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表中
    • 交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域。

      路由器

    • 路由器(Router)是一种计算机网络设备,提供了路由与转发两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。路由工作在OSI模型的第三层——即网络层,例如IP协议。
    • 路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。 路由器与交换器的差别,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。

    HTTP(超文本传输协议)

    HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。

    HTTP是一个基于TCP/IP通信协议来传递数据,默认端口号为80。

    HTTP工作原理

    HTTP协议定义Web客户端如何从Web服务器请求Web页面,以及服务器如何把Web页面传送给客户端。

      HTTP 请求/响应的步骤

      1、客户端连接到Web服务器

        一个HTTP客户端,通常是浏览器,与Web服务器的HTTP端口(默认为80)建立一个TCP套接字连接。例如,http://www.oakcms.cn。

      2、发送HTTP请求

        通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

      3、服务器接受请求并返回HTTP响应

        Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成。

      4、释放连接TCP连接

        若connection 模式为close,则服务器主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

      5、客户端浏览器解析HTML内容

        客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

    HTTP消息结构

    HTTP是基于客户端/服务端(C/S)的架构模型

      客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,请求报文的一般格式

    HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

    http常见状态码有哪些?

    状态码告知从服务器端返回的请求结果。

    •  2开头状态码

        2xx (成功)表示成功处理了请求的状态代码

    200 (成功) 服务器已成功处理了请求。 通常。
    
    • 3开头状态码

        3xx (重定向) 表示要完成请求,需要进一步操作。 通常,这些状态代码用来重定向。

    304 (未修改) 自从上次请求后,请求的网页未修改过。 服务器返回此响应时,不会返回网页内容。
    
    • 4开头状态码

        4xx(请求错误) 这些状态代码表示请求可能出错,妨碍了服务器的处理

    1:400 (错误请求) 服务器不理解请求的语法。
     
    2:403 (禁止) 服务器拒绝请求。
    
    3:404 (未找到) 服务器找不到请求的网页。
    
    • 5开头状态码

       5xx(服务器错误)这些状态代码表示服务器在尝试处理请求时发生内部错误。 这些错误可能是服务器本身的错误,而不是请求出错

    500 (服务器内部错误) 服务器遇到错误,无法完成请求。
    
    501 (尚未实施) 服务器不具备完成请求的功能。 例如,服务器无法识别请求方法时可能会返回此代码。
    
    502 (错误网关) 服务器作为网关或代理,从上游服务器收到无效响应。
    
    503 (服务不可用) 服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态。
    
    504 (网关超时) 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
    
    505 (HTTP 版本不受支持) 服务器不支持请求中所用的 HTTP 协议版本。
    
    重点:200,304,403,404,500

    HTTP与HTTPS区别

     

    1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

     

    2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

     

    3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

     

    4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

    HTTPS工作原理

    更容易理解的一个链接

     

    HTTP1.0和HTTP1.1的区别

    HTTP长连接与短链接

     

    在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

     

    而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

     

    Connection:keep-alive
    

     

    在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

     

    HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

     

    DNS域名系统,简单描述其工作原理。

    链接

    当DNS客户机需要在程序中使用名称时,它会查询DNS服务器来解析该名称。客户机发送的每条查询信息包括三条信息:包括:指定的DNS域名,指定的查询类型,DNS域名的指定类别。基于UDP服务,端口53. 该应用一般不直接为用户使用,而是为其他应用服务,如HTTP,SMTP等在其中需要完成主机名到IP地址的转换。

    路由选择协议

    路由选择协议的任务就是要确定数据报在源与目的地之间采用的路径。

    路由选择协议分为:静态的和动态的。Internet中使用的是动态路由选择协议,在Internet的概念中,将整个互联网划分为许多个小的自治系统(AS)。AS的最主要的特征:一个AS对其他AS表现出的是一个单一 和一致的路由选择策略。

    由于AS的存在,路由选择协议又分为两种:

    • 内部网关协议(IGP):即在一个AS内部使用的路由选择协议,而这与互联网中其他AS选用什么路由协议无关。比如:RIP,OSPF
    • 外部网关协议(EGP):若源主机和目的主机不再同一个AS中,就需要使用一种协议将路由选择信息传递到另一个AS中,这就是EGP。比如:BGP。

    重传机制

    网络万一阻塞了呢?发出去的请求包在规定时间内没有收到ACK,不管是请求包丢失,还是ACK包丢失,还是网络延迟,总之,这里都是需要有个重传机制的。TCP的重传机制有两种:超时重传快速重传

    超时重传

    说白了就是在请求包发出去的时候,开启一个计时器,当计时器达到时间之后,没有收到ACK,则就进行重发请求的操作,一直重发直到达到重发上限次数或者收到ACK。

    快速重传

    还有一种机制就是快速重传,当接收方收到的数据包是不正常的序列号,那么接收方会重复把应该收到的那一条ACK重复发送,这个时候,如果发送方收到连续3条的同一个序列号的ACK,那么就会启动快速重传机制,把这个ACK对应的发送包重新发送一次。具体可以参考:

     

    TCP/IP通信过程(以发送电子邮件为例)

    socket通信原理

    网络编程中的基本概念

     

    TCP粘包问题

    1 什么是粘包现象

      TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。

    2 为什么出现粘包现象

      (1)发送方原因

      我们知道,TCP默认会使用Nagle算法。而Nagle算法主要做两件事:1)只有上一个分组得到确认,才会发送下一个分组;2)收集多个小分组,在一个确认到来时一起发送。

      所以,正是Nagle算法造成了发送方有可能造成粘包现象。

      (2)接收方原因

      TCP接收到分组时,并不会立刻送至应用层处理,或者说,应用层并不一定会立即处理;实际上,TCP将收到的分组保存至接收缓存里,然后应用程序主动从缓存里读收到的分组。这样一         来,如果TCP接收分组的速度大于应用程序读分组的速度,多个包就会被存至缓存,应用程序读时,就会读到多个首尾相接粘到一起的包。

    3 什么时候需要处理粘包现象

      (1)如果发送方发送的多个分组本来就是同一个数据的不同部分,比如一个很大的文件被分成多个分组发送,这时,当然不需要处理粘包的现象;

      (2)但如果多个分组本毫不相干,甚至是并列的关系,我们就一定要处理粘包问题了。

    4 如何处理粘包现象

      (1)发送方

      对于发送方造成的粘包现象,我们可以通过关闭Nagle算法来解决,使用TCP_NODELAY选项来关闭Nagle算法。

      (2)接收方

      遗憾的是TCP并没有处理接收方粘包现象的机制,我们只能在应用层进行处理。

      (3)应用层处理

      应用层的处理简单易行!并且不仅可以解决接收方造成的粘包问题,还能解决发送方造成的粘包问题。

      解决方法就是循环处理:应用程序在处理从缓存读来的分组时,读完一条数据时,就应该循环读下一条数据,直到所有的数据都被处理;但是如何判断每条数据的长度呢?

      两种途径:

        1)格式化数据:每条数据有固定的格式(开始符、结束符),这种方法简单易行,但选择开始符和结束符的时候一定要注意每条数据的内部一定不能出现开始符或结束符;

        2)发送长度:发送每条数据的时候,将数据的长度一并发送,比如可以选择每条数据的前4字节是数据的长度(一个int来储存数据长度大小),应用层处理时可以根据长度来判断每条数据的开始和结束。

    详细还可以参考此博客:链接

    TCP协议中的三次握手四次挥手以及11种状态转换

    链接地址

    注:

    TIME_WAIT状态的作用:

    1、可靠地实现TCP的连接终止。

    在终止TCP连接时有4个报文需要交换,其中最后一个ACK报文是由客户端发往服务器。假设这个ACK报文在网络中被丢弃了,那么服务器端收不到这个确认ACK,服务器端会向客户端再次发送FIN。这就是为什么TIME_WAIT状态持续2倍的最长报文段生存时间:1MSL时间留给最后的ACK确认报文段到达服务器端,1MSL时间留给服务器端再次发送的FIN。

    2、确保老的重复的报文段在网络中过期失效,这样建立新的连接时将不再接受它们。

    TCP协议采用的是出错重传,也就是会生成重复的报文,并且根据路由器的选择,这些重复的报文可能在连接终止后才到达,如果客户端/服务器端收到这个老的报文会把它误认为一个同一连接的新的报文,然后对这个报文进行处理,这样就会出现错误。从状态转换图我们可以看到从TIME_WAIT到连接终止,中间有2MSL,这个时间足以让老的重复的报文段过期失效。

    展开全文
  • 计算机网络面试问题

    万次阅读 多人点赞 2019-06-14 11:50:48
    计算机网络面试问题 目录 OSI七层模型与TCP/IP五层模型 三次握手 四次挥手 Http和Https的区别 对称加密与非对称加密 TCP与UDP的区别 从输入网址到获得页面的过程 常见状态码及原因短语 Get与POST的区别 DNS的寻址...
  • 面试/笔试第一弹 —— 计算机网络面试问题集锦

    万次阅读 多人点赞 2017-11-16 20:09:44
    本文对面试/笔试过程中经常会被问到的一些关于计算机网络的问题进行了梳理和总结,一方面方便自己温故知新,另一方面也希望为找工作的同学们提供一个复习参考。关于这块内容的初步了解和掌握,建议大家读一读《图解...
  • 计算机网络面试

    千次阅读 2018-09-10 20:10:08
    计算机网络面试问题集锦:https://blog.csdn.net/qq_39322743/article/details/79700863 面试/笔试第一弹 —— 计算机网络面试问题集锦:https://blog.csdn.net/justloveyou_/article/details/78303617 计算机网络...
  • 计算机网络面试题总结

    万次阅读 多人点赞 2019-11-18 10:24:34
    一 OSI与TCP/IP各层的结构与功能,都有哪些协议 五层协议的体系结构 1 应用层 ...二 TCP 三次握手和四次挥手(面试常客) 为什么要三次握手 为什么要传回 SYN 传了 SYN,为啥还要传 ACK 为什么要四次挥手...
  • 一小时搞定计算机网络面试

    千次阅读 2015-09-10 20:22:29
    计算机网络面试知识点整理 一.计算机网络体系结构参考模型: 七层协议的作用:  1.物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介 质的传输速率等。它的主要作用是传输比特...
  • 计算机网络面试问题汇总(超详细)

    千次阅读 多人点赞 2020-06-04 14:31:15
     本文对面试/笔试过程中经常会被问到的一些关于计算机网络的问题进行了梳理和总结,一方面方便自己温故知新,另一方面也希望为找工作的同学们提供一个复习参考。关于这块内容的初步了解和掌握,建议大家读一读...
  • 考研复试-计算机网络面试

    千次阅读 2019-03-26 22:28:41
    我用的是谢希仁的教材,是一本绿色的厚厚的书。在复习的过程中听说还有一本《图解TCP/IP》我下载了电子版看了看,给自己讲了一遍,觉得这个本书适合。 Http和Https的区别 Http协议运行在TCP之上,明文传输,客户端...
  • 计算机网络面试常考题目汇总

    千次阅读 多人点赞 2017-03-10 11:16:39
    TCP/IP五层模型:物理层、数据链路层、网络层、传输层、应用层 TCP/IP四层模型:网络接口层、网际层、传输层、应用层 OSI七层模型及各层作用: 物理层:传输介质及将电信号转换成0/1比特 数据链路层:将...
  • TCP与UDP区别
  • 计算机网络面试常考知识点整理

    千次阅读 2016-06-09 15:52:11
    有那么一些零碎的小知识点,偶尔很迷惑,偶尔被忽略,偶然却发现它们很重要,也是各大笔试和面试高频出现考点。这段时间正好在温习这些,就整理在这里,一起学习一起提高!后面还会继续补充。 ——前言 1.TCP...
  • 计算机网络核心知识点总结&面试笔试要点

    万次阅读 多人点赞 2020-04-19 17:27:20
    计算机网络之基础篇 一、计算机网络概述  1.什么是计算机网络   计算机网络主要由一些通用的、可编程的硬件互连而成,通过这些硬件,可以传送不同类型的数据,并且可以支持广泛和日益增长的应用。  2.计算机网络...
  • 计算机网络面试总结

    万次阅读 2016-07-22 16:18:25
    整理一下计算机网络部分的面试常考点,参考书籍:《计算机网络》第五版 谢希仁的那本,希望对大家有所帮助 OSI,TCP/IP,五层协议的体系结构,以及各层协议 OSI分层 (7层):物理层、数据链路层、网络层、传输层...
  • C/S B/S 的含义 C/S 是客户端/服务器模式(client, s是server);B/S 是浏览器/服务器(Browser/Server)结构 ...的体层为:物理层,数据链路层,网络层,传输层, 会话层, 表示层和应用层。 在各层之
  • 面试总结之time_wait状态产生的原因,危害,如何避免: ...计算机网络面试问题集锦: https://blog.csdn.net/qq_32534441/article/details/88655480 搞定计算机网络面试,看这篇就够了: https://blog.csdn.ne...
1 2 3 4 5 ... 20
收藏数 67,278
精华内容 26,911
热门标签
关键字:

计算机网络面试