[CN(2)]전송계층(3)

이유정·2024년 9월 3일
0

컴퓨터네트워크

목록 보기
37/39

지난시간

  1. 패킷 유실
  • 패킷화 => 1기가를 한꺼번에 보낼 수 있는 네트워크 X
  • Sequence Number, ACK, 타이머
    • Sequence Number 1bit가 필요하다. (패킷 유실 o, 패킷전송순서 보장일 때)
      : 1비트로 충분한 경우: 패킷이 손실되지 않고 순서가 보장되는 환경에서는 패킷의 확인 응답을 단순하게 구현할 수 있습니다. 이 경우, 단순히 "도착했다/안 했다"를 표시하는 데 1비트로 충분할 수 있습니다.
    • 패킷 순서가 보장되지 않을 때는 무한의 bit가 보장되어야 한다.
      : 패킷 순서가 보장되지 않는 환경에서는 모든 패킷의 순서를 고유하게 추적할 필요가 있습니다. 이는 많은 수의 비트가 필요하다는 것을 의미합니다. TCP에서 32비트 Sequence Number를 사용하는 이유도, 패킷이 도착 순서가 뒤섞일 수 있는 상황에서도 데이터의 순서를 정확히 재구성하기 위해서입니다.
  1. 내용 변조
  2. 패킷 전송 순서

복습

Sequence Number

  • Sequence Number는 TCP 세그먼트의 데이터가 전체 데이터 스트림에서 어디에 위치하는지를 나타낸다. 송신 측에서는 이 번호를 이용해 각 바이트가 데이터 스트림의 어디에 위치하는지를 표시한다.
  • 역할
    • 데이터 순서 보장: TCP는 순차적으로 데이터를 전송하지만, 네트워크 환경에서는 패킷이 도착 순서가 바뀔 수 있다. 수신 측에서는 Sequence Number를 사용해 패킷이 올바른 순서로 조립되도록 한다.
    • 중복 패킷 처리: 네트워크 환경에서는 중복 패킷이 발생할 수 있다. Sequence Number를 통해 수신 측에서는 중복된 데이터를 무시할 수 있다.
  • 비트 수
    • TCP에서 Sequence Number는 32비트 크기이다. 이는 매우 큰 숫자 범위 (0부터 4,294,967,295까지)를 제공하며, 이 범위는 TCP 연결에서 송수신되는 데이터의 바이트 수를 충분히 처리할 수 있다.
    • 16비트는 0부터 65,535까지의 숫자만 다룰 수 있어, 대량의 데이터를 전송하는데 문제가 생길 수 있음.

ACK

  • ACK는 수신 측에서 송신 측으로 보내는 확인 응답으로, 송신 측이 전송한 데이터가 제대로 도착했음을 알린다.
  • 역할
    • 신뢰성 보장: 수신 측은 데이터의 올바른 수신을 확인하게 위해 ACK를 송신 측에 보낸다. 이 ACK에는 수신한 데이터의 다음 예상 Sequence Number가 포함된다.
    • 손실 처리: 송신 측에서 기대했던 ACK가 오지 않으면, 이는 데이터 손실로 간주되고 해당 데이터를 재전송하게 된다.
  • 비트 수
    • ACK Number도 32비트 크기이다. 송신 측에서는 이 번호를 통해 수신 측이 다음에 받을 것으로 예상되는 바이트의 위치를 확인한다.

Timer

  • 타이머는 TCP에서 데이터를 재전송할 시점을 결정하는 데 사용된다.
  • 역할
    • 재전송 타이머: 송신 측에서 패킷을 전송한 후, 해당 패킷에 대한 ACK가 지정된 시간 내에 도착하지 안으면, 해당 패킷이 손실된 것으로 판단하고 재전송을 시도한다.
    • RTT 측정: 타이머는 또한 네트워크의 왕복 시간을 측정하여, 이후 전송에 사용될 타이머 값을 조정하는데 사용된다.

내용 변조

데이터 전송 중에 내용 변조(데이터의 무결성 손상)가 발생했는지 감지하기 위해 다양한 방법이 사용됩니다. 이 과정에서 트레일러(trailer)체크섬(checksum)을 추가하는 방법이 일반적인 방법 중 하나다.

데이터 무결성 검사란?

데이터 무결성 검사란 전송된 데이터가 손상되지 않고 원래의 내용과 동일하게 수신되었는지 확인하는 과정이다. 데이터 전송 중에 노이즈, 간섭 또는 해커의 공격 등으로 인해 데이터가 변조될 수 있다.

체크섬(Checksum)이란?

체크섬(Checksum)은 전송되는 데이터 블록에 대해 계산된 값으로, 데이터의 무결성을 확인하는 데 사용된다. 송신 측에서 데이터를 전송하기 전에 체크섬 값을 계산하여 데이터에 추가하고, 수신 측에서 데이터를 받은 후 같은 방식으로 체크섬을 계산하여 송신 측에서 받은 체크섬과 비교한다. 만약 두 체크섬 값이 일치하면 데이터가 무사히 전달되었다고 판단할 수 있다. 반대로, 일치하지 않으면 데이터에 변조가 발생했음을 감지할 수 있다.

트레일러에 1바이트 체크섬 추가

트레일러(trailer)는 전송되는 데이터의 끝부분에 추가되는 정보다. 트레일러에는 체크섬과 같은 무결성 검사 정보를 포함할 수 있다.

1바이트 체크섬: 체크섬의 크기를 1바이트로 제한한 경우, 이 체크섬은 데이터의 각 바이트의 합 등을 단순한 방식으로 계산할 수 있습니다. 예를 들어, 데이터를 구성하는 각 바이트의 값을 모두 더한 뒤, 1바이트(8비트)로 결과를 저장할 수 있습니다.

계산 예시:
데이터: 0x12, 0x34, 0x56, 0x78
각 바이트를 더한 결과: 0x12 + 0x34 + 0x56 + 0x78 = 0x114
1바이트로 표현할 때: 0x14 (결과의 하위 1바이트만 사용)
이 값 0x14가 체크섬으로 트레일러에 추가됩니다.

체크섬으로 변조 탐지 과정

송신 측: 데이터를 준비한 후, 이 데이터의 체크섬을 계산하고,
계산된 체크섬을 데이터의 끝에 트레일러로 추가하여 전송한다.
수신 측: 데이터를 받은 후, 수신한 데이터에서 체크섬을 분리합니다.
받은 데이터로 동일한 방식으로 체크섬을 계산합니다.
계산된 체크섬과 트레일러에서 분리한 체크섬을 비교합니다.
만약 두 값이 일치하면 데이터가 변조되지 않았다고 판단하고, 일치하지 않으면 변조가 발생했다고 판단합니다.
5. 1바이트 체크섬의 한계와 보완책
1바이트의 한계: 1바이트 체크섬은 매우 간단한 형태의 무결성 검사 방법입니다. 1바이트(8비트)는 256개의 고유한 값을 가질 수 있지만, 이 크기는 충돌 가능성이 높습니다(즉, 서로 다른 데이터가 같은 체크섬 값을 가질 수 있습니다). 따라서 1바이트 체크섬은 변조 감지에 약할 수 있습니다.

보완책:

더 큰 체크섬: 2바이트, 4바이트, 또는 16비트, 32비트 등 더 큰 크기의 체크섬을 사용하면 충돌 가능성을 줄일 수 있습니다.
해시 함수 사용: MD5, SHA-256과 같은 암호학적 해시 함수는 체크섬보다 훨씬 더 복잡하고 충돌 가능성이 낮은 값을 제공합니다.
CRC (Cyclic Redundancy Check): 데이터 전송에서 자주 사용되는 오류 감지 코드로, 체크섬보다 더 강력한 오류 탐지가 가능합니다.

결론
1바이트 체크섬은 간단하고 빠르게 무결성을 검사할 수 있는 방법이지만, 그 자체로는 변조 탐지에 충분히 강력하지 않을 수 있습니다. 더 안전한 무결성 검사 방법으로 더 큰 체크섬 또는 암호학적 해시 함수를 사용하는 것이 좋습니다. 특히 보안이 중요한 경우에는 이러한 보완책을 고려해야 합니다.

profile
강의 기록 블로그

0개의 댓글