평소 좋아하는 '널널한 개발자'님의 영상을 보다가
헤더에 관한 얘기를 듣다보니 네트워크 속도가 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는 헤더가 더 작은데 더 빨리주고받나? 싶은데 그건 다음에 알아보도록 하자아
'IT > Back-end' 카테고리의 다른 글
ECR+EC2 VS ECR+ECS (2) | 2024.07.23 |
---|---|
자주 액세스하지 않는 데이터를 위한 S3 스토리지 클래스 비교 (0) | 2024.06.13 |
AWS API gateway header 읽지 못하는 문제 (0) | 2023.08.01 |