목록C++/이것저것테스트 (3)
하아찡

이전에는 TCP 흐름제어를 테스트해봤는데UDP는 흐름제어가 없다고 배웠다. 그러면 흐름제어가 없을경우 어떻게 될까?일단 테스트를 해본당. 첫번째, TCP처럼 일정이상 데이터가 쌓이게되면 멈출까?TCP기준으론 서버리시브를 일정시간 멈춰두고, 클라이언트에서 일정이상 데이터를 보낼경우 더이상 데이터를 보내지 않았는데.UDP에선 서버 리시브를 일정시간 멈춰두고, 클라이언트에서 무수히 데이터를 보냈는데 멈추는 경우가 없었습니다.해당 테스트는 해보고 넘어가서 사진이 없습니다. ㅠㅠ 두번째, 데이터는 제대로 들어올까?테스트환경은 이러합니다.클라이언트쪽에서 서버측으로 데이터를 계속 보냅니다.서버측에선 클라이언트 데이터를 계속 받습니다.무수히 빠르게 데이터를 주고 받는과정에서 과연 데이터가 정상적으로 들어왔는지를 확인..

이전에는 Boundary를 확인해보고 해결방법도 생각해봤는데TCP에서 흐름을 자동으로 제어해준다? 라는게 사실 와닿지가 않음. 눈으로 볼 수 있으면 좋은데보이면 어떻게 흐름이 제어가 되고있는지도 확인을 해볼까해서 이것저것테스트하는중. 테스트 과정은 이러합니다클라이언트에서 SendBuffer 를 왕창 채워봅니다. -> 일정시간을 기다린다음 -> 서버측에서 리시브를 합니다 -> 서버측에서 리시브를 받는동안에도 클라이언트는 SendBuffer 에 왕창데이터를 채워봅니다. -> 이과정에서 클라이언트 쪽에서 Send가 멈추는지를 확인해봅니다. 위 gif를 보면 왼쪽은 클라이언트 / 오른쪽은 서버 입니다.(중간에 서버측 값이 100이상으로 변경된건 캡처를 잠시 멈췄다가 다시했습니다.)왼쪽 클라이언트가 Send를 빠..

소켓통신을 공부하다보니 TCP는 전송 순서와 손실을 보장주지만, 데이터 사이의 경계가 없다.데이터 사이의 경계가 없는게 무엇일까?내가 클라이언트에서 5Byte를 10000번을 보냈는데서버측에서 한번에 받는 리시브 버퍼가 99Byte이면 한번씩 주거니 받거니할땐 상관이 없겠지만클라이언트 쪽에서 데이터를 계속 보내고있는데 서버측에서 리시브를 하지않는경우 커널쪽 리시브 버퍼쪽에 데이터가 쌓이게 됩니다.만약 해당 데이터가 20번 반복해서 100Byte가 버퍼에 차있을경우, TCP 통신의 경우 Boundary가 없기 때문에 한개의 데이터 5Byte를 읽어오는게 아닌 99Byte를 읽어오게 됩니다.위 과정에서 데이터가 잘리게 됩니다. 테스트 과정은 0부터 9999까지 정수를 보내는 과정 일부 메모리를 캡쳐했습니다...