수업/정보통신망

9강 TCP/IP 전송계층

MDanderson 2025. 4. 10. 22:38

전송 계층 프로토콜

- 인터넷에서 가장 많이 사용되는 프로토콜

 

TCP 연결형 통신

UDP  비연결형 통신

 

UDP (User Datagram Protocol)

 

process- to process protocol 

cf) IP: host to host protocol

 

비연결성 비신뢰성

기본적인IP전달 서비스에 프로세스간 통신이 추가된 형태

연결성보장과 신뢰성 전송에 소요되는 오버헤드가 없음

간단한 메시지를 송수신하는 데 유리

 

UDP= 비연결형 IP전달 서비스 +검사합(checksum)기능

 

UDP의 장점 : 데이터전송이 빠르고 응용프로그램이 간단해짐, 오버헤드가 발생하지않음

UDP의 단점:  메시지손실,중복수신,수신지연,잘못된순서 처리하기위한 신뢰성 제어기능을 제공해야함

 

 

UDP 가짜 헤더(pseudo header)

 

 

UDP 가짜 헤더는  왜 만들까?


✅ 요약부터!

UDP의 가짜 헤더는 "오류 검사(Checksum)"를 더 정확하게 하기 위해서 만듭니다.
IP 계층의 정보까지 같이 검증하기 위해
전송할 때는 붙지 않지만, 오류 검사할 때만 임시로 만들어서 계산해요.


📦 왜 오류 검사가 필요한데?

UDP는 신뢰성이 낮다고는 하지만,
최소한의 오류 확인(Checksum)은 해요.

  • UDP 헤더에는 16비트짜리 Checksum 필드가 있음
  • 이걸 계산해서 → 전송
  • 수신 측은 받아서 → 다시 계산 → 값이 다르면 오류 발생

 

🔍 그런데 왜 "가짜 헤더"가 필요할까?

UDP는 자기 헤더와 데이터만 보고 오류 검사를 하면 불완전해요.
왜냐하면…

📌 패킷이 진짜 도착했는지, 올바른 IP 주소로 왔는지는 IP 계층 정보에 달려 있음

즉, IP 계층에서:

  • 누가 보냈는지(출발지 IP)
  • 누구한테 보내는지(목적지 IP)
  • 이게 UDP인지 뭔지(프로토콜 번호)

➡️ 이 정보들이 잘못됐는데, UDP는 몰라요!
그래서 **UDP는 "IP의 핵심 정보도 같이 검사해야겠다!"**고 생각한 거예요.


✅ 그래서 가짜 헤더(Pseudo Header)를 만듭니다

오류 검사할 때, 다음 정보들을 임시로 붙여요:

필드설명
출발지 IP 주소 32비트
목적지 IP 주소 32비트
0 8비트 (예약값)
프로토콜 번호 8비트 (UDP는 17)
UDP 길이 16비트

➡️ 이걸 UDP 데이터 앞에 임시로 붙여서 체크섬 계산
➡️ 끝나면 버리고, 전송은 UDP 헤더 + 데이터만!

 

✅ 체크섬(Checksum)이란?

데이터가 전송 중에 손상됐는지를 확인하기 위한 숫자값이에요.
보통 전송하기 전에 계산해서 같이 보내고,
받는 쪽에서 다시 계산해서 비교합니다.

👉 값이 같으면 ✅ 데이터가 "정상"
👉 값이 다르면 ❌ 데이터가 "손상됨"


📦 왜 필요한가요?

데이터는 전기 신호예요⚡
➡️ 전송 중에 신호가 흐트러지거나 1이 0으로 바뀔 수도 있음
➡️ 그러면 데이터가 손상되지만, 눈으로는 모름
➡️ 그래서 수신자가 "이게 맞게 온 건지 아닌지"를 확인해야 함


🎯 어떻게 계산되나요?

간단한 예:

데이터: 1001 1100 1010

  1. 숫자들을 일정 규칙으로 더함 (보통 16비트 단위로 덧셈)
  2. 결과값을 뒤집거나 보정해서 체크섬 값 생성
  3. 이 값을 데이터와 함께 전송
  4. 받는 쪽은 똑같이 계산해서 비교

✅ 체크섬 어디에 쓰이나?

쓰이는 곳설명
UDP 헤더 오류 확인용 (UDP 가짜 헤더 포함)
TCP 헤더 수신 확인, 재전송 판단
IP 헤더 헤더 오류 체크
파일 저장/압축 ZIP, ISO 등도 체크섬 있음 (CRC 등)
프로그램 다운로드 SHA256, MD5 등으로 체크

❗ 한계도 있어요

  • 체크섬은 단순 오류(1~2비트 뒤틀림)만 잡아냄
  • 암호화, 위조, 해킹 감지는 못함! → 보안용 해시는 SHA, HMAC 등 강력한 해시함수 사용

✅ 예: UDP 헤더 구조에서 체크섬

필드설명
Source Port 16비트
Destination Port 16비트
Length 16비트
Checksum 수신 데이터가 맞는지 검사


 

 

 

 

"체크섬 계산 방법도 같이 보내는 거야?"

정답은 NO!
계산 "방법"은 안 보내고,
👉 계산 "결과값(체크섬 값)"만 보내요.


✅ 왜 계산 방식은 안 보내도 되냐면?

체크섬을 만드는 계산 공식은 전 세계적으로 '표준'이 정해져 있기 때문이에요.

즉,

  • 보내는 쪽과 받는 쪽이 "똑같은 계산법"을 알고 있어요 (프로토콜에 포함되어 있음)
  • 그래서 "이렇게 계산했어!"라고 말할 필요 없이,
    그냥 계산된 **결과값(체크섬)**만 보내면 되는 거예요

🎯 예를 들어서

UDP 패킷을 보낼 때:

  1. 보내는 쪽:
    • UDP 헤더 + 데이터 + (가짜 헤더)로 체크섬 계산
    • 나온 값: 예를 들어 0xA1B2
    • 이 값을 UDP 헤더의 Checksum 필드에 써서 전송
  2. 받는 쪽:
    • 받은 데이터로 똑같은 방식으로 체크섬 다시 계산
    • 계산된 값이 받은 체크섬과 같으면 → 데이터 정상!
    • 값이 다르면 → 오류 → 버리거나 재전송 요청

✅ 그래서 프로토콜 문서에 항상 적혀있어요

예: UDP 프로토콜 (RFC 768)

"Checksum은 출발지 IP, 목적지 IP, UDP 길이, UDP 데이터 등을 이 순서대로 더해서 1의 보수로 만든다."

➡️ 이걸 전 세계 컴퓨터가 똑같이 따라함

 

 

 

"가짜 헤더를 만들어서 체크섬 계산을 하고 → 수신 측도 다시 가짜 헤더를 만들어서 비교한다"
정답입니다!

근데 여기서 바로 질문이 나오는 거죠:


❓ "수신 측은 발신지 IP를 어떻게 알아서 가짜 헤더를 똑같이 만들지?"

정답은:

IP 헤더에 발신지 IP 주소가 이미 포함되어 있기 때문이에요!


📦 구조적으로 보자면…

✅ 네트워크 계층은 이렇게 생겼어요:

plaintext
복사편집
[ IP 헤더 ] ├─ 출발지 IP 주소 ← 여기에 있음! ✅ ├─ 목적지 IP 주소 ├─ 프로토콜 (17 = UDP) └─ ... [ UDP 헤더 ] ├─ Source Port ├─ Destination Port ├─ Length ├─ Checksum ✅ [ 데이터 ]

➡️ UDP는 IP 위에서 동작하니까, IP 헤더 정보를 읽을 수 있어요!


✅ 수신 측에서의 흐름 정리

  1. 패킷 도착
  2. IP 계층에서:
    • 출발지 IP (192.168.0.2)
    • 목적지 IP (192.168.0.10)
    • 프로토콜 번호 (17 = UDP) → ✅ 이걸 전부 가져옴
  3. UDP 계층에서:
    • UDP 헤더 + 데이터 + 위 IP 정보로 가짜 헤더 생성
  4. 체크섬 다시 계산해서 비교!

🔍 다시 요약

질문답변
누가 가짜 헤더 만들어요? 송신 측, 수신 측 모두 (오류 검사용)
IP 주소는 어디서 가져와요? IP 헤더에 포함되어 있음
그럼 동일하게 만들 수 있어요? YES! 구조가 동일하므로 문제 없이 가능

 

 

 

 

 

"송신 측에도 IP 계층이 있어서 IP 헤더 만들 텐데, 왜 UDP는 그걸 다시 가짜 헤더로 만들어야 하냐?"


✅ 결론부터 말하자면:

IP 헤더는 UDP 계층에서는 직접 접근할 수 없기 때문입니다.
즉, 계산 당시에는 아직 IP 헤더가 '진짜로 만들어지기 전'이기 때문에,
UDP가 필요한 정보를 따로 가짜 헤더로 만들어서 계산하는 거예요.

 


✅ 송신 과정은 이렇게 돼요:

  1. UDP 계층에서:
    • 데이터를 만들고 헤더도 붙임
    • 체크섬을 계산해야 함
  2. 근데! 체크섬 계산할 때 필요한 정보 중 일부는 IP 계층의 정보임:
    • 출발지 IP
    • 목적지 IP
    • 프로토콜 번호 (17)
    • 전체 UDP 길이
  3. 문제는:
    이 시점에는 IP 계층이 아직 IP 헤더를 붙이기 전!
    → UDP는 자기 헤더 안에 없는 정보를 필요로 하지만,
    직접 접근해서 가져올 수 없어요.

💡 그래서 하는 방법:

"좋아, IP 계층이 나중에 붙일 정보 중에 내가 필요한 것들만
미리 복사해서 '가짜 헤더'로 만들고 체크섬 계산할게!"

→ 이게 **Pseudo Header (가짜 헤더)**의 이유입니다!


✅ 수신 측도 마찬가지

수신 측은 IP 계층이 먼저 패킷을 받고 →
UDP 계층에 넘겨줄 때 IP 주소 등은 전달되니까
UDP가 같은 방식으로 가짜 헤더 만들어서 체크섬 계산 가능!


📌 그래서 포인트는:

구분설명
UDP 계층이 직접 IP 헤더 접근 가능? ❌ 불가능 (계층 분리 원칙)
그럼 어떻게 해? ✅ 필요한 정보만 따로 만들어서 "가짜 헤더"로 사용
수신 측도 가능해? ✅ IP 계층에서 정보 전달받아서 동일하게 재계산 가능

🎯 한 줄 요약

UDP가 가짜 헤더를 만드는 이유는, 체크섬 계산 시 필요한 IP 계층 정보를 직접 접근할 수 없기 때문에, 필요한 정보만 따로 만들어서 사용하기 위해서입니다.

 

 

 

 

TCP (Transmission Control Protocol)

 

연결지향 데이터전송

Segment단위 전송 

흐름제어( sliding window, flow control)

오류제어(응답패킷, 시간초과 , 재전송방식) 

 - 타이머관리

 - 체크섬,  순서보장,  중복 패킷 방지

 

 

 

 

 

'수업 > 정보통신망' 카테고리의 다른 글

11ㄱ  (0) 2025.04.13
10ㄱ  (0) 2025.04.13
8. TCP/IP : 네트워크계층  (0) 2025.04.09
7ㄱ  (0) 2025.04.08
6.데이터 통신의 전송기술(3) 흐름제어 혼잡제어 라우팅  (0) 2025.04.07