독학/[책] 네트워크

[혼공학습단 12기 혼공네트🌐] 혼자 공부하는 네트워크 week4

최연재 2024. 7. 23. 09:48

✏️기본 미션

Ch.04(04-1) 확인 문제 1번(p.206), (04-2) 확인 문제 2번(p.225) 풀고 설명하기

 
❓Ch.04(04-1) 확인 문제 1번(p.206)

IP는 성능을 위해 비신뢰성, 비연결성 통신 특성을 가지고 있습니다.
 
Ch.04 (04-2) 확인 문제 2번(p.225) 

TCP 쓰리 웨이 핸드셰이크는 세 개의 단계로 이루어진 TCP의 연결 수립 과정으로 아래와 같습니다.

  1. SYN 세그먼트 (A ➡️ B)
  2. SYN + ACK 세그먼트 (B ➡️ A)
  3. ACK 세그먼트 (A ➡️ B)

 

✏️선택 미션

작업 관리자에서 프로세스별 PID 확인해 보기

 


📜내용 정리

Chap04. 전송계층

4.1 전송 계층 개요 : IP의 한계와 포트

1) 신뢰할 수 없는 통신과 비연결형 통신
- IP의 한계로 볼 수 있는 특징 2가지 : 성능을 위해 신뢰성 포기
- 신뢰할 수 없는(비신뢰성) 프로토콜 (unreliable protocol)

  • IP 프로토콜이 패킷이 수신지까지 제대로 전송되었다는 보장을 하지 않는다.
  • 패킷의 손실 여부, 중복 여부 확인 X, 재전송 X, 순서대로 도착 보장 X
  • 최선형 전달 (best effort delivery)

- 비연결형 통신 (connectionless protocol)

  • 송수신 호스트 간에 사전 연결 수립 작업을 하지 않는다.

 
2) IP의 한계를 보완하는 전송 계층 ➡️ 연결형 프로토콜 : TCP
- 전송 계층은 연결형 통신을 가능하게 한다.  
- 전송 계층은 신뢰성 있는 통신을 가능하게 한다. 
 
3) 응용 계층과의 연결 다리, 포트
- 포트 : 패킷에 포함된 특정 애플리케이션을 식별할 수 있는 정보
- 포트의 분류 : 포트 번호를 통해 특정 애플리케이션을 식별한다.

  • TCP와 UDP는 모두 포트 번호 필드인 송신지 포트 번호와 수신지 포트 번호를 포함한다.
  • 포트 번호는 16비트로 표현 가능하며, 할당 가능한 포트 번호는 0~65535번이다.
  • 잘 알려진 포트(well-known, system port) : 0 ~ 1023
  • 등록된 포트 (registered port) : 1024 ~ 49151
  • 동적 포트(dynamic port), 사설 포트(private port), 임시 포트(ephemeral port) : 49152 ~ 65535 
  • 서버로서 동작하는 프로그램의 포트번호는 사전에 암묵적으로 정해진 경우가 많다.
  • 클라이언트로서 동작하는 프로그램의 포트번호는 동적 포트 번호 중에서 임의의 번호가 할당되는 경우가 많다.
  • IP주소와 포트 번호가 주어지면 특정 호스트에서 실행 중인 특정 애플리케이션 프로세스를 식별할 수 있다.
  • 포트 번호는 IP주소:포트번호 형식으로 표기되는 경우가 많다.

 
4) 포트 기반 NAT
- NAT : IP주소를 변환하는 기술
- 사설 IP주소와 공인 IP주소를 변환하기 위해 NAT 변환 테이블을 이용
- NAT는 변환하고자 하는 IP 주소를 1:1 대응하지 않는 경우가 많다. (여러 사설 IP주소 : 하나의 공인 IP주소)
- NAPT (Network Address Port Translation)

  • 포트 기반의 NAT
  • 포트를 활용해 하나의 공인 IP주소를 여러 사설 IP주소가 공유할 수 있도록 한다.

 
📍 포트 포워딩 (port forwarding)
: 네트워크 내 특정 호스트에 IP주소와 포트 번호를 미리 할당하고, 해당 IP주소:포트 번호로서 해당 호스트에게 패킷을 전달하는 기술
 
📍ICMP (Internet Control Message Portocol)

  • IP 패킷의 전송 과정에 대한 피드백 메시지를 얻기 위해 사용하는 프로토콜
  • IP의 신뢰할 수 없는 전송 특성과 비연결형 전송 특성을 보완하기 위한 네트워크 계층의 프로토콜

 

4.2 TCP와 UDP

1) TCP 통신 단계와 세그먼트 구조
- TCP는 통신 전 연결을 수립하고, 통신이 끝나면 연결을 종료한다.
- 데이터 송수신 과정에서 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등의 기능을 제공한다.
- MSS (Maximum Segment Size) : TCP로 전송할 수 있는 최대 페이로드 크기

- TCP 세그먼트 구조 

  • 송신지 포트와 수신지 포트 : 송신지 또는 수신지 애플리케이션을 식별하는 포트 번호가 명시되는 필드
  • 순서 번호 : 순서 번호가 명시되는 필드
  • 확인 응답 번호 : 상대 호스트가 보낸 세그먼트에 대한 응답으로, 다음으로 수신하기를 기대하는 순서 번호 명시
  • 제어 비트 : 플래그 비트라고도 하며, 현재 세그먼트에 대한 부가 정보 명시
  • 윈도우 : 수신 윈도우의 크기(한 번에 수신하고자 하는 데이터의 양) 

(1) 제어 비트

  • 제어 비트 필드는 8비트로 구성
  • ACK : 세그먼트의 승인을 나타내기 위한 비트
  • SYN : 연결을 수립하기 위한 비트
  • FIN : 연결을 종료하기 위한 비트

(2) 순서 번호와 확인 응답 번호

  • TCP의 신뢰성을 보장하기 위해 사용되는 필드
  • 순서 번호는 세그먼트의 올바른 송수신 순서를 보장하기 위한 번호이다.
    • MSS 단위로 전송 가능
    • 초기 순서 번호 : 처음 통신을 위해 연결을 수립한 경우 순서 번호는 무작위 값이 된다.
    • 순서 번호 : 초기 순서 번호 + 송신한 바이트 수
  • 확인 응답 번호 :  순서 번호에 대한 응답

2) TCP 연결 수립과 종료
(1) 연결 수립 : 쓰리 웨이 핸드셰이크
- 세 개의 단계로 이루어진 TCP의 연결 수립 과정

  1. 액티브 오픈 : SYN 세그먼트 (A ➡️ B)
  2. 패시브 오픈 : SYN + ACK 세그먼트 (B ➡️ A)
  3. ACK 세그먼트 (A ➡️ B)

(2) 연결 종료
- 송수신 호스트가 각자 한 번씩 FIN과 ACK를 주고받으며 이루어진다.

  1. 액티브 클로즈 : FIN 세그먼트  (A ➡️ B)
  2. 패시브 클로즈 : ACK 세그먼트  (B ➡️ A)
  3. 패시브 클로즈 : FIN 세그먼트  (B ➡️ A)
  4. ACK 세그먼트 (A ➡️ B)

3) TCP 상태
- 상태 : 현재 어떤 통신 과정에 있는지를 나타내는 정보

  • 연결이 수립되지 않은 상태 : CLOSED, LISTEN
  • 연결 수립 과정에서 주로 볼 수 있는 상태 : SYN-SENT, SYN-RECEIVED, ESTABLISHED
  • 연결 종료 과정에서 주로 볼 수 있는 상태 : FIN-WAIT-1, CLOSE-WAIT, FIN-WAIT-2, LAST-ACK, TIME-WAIT, CLOSING

(1) 연결이 수립되지 않은 상태

  • CLOSED : 아무런 연결이 없는 상태
  • LISTEN : 일종의 연결 대기 상태

 
(2) 연결 수립 상태

  • SYN-SENT : 액티브 오픈 호스트가 SYN 세그먼트를 보낸 뒤 그에 대한 응답인 SYN+ACK 세그먼트를 기다리는 상태
  • SYN-RECEIVED : 패시브 오픈 호스트가 SYN+ACK 세그먼트를 보낸 뒤 그에 대한 ACK 세그먼트를 기다리는 상태
  • ESTABLISHED : 연결이 확립됨을 나타내는 상태

(3) 연결 종료 상태

  • FIN-WAIT-1 : FIN 세그먼트로서 연결 종료 요청을 보낸 액티브 클로즈 호스트는 해당 상태가 된다.
  • CLOSE-WAIT : 종료 요청인 FIN 세그먼트를 받은 패시브 클로즈 호스트가 응답으로 ACK 세그먼트를 보낸 후 대기하는 상태
  • FIN-WAIT-2 : FIN-WAIT-1 상태에서 ACK 상태를 받고, 상대 호스트의 FIN 세그먼트를 기다리는 상태
  • LAST-ACK : CLOSE-WAIT 상태에서 FIN 세그먼트를 전송한 뒤 이에 대한 ACK 세그먼트를 기다리는 상태
  • TIME-WAIT : 액티브 클로즈 호스트가 FIN 세그먼트를 수신한 뒤 이에 대한 ACK 세그먼트를 전송하고 접어드는 상태
  • CLOSING : 동시에 연결을 종료하려고 할 때 전이되는 상태

 
4) UDP 데이터그램 구조
- UDP : 비연결형 통신을 수행하는 신뢰할 수 없는 프로토콜
- 구성

  • 송신지 포트와 수신지 포트
  • 길이 : 헤더를 포함한 UDP 데이터그램의 바이트
  • 체크섬 : 데이터그램 전송 과정에서 오류가 발생했는지 검사하기 위한 필드

 

4.3 TCP의 오류·흐름 ·혼잡 제어

1)  오류 제어 : 재전송 기법
(1) 오류 검출과 재전송
- 중복된 ACK 세그먼트를 수신했을 때
- 타임아웃이 발생했을 떄
 
(2) ARQ : 재전송 기법
- 수신 호스트의 답변과 타임아웃 발생을 토대로 문제를 진단하고 문제가 생신 메시지를 재전송해서 신뢰성을 확보하는 방법

  • Stop-and-Wait ARQ
    • 제대로 전달했음을 확인할 때까지 새로운 메시지를 보내지 않는다.
    • 단순하지만 높은 신뢰성을 보장한다.
    • 네트워크의 이용 효율이 낮아질 수 있다.
  • Go-Back-N ARQ
    • 파이프라이닝 방식을 이용해 여러 세그먼트를 전송하고, 도중에 잘못 전송된 세그먼트가 발생할 경우 해당 세그먼트부터 다시 전송하는 방식
    • Go-Back-N ARQ의  ACK 세그먼트를 누적 확인 응답(CACK)이라고 한다.
  • Selective Repeat ARQ
    • 선택적으로 재전송하는 기법
    • Selective Repeat ARQ의 ACK 세그먼트를 개별 확인 응답이라고 한다.
    • 대부분의 호스트가 TCP 통신에서 지원한다.

 
2) 흐름 제어 : 슬라이딩 윈도우
- 수신 버퍼 : 수신된 세그먼트가 애플리케이션 프로세스에 의해 읽히지 전에 임시로 저장되는 공간
- 오버플로우 : 버퍼가 넘치는 현상
- 수신 호스트는 TCP 헤더(윈도우 필드)를 통해 송신 호스트의 처리 속도와 균일한 속도로 세그먼트를 전송한다.
 
3) 혼잡 제어
- 혼잡 윈도우

  • 혼잡 없이 전송할 수 있을 만한 데이터의 양
  • 혼잡 제어 알고리즘을 통해 결졍한다.

- 혼잡 제어 알고리즘
(1) AIMD

  • 혼잡이 감지되지 않는다면 혼잡 윈도우를 RTT마다 1씩 선형적으로 증가시키고, 혼잡이 감지되면 혼잡 윈도우를 절반으로 떨어뜨린다.
  • 톱니 모양으로 변화
  • 기본적인 아이디어

(2) 느린 시직

  • 혼잡 윈도우를 1부터 시작해 문제없이 수신된 ACK 세그먼트 하나당 1씩 증가시키는 방식
    • RTT마다 혼잡윈도우는 2배씩 지수적으로 증가
    • 혼잡 윈도우 값이 계속 증가하다가 느린 시작 임계치(slow start threshold) 이상이 되거나, 타임아웃이 발생하거나, 세 번의 중복된 ACK 세그먼트가 발생하여 혼잡이 감지되면 아래의 방법을 수행한다.
      • 타임아웃 발생 시 : 혼잡 윈도우 값을 1로, 느린 시작 임계치를 혼잡이 감지되었을 시점의 혼잡 윈도우 값의 절반으로 초기화한 후 느린 시작 재개
      • 혼잡 윈도우 >= 느린 시작 임계치 : 느린 시작 종료, 혼잡 윈도우를 절반으로 초기화 후 혼잡 회피 수행
      • 세 번의 중복된 ACK 발생 : (빠른 재전송 후) 빠른 회복 수행

(3) 혼잡 회피

  • RTT마다 혼잡 윈도우를 1MSS씩 증가시키는 알고리즘

(4) 빠른 회복

  • 느린 시작은 건너뛰고 혼잡 회피를 수행하는 알고리즘

📍 명시적 혼잡 알림 (ECN)
: 네트워크 중간 장치의 도움을 받아 혼잡을 회피하는 방법
 

🤔느낀 점

TCP 통신에서 그림이 꼼꼼해서 빠르게 이해할 수 있었습니다. 슬라이딩 윈도우는 알고리즘 문제를 풀 때  미리 접해봐서 그런지 반가웠습니다.