모두의 네트워크
[모두의 네트워크]는 이제 막 네트워크를 공부하기 시작했거나 공부해야겠다고 마음먹은 초급자를 대상으로 한 입문서다. 네트워크의 개념, 비트, 바이트부터 OSI 계층, 무선 랜 구조까지 160개의 일러스트와 유쾌한 캐릭터들의 대화로 설명해 그림책을 읽듯 쉽고 재미있게 네트워크 관련 지식을 익힐 수 있다. [모두의 네트워크]로 누구나 쉽게 네트워크를 익혀 보자!
저자
미즈구치 카츠야
출판
길벗
출판일
2018.06.30

본 글은 위의 책을 바탕으로 학습한 내용을 정리하고, 그에 대한 개인적인 생각을 함께 기록한 글입니다.

 

 

전송 계층의 역할

네트워크 계층이 '데이터를 목적지 컴퓨터까지 어떻게 보낼까'를 고민한다면,

4계층은 그 컴퓨터 안의 어떤 프로그램에게, 어떻게 해야 정확하고 안전하게 전달할까를 고민한다.

그래서 전송 계층은 오류에 관한 역할을 주로 맡고 있다.

 

아래와 같이 정리할 수 있다.

  • 네트워크 계층(IP)
    도착 보장 X, 오류 검사 거의 X
    일단 목적지까지 던져준다.
  • 전송 계층(TCP)
    정확히 왔는지 검사 O
    빠진 거 없는지, 순서 맞는지, 깨진 거 없는지 확인

즉, 전송 계층까지 가져와서 ‘이게 제대로 왔는지’를 판단한다

아래부터 전송 계층의 대표 프로토콜인 TCP를 기준으로 전송 계층의 기능에 대해 알아본다.

1. 신뢰성을 위한 제어 기능 (TCP)

오류 점검 방식에는 3가지 방법이 있다.

  • 혼잡 제어
    송신자 측에서 데이터를 보내는 양을 조절하는 방법.
    먼저 하나의 데이터만 보내고 ACK를 받게 되면 전송량을 2배씩 증가시킨다.
    그러다 ACK가 약속된 시간안에 도착하지 않거나, 여러 번 받게되면 그제서야 데이터를 줄여서 보내는 방식으로 진행된다.
  • 흐름 제어
    ACK를 받을 때까지 멈추는 방식으로, 데이터 링크 계층에서 사용했던 흐름 제어방식과 동일하다.

  • 오류 제어
    ACK를 받지 못하면 세그먼트에 오류가 있다고 판단하고, 데이터를 재전송해야 하는 상황이면 재전송한다.
    (약속된 시간이 지나서 오는 경우도 받지 않았다고 판단한다)

    재전송이 필요한 상황은 2가지 상황이 있다.
    • 데이터가 중간에 손실될 때
    • 데이터가 훼손되었을 때

 

2. 데이터 전달

전송 계층에서는 데이터를 목적지에 문제없이 전달하는 것을 목표로 하는데, 전달하는 목적에 따른 2가지 통신 유형이 있다.

  • 연결형 통신
    연결 설정 후 데이터 전송
    데이터를 정확하게 전달하는 것을 목표로 하는 통신.
    대표적으로 TCP 프로토콜이 있다.

  • 비연결형 통신
    연결 설정 없이 데이터 전송
    효율적으로 데이터를 보내는 통신
    대표적으로 UDP 프로토콜이 있다.

 

3방향 핸드 셰이크 (3 Way Handshake)

3WH는 TCP프로토콜에서 사용하는 통신 방법이다.

TCP 프로토콜이 데이터를 정확하게 전달하는 것을 목표로 하기 때문에 상호간 통신 준비 상태를 확인해야하는데,

이 통신 준비 상태를 확인하는 과정이 바로 3WH다.

 

이름처럼 악수를 3번하는 것과 비슷한 과정을 거친다.

 

  1. 먼저 A가 B에게 신호가 잘 가는지 SYN라는 임의의 숫자를 보낸다.
  2. B는 잘 받았다는 의미의 ACK와 SYN을 보낸다.
  3. A또한 잘 받았다는 의미로 ACK를 보낸다.

이때 ACK를 SYN에 1을 더한 값으로 전송하여 잘 받았다는 신호로 사용한다.

 

근데 그냥 그대로 값을 반환하는게 더 빠르고 똑같이 검증도 되지 않을까? 싶었는데

 

단순히 똑같은 값을 반환하는 것은 거울처럼 반사(Echo)하는 것에 불과하지만,

ACK에 +1을 해서 반환하는 것은 상대방의 의도를 이해하고 다음 단계를 제시하는 대화라고 볼 수 있다고 한다.

따라서 TCP에서 ACK 번호는 받았다는 확인’이 아니라, 다음에 받을 데이터의 번호라는 의도가 담겨 있다고 볼 수 있다.

 

TCP의 구조

전송 계층의 헤더 정보중 몇가지를 알아본다.

 

1. 포트 번호

전송 계층은 어떤 프로그램과 통신하는지 정의하는 곳이라고 했는데,

그걸 가능하게 해주는 기능이 포트 번호다.

 

하나의 컴퓨터에서 동시에 실행되는 프로그램이 굉장히 많은데,

각 프로그램마다 데이터 출/입구 번호를 매겨 이 중 데이터가 어느 프로그램으로 가야하는지에 대한 훌륭한 식별자가 되어준다.

 

2. 일련(시퀀스) 번호와 확인 응답(ACK) 번호

일련 번호: 송신자가 수신자에게 보내려는 데이터가 몇 번째인지 알려주는 번호

확인 응답 번호: 반대로 수신자가 몇 번째 데이터까지 받았는지 송신자에게 알려주는 번호

 

예를 들어 보내야하는 데이터 크기가 200 Byte , 패킷의 크기는 100 Byte 의 상황에서의 과정은 아래와 같다.

이 2가지 번호를 통해, 수신한 데이터의 순서가 맞는지와 오류의 유무를 검사할 수 있다.

 

3. 윈도우 크기

수신자가 받을 수 있는 데이터 크기보다 더 많이 보낸다면, 수신자는 데이터를 다 받지 못하고 일부는 튕겨나간다.

이 상황을 방지하고자 등장한 것이 윈도우 크기다.

 

윈도우 크기는 수신자가 받을 수 있는 데이터의 최대 크기다.

3 Way handshake를 하면서 Window_Size라는 정보를 주고 받아 서로의 윈도우 크기를 알아낸다.

 

4. 코드 비트

주로 TCP 헤더에 위치한 6비트의 제어 비트(Flag)로, 연결 설정 및 제어(SYN, ACK, FIN 등), 긴급 데이터 전송(URG) 등 다양한 기능을 수행하며 데이터 전송의 신뢰성과 흐름을 제어하는 중요한 역할을 한다.

  • SYN (Synchronize): 연결 요청을 의미하며, 3-way handshake의 첫 번째 단계에서 사용됩니다.
  • ACK (Acknowledgment): 확인 응답을 의미하며, 데이터를 성공적으로 받았음을 알릴 때 사용됩니다.
  • FIN (Finish): 연결 종료 요청을 의미합니다.
  • URG (Urgent): 긴급 데이터를 표시합니다.
  • PSH (Push): 데이터를 즉시 전송하도록 요청합니다.
  • RST (Reset): 연결을 강제로 재설정합니다. 
코드 비트는 0 또는 1로 활성화/비활성화되며 아래와 같이 사용된다.
  1. 연결 설정 (3 Way Handshake)
    • 수신자는 SYN 비트를 1로 설정하여 연결 요청 메시지를 보낸다.
    • 송신자는 SYN과 ACK 비트를 1로 설정하여 연결을 승인하고 응답한다.
    • 수신자 ACK 비트를 1로 설정하여 최종적으로 연결을 확립한다.
  2. 데이터 전송: 연결이 수립된 후, ACK 비트 등으로 데이터 수신 여부를 확인하며 신뢰성 있게 데이터를 주고받는다.
  3. 연결 종료: FIN 비트를 사용하여 연결을 종료한다.
이렇게 코드 비트들은 데이터를 효율적이고 신뢰성 있게 전송하기 위해 전송 계층(TCP)에서 핵심적인 제어 정보를 전달하는 역할을 한다.
 

UDP(User datagram protocol)의 구조

TCP 프로토콜은 데이터를 세그먼트 단위로 쪼개 순서를 부여하여 전송한다.
그렇기 때문에 수신자 입장에서 세그먼트의 순서가 뒤바뀌는 일이 없도록 오류를 제어하는 것도 중요했었는데,

UDP는 이런 신뢰성 있는 통신과 반대 성향을 가진다.

 

UDP는 신뢰성을 보장하지 않는 대신에 굉장히 빠른 속도를 얻었다.

그래서 실시간 방송등 주로 사용되는 프로토콜이다.

(신뢰성을 포기했다고 해도 검사합(Check sum) 같은 최소한의 무결성 검사 정도는 한다.)

 

로드 밸런서

내가 만든 게임이 잘 돼서 게임서버를 5대 구비한 상황에서,

모든 클라이언트가 특정 서버에만 몰리면 5대를 구비한 의미가 없어진다.

 

그래서 등장한 로드 밸런서는 다수의 서버로 트래픽을 분산시키는 장치다.

로드 밸런서가 트래픽을 분산시키는 방법으로는 다음과 같은 것들이 있다.

  • 라운드 로빈
    서버 별로 돌아가면서 연결을 처리한다.
  • 가중 라운드 로빈
    라운드 로빈의 방식에서 특정 서버에 큰 트래픽을 몰아 넣는 방식
  • 랜덤
    무작위로 분배되는 방식
  • 해시
    특정 클라이언트는 특정 서버에서만 처리하는 방식이다.
  • 포트
    서버마다 특정 포트와 연결되게 포트별로 분산하는 방식

 

용어 정리

  • 3 Way Handshake : TCP통신을 하는 장치 간 연결 확인 방법
  • 윈도우 크기 : 수신자가 한 번에 받을 수 있는 데이터의 최대 크기
  • TCP : 데이터를 세그먼트라는 단위로 쪼갠 후 순서를 부여하여 신뢰성 있는 통신을 기반으로하는 프로토콜
  • UDP : 비연결형으로 데이터 무결성을 보장하지 않는대신 속도가 빠른 프로토콜
  • 로드 밸런서 : 다수의 서버로 트래픽을 분산시키는 장치

+ Recent posts