네트워크와 패킷

pengooseDev·2023년 5월 13일
0
post-thumbnail

네트워크란?

  • 네트워크는 쉽게 말해 "연결"이다.
  • 두 대 이상의 컴퓨터가 연결된 순간부터 네트워크라 부를 수 있고, 필요한 정보를 주고받을 수 있다.

패킷이란?

  • 네트워크를 통해 전송되는 데이터의 작은 조각을 뜻한다.
  • 패킷 단위로 데이터를 나누지 않을 경우, 전송되는 데이터가 네트워크 대역폭을 많이 차지해 다른 데이터(패킷)의 흐름을 방해한다.
    • 따라서 사진과 같은 데이터는 반드시 패킷 단위로 나누어 주고받아야 한다.

잘게 쪼갠 데이터는 수신자가 어떻게 사용하는가?

하나의 사진을 16개의 패킷으로 나누었다고 가정하자.
패킷이 전송될 때 네트워크가 지연되면, 나누어진 패킷 중 일부가 늦게 도착하거나 누락될 수 있다. 그렇기에 보낸 순서와 상관없이 뒤죽박죽 도착하게 된다.

어떻게 할 것인가?


순서가 섞인 데이터를 다시 조립하는 법

TCP는 송신자가 보내는 패킷에 순서대로 넘버링을 함으로써 해결한다.

1. 넘버링은 어떻게 할까?

패킷의 순서는 전송 프로토콜(TCP의 경우)로 관리된다.
이 프로토콜은 각 패킷에 헤더를 추가하여 패킷의 순서, 출발지, 목적지 등을 기억한다.

하지만 UDP의 경우, 이러한 순서를 기억하지 않기 때문에 애플리케이션 레벨에서 이를 관리해야 한다.

  • TCP : 각 패킷에 "시퀀스 번호"를 매겨서 데이터의 순서를 기억한다.
  • UDP : 헤더에 시퀀스 번호가 없기 때문에 패킷의 순서를 유지하는 기능을 내재하지 않는다. 따라서 어플리케이션 레벨에서 패킷의 순서를 관리해야 한다.

2. 마지막 패킷이 도착했는지는 어떻게 알까?

이 또한 프로토콜에 따라 다르다.

  • TCP : 연결 종료를 알리는 FIN 플래그를 사용하여 마지막 패킷이라는 것을 알린다.
  • UDP : UDP에는 TCP와 같이 종료를 알리는 신호가 부재한다. 따라서 어플리케이션 레벨에서 마지막 패킷을 표시하거나, 일정 시간 이상 패킷을 받지 못하면 연결이 종료되었다고 판단하는 방법을 사용할 수 있다.

네트워크 문제로 패킷이 손실된 경우.

  • TCP : TCP는 신뢰성 있는 전송을 보장 지향한다. 따라서, 각 패킷에 대한 수신확인(ACK, Acknowledgement)을 체크한다. 수신자는 수신한 패킷에 대한 ACK 메시지를 송신자에게 보내, 패킷이 정상적으로 도착핬는지 확인한다.
    즉, ACK 메시지가 도착하지 않거나, 타임아웃이 발생하면 송신자는 패킷이 손실되었다고 판단해 다시 패킷을 전송하여 패킷이 손상되는 경우를 관리한다.

  • UDP(User Datagram Protocol) : UDP은 비연결형 프로토콜이기 때문에 패킷이 손실되는 경우에 대한 복구 메커니즘이 부재한다. 따라서 손실된 패킷을 복구되지 않고, 수신된 패킷으로 데이터를 조립해야 한다. (사진의 품질 저하 초래)


UDP는 패킷 손실을 어떻게 처리하는가?

UDP에 대한 이러한 문제(무결성, 순서 등)는 보통 애플리케이션 레벨에서 해결해야한다.

  1. 체크섬(Checksum) : 네트워크를 통해 데이터를 전송하는 과정에서 패킷이 손상되었는지를 확인함.

  2. 재전송 요청(ARQ, Automatic Repeat reQuest) : TCP 재전송 메커니즘과 비슷하게, 애플리케이션 레벨에서 구현. 수신자가 패킷을 받으면 송신자에게 확인 메시지를 보내며, 패킷이 손상된 경우, 수신자는 송신자에게 패킷을 재전송하도록 요청.

  3. 포워드 에러 수정(FEC, Forward Error Correction) : 해당 방식은 패킷이 손실될 경우, 이를 해결할 수 있는 패리티 데이터(보통 오류 정정코드)를 패킷에 추가해, 손실된 패킷을 복구하는데 사용할 수 있도록 한다.
    패킷의 크기가 증가해 네트워크 대역폭을 소비하지만, 패킷 손실에대한 해결책을 제공하기에 고려해볼 수 있는 사항 중 하나이다.


추가 정보

TCP(Transmission Control Protocol)

  • 연결형 프로토콜(데이터를 전송하기 전, 3-way handshake로 송수신자의 연결을 설정함.)
  • UDP에 비해 느리지만 안정성을 보장함.

UDP(User Datagram Protocol)

  • 비연결형 프로토콜(특별한 연결설정 없이 바로 패킷을 보냄)
  • 빠르지만 데이터의 순서나 무결성을 보장하지는 않음.
  • 실시간 스트리밍이나 게임 등의 어플리케이션에 사용됨.

3-way handshake

  1. SYN(동기화) 단계: 송신자가 수신자에게 연결 요청을 보내고, 자신이 데이터를 보낼 준비가 되었음을 알린다..

  2. SYN-ACK(동기화 확인) 단계: 수신자는 연결 요청을 수락하고, 자신도 데이터를 받기 위해 준비되었음을 알린다. 또한, 처음에 받은 연결 요청을 확인한다.

  3. ACK(확인) 단계: 송신자는 수신자가 준비되었음을 확인하고, 데이터 전송을 시작한다.

  1. 보낸다?
  2. 응 보내
  3. 전송

0개의 댓글