패킷 전송 측정 관련 질문
글쓴이: minopak / 작성시간: 목, 2012/07/19 - 6:41오전
두대의 호스트 A, B가 link1으로 연결되어 있습니다.
HOST_A는 eth0로부터 받은 데이터를 eth1을 통해서 HOST_B로 전달합니다.
-----[eth0=HOST_A=eth1]-----link1------[eth0=HOST_B=eth1]-----
알아 보고 싶은 것은....
Host_A에서 전송하고자하는 데이터 전송률과 실제 link1을 통해서 전달되는 데이터 전송률을 구하고 싶습니다.
예를 들면, "HOST_A에서 eth1을 통해서 10MB로 전송하려고 하는데 실제로는 link1에서 3MB로 전송되고 있다"와 같이 말입니다.
link1에서의 전송률은 HOST_A의 eth1과 HOST_B의 eth0에서 tcpdump 와 같은 툴을 사용하면 실제로 전송되는 패킷들을 보면서 쉽게 구할수 있을 것 같은데...
HOST_A 내부에서 전송하고자하는 데이터 전송률, 즉 "몇개의 패킷을 보내려고 한다" 던지 "몇 MB/s의 속도로 보내려고 한다던지..."하는 것들을 볼수 있는지...
볼수 있다면 어떻게 봐야 하는지 궁금합니다.
열심히 적었는데...질문이 잘 전달되었는지 모르겠습니다.
그럼 답변 부탁드리며, 미리 감사드립니다.
Forums:
tcpip의 특성상 어느 호스트가 어느정도의 속도로
tcpip의 특성상 어느 호스트가 어느정도의 속도로 보내고 싶다 하는 전송률이 정해져 있는것이 아닙니다.
congestion control 쪽을 좀 보시면 아실테지만, 서로 각자의 윈도우 사이를 조정해가면 네트워크를 최대한 사용하여 전송하는 것이지요.
여러대의 호스트가 묶인 네트워크의 경우 이것이 거의 자동적으로 bandwidth allocation도 해주지요
다시 한번 질문을 정리하면...
답변 감사드립니다.
가령, 호스트에 100MB/s로 데이터를 보내야 하는 어플리케이션A와 20MB/s로 데이터를 보내야 하는 어플리케이션B가 있다고 하면
호스트로부터 나가야 하는 데이터 속도는 120MB/s가 되야 하지만, 실제로는 각 flow에 대한 tcp/ip에서 속도가 결정되서 120MB/s보다 작을 수 도 있을 겁니다.
제가 알아보고 싶은 것은 바로, 어떤 어플리케이션들이, 얼마의 속도로 데이터를 내보내야 하는지를 모르더라도
리눅스 커널단에서 전송해야하는 데이터가 얼만큼인지(혹은 전송해야하는 데이터 전송률이 얼만큼인지)를 알아낼 방법이 있는지 궁금한 겁니다.
즉, A가 100MB/s B가 20MB/s를 보내야 하는 것을 모르더라도, 리눅스 내부를 들여다보고서 "아, 지금 보내져야 할 데이터 전송률은 총 120MB/s 구나"라고
알수 있는 방법이 있는지가 궁금합니다. 실제로 전송되는 전송률 말구요.
내부를 잘 모르지만, 어플리케이션 단에서 보낼 데이터들을 TCP 패킷으로 만드는 과정에서 보내져야 하는 데이터 양 (혹은 데이터 전송률)을 구할수 없을까요?
일단... 각 애플리케이션이 보내야 한다는
일단...
각 애플리케이션이 보내야 한다는 밴드위드스가 정해져 있지 않습니다.
애플리케이션에서는 걍 이 데이터 보내줘라고 요청을 할 뿐이고, 이것이 시스템콜을 불러 큐에 넣어두고, 이 데이터들을 이더넷 카드를 보내는 것이고요.
그렇기에 각 애플리케이션이 보내고자 하는 속도 자체가 정해져 있지 않거니와, 정할수도 없죠.
물론 udp로 짜신다면 비슷하게 하실수 있지만, 그냥 네트워크 단에서 피드백 없이 드랍을 해버리기에 알수도 없습니다.
댓글 달기