精华内容
下载资源
问答
  • 介绍了最大概率法的数学原理及迭代方程的使用过程, 以卫星遥感观测的夜光云数据为例, 阐述了最大概率法在实例中的使用方法, 并反演得到了夜光云体散射比廓线及散射系数廓线。与传统洋葱剥皮法的反演结果进行对比, ...
  • 夜光序言: 其实即使是天才,在生下来的时候的第一声啼哭,也和平常儿童的一样,决不会就是一首好诗。 正文: 可靠数据传输的原理 仅考虑在一般情况下可靠数据传输的间题,仅考虑单向数据...

    夜光序言:

     

    其实即使是天才,在生下来的时候的第一声啼哭,也和平常儿童的一样,决不会就是一首好诗。

     

     

     

     

     

     

    正文:

     

    可靠数据传输的原理


    仅考虑在一般情况下可靠数据传输的间题,仅考虑单向数据传输的情况,即数据传输是从发送方到接收方的。可靠的、双向数据传输 (即全双工数据传输)的情况从概念上讲是一样的。

     

    主要目的是帮助大家理解 TCP 的可靠数据传输机制。

     

     

     1.完全可靠信道上的可靠数据传输:rdt1.0


    考虑最简单的情况,即底层信道是完全可靠的,是完美信道。
    no bit errors
    no loss of packets

    因此应用层调用 rdt_send(data),
    packet = make_pkt(data) //发送方从较高层接收数据,生成一个包含该数据的分组
    udt_send(packet) //将分组发送到信道中
    接收方应用层调用 rdt_rcv(packet),(注意是接收方主动接收)
    extract (packet,data) //接收方接收提取,
    deliver_data(data) //交付数据
     

     



    2.具有比特差错信道上的可靠数据传输:rdt2.0


    在分组的传输、传播或缓存的过程中,这种比特差错通常会出现在网络的物理部件中。
    因此需要引入checksum 检测比特位错误

     

    需要引入确认机制:


    acknowledgements (ACKs): receiver 明确告诉 sender 数据包接收 OK
    negative acknowledgements (NAKs): receiver 明确告诉 sender 数据包存在错误
    sender 收到 NAK,重传数据包(pkt)
    rdt2.0 (在 rdt1.0 基础上)采用的新机制:
    校验和:错误检测
    接收者反馈: 控制信息(ACK,NAK)
    重传 
    但是确认信息本身出错、引起重复的传输怎么办呢? rdt2.1
    如果 ACK/NAK 出错,那么发送者直接重传当前的数据报
    发送者为数据报添加字段:序号 (sequence number )
    接收者抛弃重复的数据报

     


    3.具有比特差错的丢包信道上的可靠数据传输:rdt3.0


    现在假定除了比特受损外,底层信道还会丢包。

    发送者等待 ACK 足够的时间
    然后重传(假如还是没有 ACK)
    如果数据包(or ACK) 延迟 (但没有丢失):
    重传导致重复, 顺序号的使用可以处理这种情况
    但是接收者必须指定所确认数据包的顺序号


    一般使用倒数的定时器(timer)


    可靠数据传输协议的要点:校验和、序号、定时器、肯定确认和否定确认、重传。 

     


    4 流水线可靠数据传输协议

     


    Rdt3.0 使用停等方式运行,提高发送效率的方法是允许发送方发送多个分组而无需等待确认。发送方向接收方传输的众多分组可以被看成是填充到了一条流水线中,故这种技术被称为流水线(pipelining)。

    流水线技术对可靠数据传输协议提出了新的要求: 

     .必须增加序号范围,因为每个传输的分组(不计算重传的)必须有一个唯一的序号,而 且也许有多个在传输中的未确认的分组。
     .协议的发送方和接收方必须缓存多个分组。发送方最低限度应当能缓冲那些已发送但没有确认的分组。接收方也需要缓存那些已正确接收的分组。

    .所需序号范围和对缓冲的要求取决于数据传输协议处理丢失、损坏及过度延时分组的
    方式。

    解决流水线的差错恢复有两种基本方法:回退 N 步和选择重传。


     •回退 N 步

     

     


     

    在 GBN 协议中,允许发送方发送多个分组(当有多个分组可用时)而不需等待确认,但它也受限于在流水线中未确认的分组数不能超过某个最大允许数 N。 

    已被发送但还未被确认的分组的许可序号范围可以被看成是一个在序号范围内长度为N 的窗口。随着协议的运行,该窗口在序号空间内向前滑动。

     

    因此,N 常被称为窗口长度,协议常被称为滑动窗口协议。

     

    当有超时事件发生,出现丢失和过度时延分组时,发送方将重传所有已发送但还未被确认的分组。 

     

    在 GBN 中,接收方的动作也很简单。如果一个序号为 n 的分组被正确接收到,并且按序(即上次交付给上层的数据是序号为 n-I 的分组),则接收方为分组 n 发送一个 ACK,并将该分组中的数据交付到上层。在所有其他情况下,接收方都丢弃该分组,并为最近按序接收的分组 n-1 重传 ACK。因此,使用累积确认是 GBN 的一个很自然的选择。

     

    累积确认指接收一个未出错分组(可能失序)时总是返回一个最后接收的按顺序到达分组的确认。

     

     


    GBN 协议中综合了 TCP 可靠数据传输构件的所有技术。这些技术包括序号、累积确认、校验和以及超时/重传操作。


    •选择重传
    选择重传(SR)协议通过让发送方仅重传那些它怀疑在接收方出错(即丢失或受损)的分组而避免了不必要的重传。这种个别的、按需的重传要求接收方逐个地确认正确接收的分组。它也用窗口长度 N 来限制流水线中未完成、未被确认的分组数。 

     


    发送方:


    a 从上层收数据。当从上层接收到数据后,SR 发送方检查下一个可用的序号。如果序号在发送方的窗口内,则将数据打包并发送;否则就像在 GBN 中一样。要么将数据缓存,要么将其返回给上层。
    b 超时定时器被用来防止丢失分组。但每个分组必须有自己的定时器,因为超时后只能发送一个分组。
    c 收到 ACK。如果收到 ACK,且该分组序号在窗口内,则 SR 发送方将那个被确认的组标记为已接收。如果该分组的序号等于窗口左边缘的基序号,则窗口基序号向前移动到具有最小序号的未确认分组处。如果窗口移动了并且有分组序号落在窗口内未发送。

     


    则发送这些分组。


    SR 接收方将确认一个正确接收的分组而不管其是否按序。失序的分组将被缓存直到所有丢失分组(即序号更小的分组)都被收到,这时才它们按序交付给上层

     

    a 收到的分组落在接收方的窗口内,一个确认分组被回送给发送方,即使该分组是接收方以前已确认过的分组。
    b 如果该分组是以前没收到的分组,则被缓存。

    如果该分组的序号等于接收窗口的基序号,则该分组以及以前缓存的、序号连续的分组交付给上层,然后接收窗口向前移动。

    c 其他情况,忽略该分组。

     

     

    展开全文
  • 5. 8 夜光盒 -- 舵机 夜光宝盒听着名字是不是很好玩实际也是这么好玩儿本节要做的这 个盒子在白天是闭合的一旦进入了深夜就开始慢慢张开灯光也会慢慢 变亮好似一颗 夜明珠 一旦到了白天又慢慢合上了原理是通过一个模...
  • 夜光序言: 一个人时要坚强,泪水没肩膀依靠就昂头,没有谁比自己爱自己更实在;一个人的日子我们微笑,微笑行走,微笑面对。 正文: 可靠数据传输的原理 仅考虑在一般情况下可靠数据传输的...

    夜光序言:

     

     

    一个人时要坚强,泪水没肩膀依靠就昂头,没有谁比自己爱自己更实在;一个人的日子我们微笑,微笑行走,微笑面对。

     

     

     

     

     

    正文:

     

    可靠数据传输的原理


    仅考虑在一般情况下可靠数据传输的间题,仅考虑单向数据传输的情况,即数据传输是从发送方到接收方的。可靠的、双向数据传输 (即全双工数据传输)的情况从概念上讲是一样的。

     

    主要目的是帮助大家理解 TCP 的可靠数据传输机制。

     

    1.完全可靠信道上的可靠数据传输:rdt1.0


     考虑最简单的情况,即底层信道是完全可靠的,是完美信道。
    no bit errors
    no loss of packets
     因此应用层调用 rdt_send(data),
    packet = make_pkt(data) //发送方从较高层接收数据,生成一个包含该数据的分组
    udt_send(packet) //将分组发送到信道中
    接收方应用层调用 rdt_rcv(packet),(注意是接收方主动接收)
    extract (packet,data) //接收方接收提取,
    deliver_data(data) //交付数据
     

     



     2.具有比特差错信道上的可靠数据传输:rdt2.0


    在分组的传输、传播或缓存的过程中,这种比特差错通常会出现在网络的物理部件中。

    因此需要引入checksum 检测比特位错误

    需要引入确认机制:
    acknowledgements (ACKs): receiver 明确告诉 sender 数据包接收 OK
    negative acknowledgements (NAKs): receiver 明确告诉 sender 数据包存在错误
    sender 收到 NAK,重传数据包(pkt)
    rdt2.0 (在 rdt1.0 基础上)采用的新机制:
    校验和:错误检测
    接收者反馈: 控制信息(ACK,NAK)
    重传 

     

    但是确认信息本身出错、引起重复的传输怎么办呢? rdt2.1如果 ACK/NAK 出错,那么发送者直接重传当前的数据报
    发送者为数据报添加字段:序号 (sequence number )接收者抛弃重复的数据报

     


    3.具有比特差错的丢包信道上的可靠数据传输:rdt3.0


    现在假定除了比特受损外,底层信道还会丢包。

    发送者等待 ACK 足够的时间

    然后重传(假如还是没有 ACK)

    如果数据包(or ACK) 延迟 (但没有丢失):

    重传导致重复, 顺序号的使用可以处理这种情况,但是接收者必须指定所确认数据包的顺序号


     

    TCP


    如果仅仅为了理解网络工作原理,那么只要了解 TCP 是可靠传输,数据传输丢失时会重传就可以了。

     

     

    那么下面内容很有可能成为考查的知识点,其中的重点是序号/确认号的编码、超时定时器的设置、可靠传输和连接的管理。


    1 TCP 连接


    TCP 面向连接,在一个应用进程开始向另一个应用进程发送数据之前,这两个进程必须先相互“握手”,即它们必须相互发送某些预备报文段,以建立连接。

     

    连接的实质是双方都初始化与连接相关的发送/接收缓冲区,以及许多 TCP 状态变量。

    这种 “连接”不是一条如电话网络中端到端的电路,因为它们的状态完全保留在两个端系统中。

    TCP 连接提供的是全双工服务,应用层数据就可在从进程 B 流向进程 A 的同时,也从进程 A 流向进程 B。

    TCP 连接也总是点对点的,即在单个发送方与单个接收方之间建立连接。

    一个客户机进程向服务器进程发送数据时,客户机进程通过套接字传递数据流。

    客户机操作系统中运行的 TCP 软件模块首先将这些数据放到该连接的发送缓存里,然后会不时地从发送缓存里取出一块数据发送。

    TCP 可从缓存中取出并放入报文段中发送的数据量受限于最大报文段长 MSS,通常由最大链路层帧长度来决定(也就是底层的通信链路决定)。例如一个链路层帧的最大长度 1500字节,除去数据报头部长度 20 字节, TCP 报文段的头部长度 20 字节,MSS 为 1460 字节。

    报文段被往下传给网络层,网络层将其封装在网络层 IP 数据报中。然后这些数据报被发送到网络中。

    当 TCP 在另一端接收到一个报文段后,该报文段的数据就被放人该连接的接收缓存中。

    应用程序从接收缓存中读取数据流(注意是应用程序来读,不是操作系统推送)。

    TCP 连接的每一端都有各自的发送缓存和接收缓存。

    因此TCP连接的组成包括:主机上的缓存、控制变量和与一个进程连接的套接字变量名,以及另一台主机上的一套缓存、控制变量和与一个进程连接的套接字。

    在这两台主机之间的路由器、交换机中,没有为该连接分配任何缓存和控制变量。


     

    2 报文段结构


    TCP 报文段由首部字段和一个数据字段组成。数据字段包含有应用层数据。由于 MSS 限制了报文段数据字段的最大长度。当 TCP 发送一个大文件时,TCP 通常是将文件划分成长度为 MSS 的若干块。

    TCP 报文段的结构。

    首部包括源端口号和目的端口号,它用于多路复用/多路分解来自或送至上层应用的数据。另外,TCP 首部也包括校验和字段。报文段首部还包含下列字段:

    32 比特的序号字段和 32 比特的确认号字段。这些字段被 TCP 发送方和接收方用来实现可靠数据传输服务。

    16 比特的接收窗口字段,该字段用于流量控制。该字段用于指示接收方能够接受的字节数量。

     

    4 比特的首部长度字段,该字段指示以 32 比特的字为单位的 TCP 首部长度。一般 TCP 首部的长度就是 20 字节。

     

    可选与变长的选项字段,该字段用于当发送方与接收方协商最大报文段长度,或在高速网络环境下用作窗口调节因子时使用。

     

     


    标志字段 ACK 比特用于指示确认字段中的 ACK 值的有效性,即该报文段包括一个对已被成功接收报文段的确认。SYN 和 FIN 比特用于连接建立和拆除。

    PSH、URG 和紧急指针字段通常没有使用。


    •序号和确认号


    TCP 报文段首部两个最重要的字段是序号字段和确认号字段。
    TCP 把数据看成一个无结构的但是有序的字节流。TCP 序号是建立在传送的字节流之上,而不是建立在传送的报文段的序列之上。

    一个报文段的序号是该报文段首字节在字节流中的编号。

    例如,假设主机 A 上的一个进程想通过一条 TCP 连接向主机 B 上的一个进程发送一个数据流。主机 A 中的 TCP 将对数据流中的每一个字节进行编号。假定数据流由一个包含 4500字节的文件组成(可以理解为应用程序调用 send 函数传递过来的数据长度),MSS 为 1000 字节(链路层一次能够传输的字节数),如果主机决定数据流的首字节编号是 7。

     

    TCP 模块将为该数据流构建 5 个报文段(也就是分 5 个 IP 数据报)。第一个报文段的序号被赋为 7;第二个报文段的序号被赋为 1007,第三个报文段的序号被赋为 2007,以此类推。前面 4 个报文段的长度是 1000,最后一个是 500。

     

    确认号要比序号难理解一些。前面讲过,TCP 是全双工的,因此主机 A 在向主机 B 发送数据的同时,也可能接收来自主机 B 的数据。从主机 B 到达的每个报文段中的序号字段包含了从 B 流向 A 的数据的起始位置。因此主机 B 填充进报文段的确认号是主机 B 期望从主机 A 收到的下一报文段首字节的序号。

     

    假设主机 B 已收到了来自主机 A 编号为 7-1006 的所有字节,同时假设它要发送一个报文段给主机 A。主机 B 等待主机 A 的数据流中字节 1007 及后续所有字节。所以,主机 B 会在它发往主机 A 的报文段的确认号字段中填上 1007。

     

    再举一个例子,假设主机 B 已收到一个来自主机 A 的包含字节 7-1006 的报文段,以及另一个包含字节 2007-3006 的报文段。由于某种原因,主机 A 还没有收到字节 1007-2006 的报文段。

     


    在这个例子中,主机 A 为了重组主机 B 的数据流,仍在等待字节 1007。因此,A 在收到包含字节 2007-3006 的报文段时,将会又一次在确认号字段中包含 1007。因为 TCP 只确认数据流中至第一个丢失报文段之前的字节数据,所以 TCP 被称为是采用累积确认。

     


    TCP 的实现有两个基本的选择:

     

    ①接收方立即丢弃失序报文段;或者

    ②接收方保留失序的字节,并等待缺少的字节以填补该间隔。

     


    一条 TCP 连接的双方均可随机地选择初始序号。这样做可以减少将那些仍在网络中的来自两台主机之间先前连接的报文段,误认为是新建连接所产生的有效报文段的可能性。

     

    •例子 telnet


    Telnet 由是一个用于远程登录的应用层协议。它运行在 TCP 之上,被设计成可在任意一对主机之间工作。

    假设主机 A 发起一个与主机 B 的 Telnet 会话。因为是主机 A 发起该会话,因此主机 A被标记为客户机,主机 B 被标记为服务器。用户键入的每个字符(在客户机端)都会被发送至远程主机。远程主机收到后会复制一个相同的字符发回客户机,并显示在 Telnet 用户的屏幕上。

     

    这种“回显”用于确保由用户发送的字符已经被远程主机收到并处理。因此,在从用户击键到字符显示在用户屏幕上之间的这段时间内,每个字符在网络中传输了两次。

     

    现在假设用户输入了一个字符“C”,假设客户机和服务器的起始序号分别是 42 和 79。

     

    前面讲过,一个报文段的序号就是该报文段数据字段首字节的序号。因此,客户机发送的第一个报文段的序号为 42,服务器发送的第一个报文段的序号为 79。前面讲过,确认号就是主机期待的数据的下一个字节序号。在 TCP 连接建立后但没有发送任何数据之前,客户机等待字节 79,而服务器等待字节 42。

     

    如图所示,共发了 3 个报文段。

    第一个报文段是由客户机发往服务器,其数据字段里包含一字节的字符“C”的 ASCII 码,其序号字段里是 42。另外,由于客户机还没有接收到来自服务器的任何数据,因此该报文段中的确认号字段里是 79。

    第二个报文段是由服务器发往客户机。它有两个目的:第一个目的是为服务器所收到的数据提供确认。服务器通过在确认号字段中填入 43,告诉客户机它已经成功地收到字节 42及以前的所有字节,现在正等待着字节 43 的出现。第二个目的是回显字符“C”。因此,在第二个报文段的数据字段里填入的是字符“C”的 ASCII 码,第二个报文段的序号为 79,它是该 TCP 连接上从服务器到客户机的数据流的起始序号,也是服务器要发送的第一个字节的数据。

    这里客户机到服务器的数据的确认被装载在一个服务器到客户机的数据的报文段中,这种确认被称为是捎带确认.

     

    第三个报文段是从客户机发往服务器的。它的唯一目的是确认已从服务器收到的数据

    3 往返时延的估计与超时


    TCP 如同前面所讲的 rdt 协议一样,采用超时/重传机制来处理报文段的丢失问题。

    最重要的一个问题就是超时间隔长度的设置。显然,超时间隔必须大于 TCP 连接的往返时延 RTT,即从一个报文段发出到收到其确认时。否则会造成不必要的重传。

    •估计往返时延
    TCP 估计发送方与接收方之间的往返时延是通过采集报文段的样本 RTT 来实现的,就是从某报文段被发出到对该报文段的确认被收到之间的时间长度。

    也就是说 TCP 为一个已发送的但目前尚未被确认的报文段估计 sampleRTT,从而产生一个接近每个 RTT 的采样值。但是,TCP 不会为重传的报文段计算 RTT。

    为了估计一个典型的 RTT,采取了某种对 RTT 取平均值的办法。

    TCP 据下列公式来更新

     

    即估计 RTT 的新值是由以前估计的 RTT 值与 sampleRTT 新值加权组合而成的。

    参考值是 a=0.125,因此是一个加权平均值。显然这个加权平均对最新样本赋予的权值要大于对老样本赋予的权值。因为越新的样本能更好地反映出网络当前的拥塞情况。从统计学观点来讲,这种平均被称为指数加权移动平均除了估算 RTT 外,还需要测量 RTT 的变化,RTT 偏差的程度,因为直接使用平均值设置计时器会有问题(太灵敏)。

    RTT 偏差也使用了指数加权移动平均。B 取值 0.25.

     



    •设置和管理重传超时间隔


    假设已经得到了估计 RTT 值和 RTT 偏差值,那么 TCP 超时间隔应该用什么值呢?

    TCP 将超时间隔设置成大于等于估计 RTT 值和 4 倍的 RTT 偏差值, 否则将造成不必要的重传。但是超时间隔也不应该比估计 RTT 值大太多,否则当报文段丢失时,TCP 不能很快地重传该报文段,从而将给上层应用带来很大的数据传输时延。因此,要求将超时间隔设为估计 RTT 值加上一定余量。

     

    当估计 RTT 值波动较大时,这个余最应该大些;当波动比较小时,这个余量应该小些。因此使用 4 倍的偏差值来设置重传时间。


    TimeoutInterval = EstimatedRTT + 4*DevRTT

     

     



    4 可信数据传输


    因特网的网络层服务是不可靠的。

     

    IP 不保证数据报的交付,不保证数据报的按序交付,也不保证数据报中数据的完整性。

     

    TCP 在 IP 不可靠的尽力而为服务基础上建立了一种可靠数据传输服务。
    TCP 提供可靠数据传输的方法涉及前面学过的许多原理。
    TCP 采用流水线协议、累计确认。
    TCP 推荐的定时器管理过程使用单一的重传定时器,即使有多个已发送但还未被确认的报文段也一样。重传由超时和多个 ACK 触发。

    在 TCP 发送方有 3 种与发送和重传有关的主要事件:从上层应用程序接收数据,定时器超时和收到确认 ACK。

    从上层应用程序接收数据。一旦这个事件发生,TCP 就从应用程序接收数据,将数据封装在一个报文段中,并将该报文段交给 IP。注意到每一个报文段都包含一个序号,这个序号就是该报文段第一个数据字节的字节流编号。如果定时器还没有计时,则当报文段被传给 IP时,TCP 就启动一个该定时器。

     

    第二个事件是超时。TCP 通过重传引起超时的报文段来响应超时事件。然后 TCP 重启定时器。

     

    第三个事件是一个来自接收方的确认报文段(ACK)。当该事件发生时,TCP 将 ACK 的值 y与变量 SendBase(发送窗口的基地址)进行比较。TCP 状态变量 SendBase 是最早未被确认的字节的序号。就是指接收方已正确按序接收到数据的最后一个字节的序号。

     

    TCP 采用累积确认,所以 y 确认了字节编号在 y 之前的所有字节都已经收到。

    如果 Y>SendBase,则该 ACK 是在确认一个或多个先前未被确认的报文段。因此发送方更新其 SendBase 变量,相当于发送窗口向前移动。

     

    另外,如果当前有未被确认的报文段,TCP 还要重新启动定时器。

     


     

     

    快速重传


    超时触发重传存在的另一个问题是超时周期可能相对较长。当一个报文段丢失时,这种长超时周期迫使发送方等待很长时间才重传丢失的分组,因而增加了端到端时延。所以通常发送方可在超时事件发生之前通过观察冗余 ACK 来检测丢包情况。

     

    冗余 ACK 就是接收方再次确认某个报文段的 ACK,而发送方先前已经收到对该报文段的确认。

     

    当 TCP 接收方收到一个序号比所期望的序号大的报文段时,它认为检测到了数据流中的一个间隔,即有报文段丢失。这个间隔可能是由于在网络中报文段丢失或重新排序造成的。

    因为 TCP 使用累计确认,所以接收方不向发送方发回否定确认,而是对最后一个正确接收报文段进行重复确认(即产生一个冗余 ACK)

    如果 TCP 发送方接收到对相同报文段的 3 个冗余 ACK. 它就认为跟在这个已被确认过 3次的报文段之后的报文段已经丢失。一旦收到 3 个冗余 ACK,TCP 就执行快速重传,即在该报文段的定时器过期之前重传丢失的报文段。


     

    5 流量控制


    前面讲过,一条 TCP 连接双方的主机都为该连接设置了接收缓存。当该 TCP 连接收到正确、按序的字节后,它就将数据放入接收缓存。

    相关联的应用进程会从该缓存中读取数据,但没必要数据刚一到达就立即读取。事实上,接收方应用也许正忙于其他任务,甚至要过很长时间后才去读取该数据。如果应用程序读取数据时相当缓慢,而发送方发送数据太多、太快,会很容易使这个连接的接收缓存溢出。

     

    TCP 为应用程序提供了流量控制服务以消除发送方导致接收方缓存溢出的可能性。因此,可以说流量控制是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读速率相匹配。

     

    前面提到过,TCP 发送方也可能因为 IP 网络的拥塞而被限制,这种形式的发送方的控制被称为拥塞控制(congestion control )。

     

    TCP 通过让接收方维护一个称为接收窗口的变量来提供流量控制。接收窗口用于告诉发送方,该接收方还有多少可用的缓存空间。因为 TCP 是全双工通信,在连接两端的发送方都各自维护一个接收窗口变量。主机把当前的空闲接收缓存大小值放入它发给对方主机的报文段接收窗口字段中,通知对方它在该连接的缓存中还有多少可用空间。

     


     

    6 TCP 连接管理


    客户机中的 TCP 会用以下方式与服务器建立一条 TCP 连接:

    第一步:客户机端首先向服务器发送一个 SNY 比特被置为 1 报文段。该报文段中不包含应用层数据,这个特殊报文段被称为 SYN 报文段。另外,客户机会选择一个起始序号,并将其放置到报文段的序号字段中。为了避免某些安全性攻击,这里一般随机选择序号。

    第二步:一旦包含 TCP 报文段的用户数据报到达服务器主机,服务器会从该数据报中提取出 TCP SYN 报文段,为该 TCP 连接分配 TCP 缓存和控制变量,并向客户机 TCP 发送允许连接的报文段。这个允许连接的报文段还是不包含应用层数据。但是,在报文段的首部却包含3 个重要的信息。

     

    首先,SYN 比特被置为 1。

     

    其次,该 TCP 报文段首部的确认号字段被置为客户端序号+1 

    最后,服务器选择自己的初始序号,并将其放置到 TCP 报文段首部的序号字段中。这个允许连接的报文段实际上表明了:“我收到了你要求建立连接的、带有初始序号的分组。我同意建立该连接,我自己的初始序号是 XX”。这个同意连接的报文段通常被称为 SYN+ACK 报文段。


     

     

    展开全文
  • 夜光序言: 之后我们在山风里长久的拥抱,背后是碧蓝清澈的长白天池,眼前是看不见尽头的悠悠岁月。有些寒冷的东西消融了,有些信任和依赖沉淀下来,慢慢成了时光中最柔和的一隅,伴随我们即将共同经历的数十载...

    夜光序言:

     

     

    之后我们在山风里长久的拥抱,背后是碧蓝清澈的长白天池,眼前是看不见尽头的悠悠岁月。有些寒冷的东西消融了,有些信任和依赖沉淀下来,慢慢成了时光中最柔和的一隅,伴随我们即将共同经历的数十载人生。

     

     

     

     

     

    正文:

     

    路由器工作原理

     

    路由器有 4 个组成部分

     

    ·输入端口。输入端口要执行将一条输入的物理链路端接到路由器的物理层功能。它也 要执行需要与位于入链路另一端接口交互的数据链路层功能。它还要完成转发表查找与转发 功能,以便转发到路由器交换结构部分的分组能出现在适当的输出端口。

     

    ·交换结构。交换结构将路由器的输入端口连接到它的输出端口。交换结构完全包容在 路由器内部,即它是一台网络路由器中的网络。

     

    ·输出端口。输出端口存储经过交换结构转发给它的分组,并将这些分组传输到输出链 路。因此,输出端口执行与输入端口顺序相反的数据链路层和物理层功能。

     

    当一条链路是双向(承载两个方向的流量)链路时,与链路相连的输出端口通常与输入端 口在同一线路卡上成对出现。

     

    ·选路处理器。选路处理器执行选路协议,维护选路信息与转发表,并执行路由器中的网络管理功能。

     


    1 输入端口

     

    输入端口的线路端接实现了物理层功能;数据链路处理模块实现了数据链路层功能。

    输入端口的查找/转发模块对于路由器的转发功能是至关重要的。在许多路由器中,都是在这里通过查询转发表来确定一个到达的分组经交换结构转发给哪个输出端口。

    虽然转发表是由选路处理器计算的,但通常路由器会将一份转发表的拷贝存放在每个输 入端口,而且经常更新。

     


    2 交换结构

     

    交换结构位于一台路由器的核心部位。正是通过交换结构,分组才能实际地从一个输入端口交换(即转发)到一个输出端口中。交换可以通过许多方式完成

     

    ·经内存交换。最简单、最早的路由器通常是传统的计算机,在输入端口与输出端口之间的交换是在 CPU(选路处理器)的直接控制下完成的。输入端口与输出端口的作用就像传统操作系统中的 IO 设备一样。一个分组到达一个输入端口时,该端口会先通过中断方式向选路处理器发出信号。于是,将分组从输入端口处拷贝到处理器内存中。选路处理器则从分组首部中取出目的地址,在转发表中找出适当的输出端口,并将该分组拷贝到输出端口的缓存中。

     

    许多路由器都使用内存交换技术。然而,目的地址的查找和将分组存储(交换)进适当的存储位置是由输入线路卡上的处理器来执行的。

     

    ·经总线交换。在这种方法中,输入端口经一共享总线将分组直接传送到输出端口,不 需要选路处理器的干预(注意经内存交换时,分组进出内存也必须跨越系统总线)

     

    虽然选路处理器没有涉及总线传送,但由于总线是共享的,故一次只能有一个分组通 过总线传送。某个分组到达一个输入端口时,如果发现总线正忙于传送另一个分组,则它会 被阻塞而不能通过交换结构,并在输入端口排队。因为每个分组必须跨过单一总线,所以路由器的交换带宽受总线速率的限制。

     

    现在的技术条件下,总线带宽可能超过 1 G bps,基于总线的交换目前已被相当多的路 由器产品所采用。

     

    ·经一个 crossbar 络交换。克服单一、共享式总线带宽限制的一种方法是,使用一个更复杂的互联网络,如过去在多处理器计算体系结构中用来互连多个处理器的网络。

     


    3 输出端口

    输出端口处理取出存放在输出端口内存中的分组并将其传送到输出链路上。

    当交换结构将分组交付给输出端口,速率超过输出链路速率时,就需要排队与缓存管理 功能。

     


     

    4 何时出现排队

     

    输入端口和输出端口处都能会出现分组排队现象。随着这些队列的增长,路由器的缓存 空间最终将会耗尽,然后出现丢包现象。

     

    分组丢失的实际位置(要么在输入端口队列,要么 在输出端口队列)将取决干流负载、交换结构的相对速率和线路速率等几个因素。

    输入端口排队主要原因是交换结构不能及时转发数据报

    输出端口排队时,输出端口可以使用某种调度策略,如先来先服务调度;加权公平排队 (WQ)规则等,尽可能在不同端到端连接之间公平地共享输出链路

    分组调度程序在提供服务质量保证方面起着关键作用。

     

     

    展开全文
  • 夜光序言: 如果有一天,你正一个人在大马路上走,突然听见一群熟悉的声音在后面扯着嗓子大喊你曾经的外号,你会不会突然停住,然后回头,看着一张张熟悉并且依旧觉得欠揍的脸,泪流满面? 正文: Applet的...

    夜光序言:

     

    如果有一天,你正一个人在大马路上走,突然听见一群熟悉的声音在后面扯着嗓子大喊你曾经的外号,你会不会突然停住,然后回头,看着一张张熟悉并且依旧觉得欠揍的脸,泪流满面?

     

     

    正文:

     Applet的基本工作原理

    Applet类

     

     

    展开全文
  • 夜光序言: 在有你的经年里,我愿以我最苍凉的姿势,聆听你内心最凄美的心声。 正文:PHP MySQL 预处理语句 有点意思:预处理语句及绑定参数 预处理语句用于执行多个相同的 SQL ...
  • 夜光序言: 或许你的一句不经意的话,他都当真了 或许你的一个不经意的动作,他就爱上了 喜欢一个人是没有理由的 正文:二、 SpringMVC 组件实现原理 1 执行逻辑图 2 组件介绍 2.1DispatcherServlet ...
  • 夜光序言: 满地落樱留不住三月的脚步。~~~ 正文:AOP 面向切面编程,其底层原理就是动态代理实现。如果切面策略目标有接口实现,使用JDK 的动态代理技术;无接口实现则使用 CGLIB 技术生成动态代理。 ...
  • 夜光序言: 不要浪费你的生命,在你一定会后悔的地方上。憎恨别人对自己是一种很大的损失。 逆境是成长必经的过程,能勇于接受逆境的人,生命就会日渐的茁壮。 保持激情;只有激情,你才有动力,才能感染自己和...
  • 夜光序言: 毅力是什么? 毅力就是坚持,有毅力就代表着努力。 没有毅力,一个人将一事无成, 再宏伟的梦想也只能是一个梦而已, 再宏大的理想也只能是想一想罢了。 正文: 基于...
  • 夜光序言: 人的一生不能只为物质而活,要有更大的格局和心胸。一个梦想改变世界的人,一定会勇于修正自己,一定比他人更有冲破黑暗的决心和毅力。我们的存在,应该一起让这个世界更为美好,不是吗? ...
  • 夜光序言: 我都舍不得欺负的人,哪能让别人欺负? 正文: 以道御术 / 以术识道 package 深入理解volatile原理与使用; //保证可见性的前提 //多个线程拿到的是同一把...
  • 夜光序言: “宰相肚里能撑船”,心有多大,天地就有多大。凡事,看淡一些,看开一些,看远一些,就会发现“潮平两岸阔,风正一帆悬”并非妄念。学会原谅那些无心之失,学会坦然面对事业、生活中的不如意。做一...
  • 夜光序言: 汪洋大海不缺鱼, 浩浩长空不缺鸟, 万花丛中不缺蝶, 我的世界不缺你。     正文: aop原理   下面就要开始有意思的东西了~~ Spring两个核心,一个ioc,一个aop Aop底层原理和相关...
  • 夜光序言: 世界上最遥远的距离 不是生与死 而是你就站在我面前 我却无法说出我爱你 正文: 嘿哈: 图一:HttpServlet的原理 图二:HttpServlet的时序图 图三: GET请求编码 图四:请求转发和...
  • 夜光序言: 有些人走着走着就散了,有些事哭着哭着就忘了…… 正文: Netty 一、 网络编程基础原理 1 网络编程(Socket ) 概念 首先注意, Socket 不是 Java 中独有的概念,而是一个语言无关...
  • 医院实习日记.doc

    2020-12-27 15:27:33
    医院实习日记 1月22日 一点觉悟 病历是永远写不完的 所以也不要加班了 今天写不完就明天写 明天写不完就后天写 总有出科的一天嘛 1月19日 思维散漫的话 夜光星星 在BB团了5包夜光星星、心心、雪花、笑脸,迫不及待...
  • 夜光序言: 很多时候,一个人的改变是从另一个人的出现或离开开始的~~     正文: 基础知识十分重要(理解了基础,下面都好说嗯) Mybatis框架原理 Mybatis入门程序【和springmvc一样通过订单商品,案例...
  • 夜光序言: 人总是需要一些仪式的,仪式给人庄重感和宿命感,给人信心。 没有人会理解她这种莫名其妙的执念——想象中那样平等的相识是多么的重要。   正文: SAX SAX概述   1 SAX解析原理 首先我们想...
  • 3D打印基础知识笔记

    2020-10-04 10:47:41
    3D打印原理 3D打印是一种以数字模型为基础,运用粉末状金属或塑料等可粘合材料,通过逐层打印的方式来逐层构造物体的技术。 一般以丝杠带动坐标轴移动。 3D打印标准模式 STL(sterelithography)即立体印刷,此后缀...

空空如也

空空如也

1 2
收藏数 21
精华内容 8
关键字:

夜光原理