networking - Why wait DIFS in order to sense if the channel is idle -


station waits in order sense if channel idle difs , starts transmission. question why wait difs , not sifs only. problems, issues may cause (sense sifs instead of difs)?

short answer: sifs not long enough detect if channel indeed idle. implication of waiting sifs instead of difs mac protocol shall no longer able detect busy channel, collisions may happen time, , poor channel efficiency.

long answer:

  • what sifs? standard defines sifs (short inter-frame space) used separate data , ack frames. station (sta) receiving data wait sifs before sending ack. should short possible, enough decode frame, mac processing, , preparation time send ack. 802.11n/ac, sifs = 16 microseconds.
  • what difs? difs = sifs + 2*slot_time. similar sifs, slot_time phy-dependent. 802.11n/ac, slot_time = 9 microseconds. slot_time defined long enough account for, among others, propogation delays, enable neighbouring stas detect transmitting sta's preamble.

having said that, if sta waits sifs before transmitting, there no way can detect possible ack frame being sent neighbouring sta @ exact same time - leads collisions , poor channel efficiency.

others:

  • if 1 slot_time long enough detect transmitting sta's preamble, why not wait sifs + slot_time ? can be, pifs used ap (to have higher access priority normal stas).
  • why wait at least difs before sending ? given difs enough determine whether channel busy or not, why not wait difs ? that's because there can multiple stas possibly sending channel @ same time. if every sta waits difs send - that's collision. that's why standard mandates if sta sending channel idle difs, can transmit immediately. but if sta sending channel busy, must wait difs plus random backoff time avoid collisions. random backoff time ?? time google on 802.11 csmd/ca then..
  • for reference, there a similar q deals sifs , touched bit on other channel access timing.

Comments

Popular posts from this blog

html5 - What is breaking my page when printing? -

c# - must be a non-abstract type with a public parameterless constructor in redis -

ajax - PHP/JSON Login script (Twitter style) not setting sessions -