소프트웨어에서 패킷 로스를 바로 알 수 있는방법?
글쓴이: yhlvyp / 작성시간: 수, 2009/09/09 - 7:46오후
무선 혹은 유선에서
수신측에서 패킷 로스가 일어나는 순간 바로알아낼수 있는 방법이 무엇이 있을까요?
만약 콜리젼때문에 패킷로스가 발생하였다면
MAC/PHY 하드웨어에서는 콜리젼이 나는것을 sense 할 수 있겠지만
커널 혹은 디바이스 드라이버에서는 불가능하지 않나 싶네요
패킷이 로스가 되었다는것을 아는 방법이 무엇이 있을까요?
혹은 불가능할까요?
소프트웨어에서의 패킷 에러 컨트롤은 오로지 순차번호를 이용하여 에러가 난 나중에 (다음 패킷이 도달하였을때)
알아내는 방법 외에는 없는걸까요?
Forums:
..
패킷 로스의 정의가 뭔지에 따라 다르겠지만 Etherrnet Frame이라면 힘들지 않을까요?
collision등을 거의 하드웨어에서 처리하고 loss 개수를 관리한다고 해도 하드웨어에서 그냥 개수만 관리할 것 같습니다.
그냥 예상해보는 것이니 크게 신경쓰지는 마시길.
커널에서 간단한 유선 랜카드 드라이버를 뒤져보시는게 어떨까요? proc 같은데서 링크 스테이터스 값은 가끔 보면서도 그게 어떻게 업데이트되는지는 모르겠네요..
A rose is a rose is a rose..
대게는 nic에
대게는 nic에 카운터가 있고 드라이버가 주기적으로 카운터 값 읽어와서 업데이트하고 ifconfig이나 netstat으로 볼 수 있는데요. 요샌 dummy hub 쓰는 경우가 거의 없으니 collision때문에 패킷 드롭이 생기는 경우는 사실상 없다시피 합니다. collision일어날 대상이 없으니까요. 로컬에서 송신하면서 overrun 때문에 drop이 되는 경우도 거의 없구요. 대게의 packet loss는 스위치나 라우터에서 대역폭을 넘어서거나 nic에서 열심히 받는데 드라이버/커널이 더 느리게 받아가는 경우인데 전자는 로컬에서 알 방법은 없고 후자는 알아도 할 수 있는게 없으니 둘 다 별로 쓸모는 없습니다.
무선에서는
무선에서 1hop을 생각해보죠
이때에는 수신측 인터페이스에서 collision이 일어나 로스가 될수 있겠지요
리눅스에 L2 패킷 loss 에러컨트롤 모듈을 구현하는데
어떤 패킷이 나에게 오다가 collision등으로 loss가 되었을때 내가 그걸 바로 알수 있으면 참 좋을텐데요
다음 패킷이 오기전에 바로 재전송해달라고 ACK, NAK등을 보낼수 있을테니..
에러가 일어난 즉시 sender에게 error report를 못한다는것이 안타깝습니다=ㅅ=;;
소프트웨어는 에러가 발생한 즉시 알아내는것이 불가능한걸까요?
::peha::
::peha::
아 그러게요 무선이
아 그러게요 무선이 있군요. 무선은 아는 게 별로 없어서요. 송신할 때 쫑나는 건 재전송하는 걸로 알고 있는데 전체적으로 어떻게 하는 지는 모르겠습니다.
무선랜(802.11), bluetooth
무선랜(802.11), bluetooth 등을 생각하면 collision detection은 힘듭니다.
detection 자체가 불가능하지는 않지만, 그러려면 장비가 비싸진다고 얼핏 들은 것 같네요.
그래서 무선에서는 collision avoidance 라는 개념을 써서, 최대한 collision을
줄이는 방향으로 전송을 하려고 노력을 합니다. Ethernet과는 개념이 좀 달라지지요.
그렇다 하더라도 sender가 ACK을 못 받으면, 재전송할테니
더 상위단의 소프트웨어가 관여하지 않아도 잘 동작하지 않을까요.
댓글 달기