zoukankan      html  css  js  c++  java
  • 协议分析

    1.traceroute程序的操作过程。

    traceroute主要能列出到达目的主机所经过的路由。

    在ICMP中有一个IP记录路由(RR)选项,之所以还要另外开发traceroute是因为

    1>IP首部中留下的选项的空间有限,

    2>并不是所有的路由器都支持路由选项,

    3>记录路由一般是单项的,所以发送端设置了该选项,那么接收端不得不从收到的IP首部中提取出所有的信息。

    traceroute程序的操作过程:它发送一个TTL = 1 的IP数据报给目的主机。处理这份数据报的第一个路由器将TTL减1,丢弃该数据包,并发回一份超时ICMP报文,这样就得到了这份数据报的第一个路由器的地址。然后traceroute程序发送一份TTL = 2 的IP数据报,这样我们就可以得到这份数据报的第二个路由器的地址,积蓄这个过程,直至数据报到达目的主机。

    2.TCP协议通过那些方式提供可靠性传输?

    1>应用数据报被分割成TCP认为最适合发送的数据块;

    2>当TCP发出一段后,他将启动一个定时器,等待目的端确认收到着个数据段,如果没有,那么超时重传;

    3>当TCP收到来自TCP链接的另一端的数据后,他将发送一个确认;

    4>TCP将保持他首部和数据的校验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发) 

    5>既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。 (对失序数据进行重新排序,然后才交给应用层)

    6>IP数据报会发生重复,TCP接收端必须丢弃重复的数据;

    7>TCP提供流量控制,缓冲空间。

    3.什么是Nagle算法,它有什么优点?

    TCP/IP协议中,无论发送多少数据,总是要在数据前面加上协议头,同时,对方接收到数据,也需要发送ACK表示确认。为了尽可能的利用网络带宽,TCP总是希望尽可能的发送足够大的数据。(一个连接会设置MSS参数,因此,TCP/IP希望每次都能够以MSS尺寸的数据块来发送数据)。Nagle算法就是为了尽可能发送大块数据,避免网络中充斥着许多小数据块。
     Nagle算法的基本定义是任意时刻,最多只能有一个未被确认的小段。 所谓“小段”,指的是小于MSS尺寸的数据块,所谓“未被确认”,是指一个数据块发送出去后,没有收到对方发送的ACK确认该数据已收到。
      Nagle算法的规则(可参考tcp_output.c文件里tcp_nagle_check函数注释):
    (1)如果包长度达到MSS,则允许发送;
    (2)如果该包含有FIN,则允许发送;
    (3)设置了TCP_NODELAY选项,则允许发送;
    (4)未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;
    (5)上述条件都未满足,但发生了超时(一般为200ms),则立即发送。
    优点:减少拥塞控制
    4.TCP协议中的快速重传和快速恢复算法
    TCP快速重传是当client接收到来自目的主机的大于等于三个相同的ack信息时,表示该包丢失,需要重传,此时将ssthresh设置为cwnd的二分之一(不能小鱼两个报文段),并且cwnd设置为ssthresh + 3*报文段大小;
    然后每次接收到一个ack后,将cwnd增大一个报文段大小,并且发送一个分组,前提是当前的cwnd <= ssthresh ,当ssthresh > cwnd时,就要拥塞避免,cwnd = cwnd + 报文长度×报文长度/cwnd + 报文长度/8;
    当下一个新的ack到达后,将cwnd = ssthresh,因为此时cwnd <= ssthresh ,并且当前处于拥塞避免,所以报文段的大小变为 cwnd = cwnd + 报文长度,当cwnd > ssthresh后,cwnd  = cwnd + 报文长度×报文长度/cwnd + 报文长度/8;
    综上所述:
    传送过成分为 当发生重传时,快重传  --> 慢启动  ---> 拥塞避免 -----> 快恢复(收到新的ack) --->拥塞避免
    5.多播路由器使用什么样的规则来记录与该路由表相连的网络中的组成员的变化?

    多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况,其报文格式如下:

    规则如下:

    (1)当第一个进程加入一个组时,主机发送一个IGMP报告,如果有多个进程加入同一个组,只需发送一个报告;

    (2)进程离开一个组时,不需要发送任何报告;后期路由器发送IGMP查询时,不再发送报告;

    (3)多播路由器定时发送(向每个接口)IGMP查询来了解是否还有任何主机包含有属于多播组的进程,此时IGMP查询报文中的组播地址被设置为0.

    (4)主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报文。

    6.以太网数据分片计算
    TCP首部20
    UDP首部8
    IP首部20~60
    在IP首部 有标志位,表明要不要分片,并且根据IP首部中的偏移量可以将分片重组。
    7.FTP采用两个TCP链接来传输文件控制端口是什么,数据连接的端口是什么?
    控制链接是建立在服务器端口21上,数据连接是建立服务器端口20上。
     
  • 相关阅读:
    浅析MySQL二进制日志
    MySQL升级
    浅析MySQL复制
    MySQL关于exists的一个bug
    TokuDB存储引擎
    MySQL中RESET SLAVE和RESET MASTER的区别
    MySQL半同步复制
    MySQL线程池
    分析MariaDB初始化脚本mysql_install_db
    Python装饰器
  • 原文地址:https://www.cnblogs.com/chenyang920/p/5578822.html
Copyright © 2011-2022 走看看