728x90
반응형

평소 좋아하는 '널널한 개발자'님의 영상을 보다가
헤더에 관한 얘기를 듣다보니 네트워크 속도가 1mb/s일 때 데이터 1mb보내는건 1초보다 더걸리겠다 싶어서
맞는지 궁금해서 좀 더 찾아보았다!

(이 글에서 물론 여기서 latency나 대역폭 개념은 무시한다. 수많은 원인이 있기 때문..!)

https://www.youtube.com/watch?v=K9L9YZhEjC0

 

기본적으로 데이터를 PC끼리 주고받을 때 OSI 7계층을 오간다.

각 계층을 이동할 때마다 '이전 계층에서 받은 값' + 해당 계층 프로토콜의 헤더가 붙는다.

만약 1mb의 데이터를 보낼 때 한번에 1mb를 보내는게 아니고 패킷이라는 단위로 나누어 하나씩 보내는데, 
패킷의 크기는 MTC(최대 패킷 크기)에 의존한다. TCP/IP 스택에 따라서 달라지기도 한다!

 

1mb를 보낼 때 필요한 패킷 개수 계산

일반적으로 MTC는 1500byte인데, 여기에 IP 헤더, TCP 헤더가 포함되므로
실제 데이터 크기는 1500byte보다 작은 1460byte 정도 된다.

  • IP 헤더: 일반적으로 20 바이트
  • TCP 헤더: 일반적으로 20 바이트

=> 1mb 데이터를 전송하기 위해 약 719개의 패킷이 필요하게 된다.

그리고 이더넷 네트워크의 경우 아래 만큼의 용량이 더 필요해서 이더넷 프레임의 크기는 1518byte가 된다.

1460 bytes (데이터)+20 bytes (TCP 헤더)+20 bytes (IP 헤더)+14 bytes (이더넷 헤더)+4 bytes (FCS)=1518 bytes

  • 이더넷 헤더: 14 바이트
  • 이더넷 트레일러 (FCS): 4 바이트

그래서 이 가정에서는 1mb를 보낼 때 1518byte짜리의 이더넷 프레임을 719개 주고받아야한다.

 

 

1mb/s 네트워크에서 1mb의 데이터를 보낼 때 걸리는 시간 계산

네트워크 속도와 데이터 크기의 차이는 결국에 이 헤더들이 붙기 때문에 발생하게 되는데 GPT가 간단하게 계산해준걸로 참고하자면 

계산에 따르면 네트워크 속도가 1mb/s 일 때 전체 전송 데이터 양을 전송한데 필요한 시간은 약 1.1초 정도 걸린다.

그래서 평소에 네트워크를 사용해서 파일을 다운받을 때 네트워크 속도가 데이터 용량을 못따라가는데? 라고 생각했던건 우연이 아니었던 것이다! (물론 이 가정에서 핸드셰이크 등 연결을 위한 지연 시간 등은 무시됐긴 함)

 

결론

실제로 데이터를 주고받을 때에는 헤더들이 붙어서 더 큰 크기의 데이터를 주고받는 것이고
대략적으로 네트워크 속도보다 더 오랜 시간이 소요된다...

 

그럼 여기서 궁금해지는건 UDP는 헤더가 더 작은데 더 빨리주고받나? 싶은데 그건 다음에 알아보도록 하자아

 

728x90
반응형

+ 최근 게시글