서적/모두의 네트워크 기초

06 - 전송 계층, 오류 없이 데이터를 전달하는 단계

kelly09 2025. 2. 9. 11:06

*<모두의 네트워크 기초>를 정리한 내용입니다.

전송 계층의 역할

  • 오류 점검
  • 컴퓨터가 데이터를 제대로 받았을 때 어떤 애플리케이션으로 전달해야 하는지 식별

 

오류 점검 방식

혼잡 제어(Congestion Control)

  • 네트워크로 들어가는 정보량을 조절하여 네트워크가 혼잡해지지 않게 조절
  • Time Out - 프로그램이 특정 시간 내에 성공적으로 수행되지 않아서 진행이 자동적으로 중단되는 것.

흐름 제어

  • 데이터 링크 계층의 정지-대기 방식과 동일
  • 송신자가 하나의 데이터 전송 후 다음 데이터 전달 전에 확인 응답 기다리는 방법

오류 제어

  • 확인 응답 - 수신자 측으로부터 ACK 응답을 받아야 함, ACK가 없으면 오류로 판단
  • 시간 초과 - 특정 시간 내에 ACK가 없으면 세그먼트에 오류가 있다고 판단

 

오류 발션 시 데이터를 재전송해야 하는데, 재전송이 필요한 상황은?

  • 데이터가 중간에 손실될 때
  • 데이터 순서가 바뀌었을 때
  • 데이터가 훼손되었을 때

데이터를 다음 계층으로 전달 ⇒ 포트(port) 번호 필요

 

3방향 핸드셰이크

데이터 전달 목적에 따라 나뉨

  • 연결형 통신 - 정확하게 데이터를 전달하는 것이 목표, TCP 프로토콜 사용
  • 비연결형 통신 - 효율적으로 데이터를 보내는 통신, UDP 프로토콜 사용

TCP 프로토콜

  • 데이터를 세그먼트라는 단위로 쪼갠 후 순서를 부여하여 전송
  • 3 Way Handshake 방법으로 통신
  • 상대방이 내 신호를 받을 수 있는 상태인지 확인하고 전송

⇒ TCP 통신을 하는 장치 간에 서로 통신할 준비가 됐는지를 확인하는 과정

1. 송신자 -> 수신자에게 SYN(Synchronize Sequence Number)라는 임의의 숫자 전송
"내 말 들려?"
2. 수신자 - ACK("잘 들려"), SYN("너도 내 신호 잘 받고 있지?")
=> ACK는 SYN + 1, SYN은 임의의 숫자
3. 송신자 - ACK("잘 들려!")
=> ACK는 SYN + 1

 

TCP(Transmission Control Protocol)의 구조

헤더

포트 번호

  • 프로그램의 주소
  • 65,536개 존재
  • 0 ~ 1023: well-known port, 특정한 쓰임을 위해 사용됨. ex) HTTP: 80
  • 1024 ~ 49151: 기관이나 기업이 사용, registered port
  • 49152 ~ 65535: 일반 사용자들이 사용, dynamic port

일련번호와 확인 응답 번호

  • 일련번호 - 송신자가 수신자에게 보내려는 데이터가 몇 번째인지 알려줌
  • 확인 응답 번호 - 수신자가 몇 번째 데이커를 받았는지 송신자에게 알려줌

윈도우 크기

  • 송신자가 한 번에 보낼 수 있는 데이터의 최대 크기
  • 어떻게 알아냄? → 3방향 핸드셰이크 과정에서 Window_Size 정보 주고받음

코드 비트

  • 기본값 0, 비트 활성화 시 1

⇒ 코드 비트를 이용하여 연결 제어

TURG 긴급 처리 데이터가 있음

ACK 확인 응답 번호 사용
RSH TCP가 받은 데이터를 상위 계층에 전달
RST 연결 재설정
SYN 연결을 초기화하기 의해 순서 번호 동기화
FIN 데이터 송신 종료

 

UDP(User Datagram Protocol)의 구조

  • 오류에 상관없이 데이터를 보내기만 함.
  • 신뢰성을 보장하지 않는 만큼 전송 속도가 빠름.

ex) 실시간 방송

  • 브로드캐스트에 사용되는 프로토콜.

헤더

  • 송/수신자의 포트 번호
  • 헤더 길이
  • 검사합(Checksum)

 

전송 계층에서 사용하는 로드 밸런서(Load Balancer)

  • 여러 대의 서버를 두고 사용자가 한 쪽으로 몰리는 것을 분산 시켜 주는 장치
  • 스케일 아웃(Scale Out) - 한 대의 서버에서 여러 대로 늘리는 것
  • 로드 밸런싱(Load Balancing) - 부하를 분산시켜주는 작업
  • http://www.nari.com을 서비스하는 서버는 1대, 동시 접속자가 만 명 ⇒ 서버 멈춤
  • 서버를 여러 대 구성해도 사용자들이 특정 서버 1대에만 접속하는 문제 발생 ⇒ 로드 밸런서 필요

부하를 분산시키는 방법

  • Round Robin - 각 서버별로 돌아가명서 연결 처리
  • Weighted Round Robin - 각 서버별로 돌아가면서 연결 처리, 일부 서버는 큰 트래픽을 몰아 받음.
  • Random - 무작위로 분배
  • Hash - 특정 클라이언트는 특정 서버에서만 처리
  • 포트 번호를 이용한 분산도 가능