네트워크 카드 2개 사용해서 전송하기
네트워크 카드 2개를 이용해 udp 패킷을 송/수신 하려고 합니다.
Channel bonding 인터페이스를 소프트웨어 상에서 구현하는 거죠..
송/수신 시스템에서 한 개의 네트워크 카드를 사용한다고 가정하면 전체 대역폭은 2Gbps 가량 됩니다.
송신측에서는 Thread 사용없이 순차적으로 패킷을 전송합니다.
예를 들어, 1000 개의 연속된 패킷을 네트워크 카드 1번으로 보낸 후,
다음 1000개는 네트워크 카드 2번으로 전송합니다(sendto()). 같은 방식으로 카드 1과 카드 2를 번갈아
가면서 전송하게 됩니다.
수신측에서는 select()를 이용해 네트워크 인터페이스를 구분하고 버퍼링하게 됩니다.
(수신측도 2개의 네트워크 인터페이스를 이용합니다)
지금 부터 질문 들어가겠습니다.
select()를 통해 얻은 소켓 정보를 가지고 수신측에서 패킷을 recvfrom()하는데
out-of-order된 패킷이 다량 발견됩니다. RTP 패킷을 사용하므로 out-of-order를 체크할 수 있습니다.
송/수신 시스템이 스위치를 거치지 않고 직접 연결되어 있는 상황입니다.
일단, 제 경우에 생각할 수 있는 out-of-order 패킷의 발생원인과 해결 방법에 대해서 알고 싶습니다.
out-of-order 패킷을 buffering 한 후에, re-ordering을 하지 않는다는 조건이 있습니다.
조금 더 구체적으로
1. 송신측에서 패킷이 송신되는 순서가 바뀔 수 있는지, 그렇다면 해결 방법은 무엇인지?
2. 수신측에서 out-of-order가 발생했다면, 어디에서 문제가 되는지, 어떻게 해결할 수 있는지 알고 싶습니다.
인터페이스1에서
인터페이스1에서 패킷 1000개의 전송이 완료되기 전에 인터페이스2의 패킷 전송이 시작되는 것이 아닐까요?
send()가 링크 레이어에서 전부 보낸 다음에 리턴하는 것이 아니고, 커널 버퍼나 랜카드 버퍼에 일단 채워넣었으면 바로 리턴할 테니 말입니다. 인터페이스1을 위한 버퍼에 패킷들이 남아 있는 상태에서 인터페이스2의 전송을 시작하면 순서가 뒤집힌 패킷들이 생기겠죠.
댓글 달기