[CS 면접 지식 - Network] 전송 계층

2025. 1. 24. 12:10·면접 준비/Network
728x90
반응형
SMALL

전송 계층

전송 계층에서는 가장 중요한 개념이 TCP와 UDP이다. TCP와 UDP는 매우 중요한 프로토콜이므로 잘 기억해두는 것이 좋다.

TCP/UDP의 목적과 특징

첫 번쨰로 포트를 통한 프로세스 식별이다. IP주소와 MAC주소는 패킷을 송수신하는 호스트를 특정지을 수 있었다.
하지만 사실 패킷의 최종 송수신 대상은 호스트가 아닌 호스트가 실행하는 프로세스이다. 그렇다면 네트워크를 통해 주고받는 패킷은 최종적으로 이러한 프로세스에 전달되어야 한다.

이때 필요한 것이 포트 번호이다. 네트워크 패킷을 주고받는 프로세스에는 포트번호가 할당된다. IP주소와 포트 번호를 통해 식별을 할 수 있다는 것이다.
전송 계층의 핵심 프로토콜인 TCP와 UDP는 모두 포트를 통해 프로세스를 식별할 수 있다.
TCP와 UDP 헤더에는 모두 송신지 포트와 수신지 포트를 포함하고 있다.

포트 번호는 16비트로 0~ 65535번까지 포트를 할다알 수 있다.
잘 알려진 포트, 등록된 포트, 동적 포트라는 내용을 많이 들어봤을 것이다.

0~1023번 까지는 잘 알려진 포트로 대중적으로 사용하는 포트 번호들이다.

  • 20,21 : FTP
  • 22 : SSH
  • 23 : TELNET
  • 53 : DNS
  • 67,68 : DHCP
  • 80 : HTTP
  • 443 : HTTPS

1024 ~ 49151번까지는 등록된 포트의 번호이다. 위 포트보다 덜 사용되지만 그래도 범용적인 포트들이다.

  • 1194 : OpenVPN
  • 1433 : MS SQL Server
  • 3306 : MySQL Server
  • 6379 : Redis
  • 8080 : HTTP 대체

나머지 49152 ~ 65535는 사설포트 또는 임시포트라고 불리는 동적 포트로, 비교적 자유롭게 사용이 가능한 포트이다.

NAT

NAT은 Network Address Translation으로 말 그대로 공인IP와 사설IP주소 간 변환을 위해사용되는 기술이다.
네트워크 내부에서 사설 주소를 사용하는 호스트가 외부 네트워크와 통신을 하기 위해서는 이러한 NAT기술이 필요하다.
대부분의 라우터와 가정용 공유기는 NAT 기능을 내장하고 있어 사설 IP주소 -> 공인 IP주소 변환 또는 반대로 변환이 가능하다.
하지만 문제점이 사설 IP하나하나 공인 IP에 대응시키면 공인IP가 부족할 수 있다. 이때 포트를 같이 사용하여 사설IP에서 들어오는 여러 개의 IP주소들을 하나의 포트로 묶어 통신하는 것이다.
이러한 포트 기반 NAT를 NAPT라고 한다.

신뢰성과 연결형 보장

TCP는 신뢰할 수 있는 통신으로 상태 관리, 흐름 제어, 오류 제어, 혼합 제어등의 기능을 제공하며 연결 수립,종료 과정을 확인 가능하다.
하지만 UDP는 이러한 기능을 제공하지 않는 비신뢰성, 비연결형 통신이다.
그래서 TCP는 UDP보다 느리지만 신뢰성을 갖고 있다는 특징이 있다.

UDP 헤더의 구조를 보면 송신지 포트, 수신지 포트, 길이, 체크섬이 있다.
길이는 UDP패킷의 바이트 크기가 명시되어 있고, 체크섬에는 송수신과정에서 데이터그램 훼손 여부를 알 수 있도록 명시되어 있다.

TCP 헤더는 더 많은 기능을 제공한다. UDP에 있는 헤더뿐만 아니라 순서 번호, 제어 비트, 확인 응답 번호 등 다양한 필드가 존재한다.

순서 번호필드는 TCP 패킷의 올바른 송수신 순서를 보장하기 위해 세그멘트 첫 바이트에 매겨진 번호이다. 이 순서 번호를 통해 해당 세그먼트가 몇 번째 데이터인지 체크 가능하다.
확인 응답 번호는 상대 호스트가 보낸 세그먼트에 대한 응답으로, 다음으로 수신하길 기대하는 번호이다.
만약 내가 100번의 세그먼트를 보냈다면 상대방은 101번의 세그먼트를 받길 희망하므로 확인 응답 번호에 101을 담아 보낸다. 이때 이 세그먼트는 확인 응답 번호를 포함하고 있음을 전달하기 위해 ACK플래그를 1로 설정해야 한다.
ACK 플래그는 제어 비트에서 '승인'을 나타내는 비트이다.

제어 비트는 현재 세그먼트에 대한 부가 정보를 나타내는 정보로 플래그 비트라고도 부른다.
제어 비트는 기본적으로 8비트로 구서오디어 있ㅇ으며 각 자리마다 다른 의미를 가진다.
기본적으로 3가지 제어비트에 알고 있으면 된다.

  • ACK : 세그먼트 승인을 나타내기 위한 비트
  • SYN : 연결을 수립하기 위한 비트
  • FIN : 연결을 종료하기 위한 비트

3-way Handshake

TCP는 연결 수립을 위해 쓰리 웨이 핸드쉐이크라는 과정을 거친다.
호스트 A가 B에게 통신을 요청한다고 했을떄 다음과 같이 진행된다.

  1. 송수신 방향 A-> B / SYN 세크먼트 전송
    • Host A 는 SYN 비트가 1인 세그먼트를 B에게 전송한다. 세그먼트 순서 번호에는 호스트 A의 순서 번호가 포함되어 있다.
  2. 송수신 방향 B-> A / SYN + ACK 세그먼트 전송
    • B는 ACK / SYN 비트가 1로 설정된 세그먼트를 A에게 전송한다.
    • 세그먼트 순서 번호에는 B의 순서 번호와 세그먼트에 대한 확인 응답 번호가 포함되어 있다.
  3. ACK 세그먼트 전송
    • A는 ACK 비트가 1로 설정된 세그먼트를 B에게 전송한다.
    • 세그먼트의 순서 번호에는 호스트 A의 순서번호와 2에서 보낸 세그먼트에 대한 확인 응답 번호가 포함되어 있다.

처음 SYN 비트가 1로 설정된 패킷을 보내는 호스트가 요청을 하는 호스트이며 액티브 오픈과정이라고 한다.
반대로 연결 요청을 수신한 뒤 그에 대한 연결을 수립하는 과정은 패시브 오픈이라고 한다.

TCP의 오류 흐름 혼잡 제어

  1. 재전송을 통한 오류 제어
  2. TCP는 송수신 과정에서 잘못 전송된 세그먼트가 있을 경우, 이를 재전송하여 오류를 제어한다. 이때 잘못 전송된 세그먼트를 인지하는 방법은 중복된 ACK 세그먼트가 도착했을 때, 타임아웃이 발생했을때 주로 제어할 수 있다.
    TCP 세그먼트를 송신하는 호스트는 모두 재전송 타이머라는 값을 유지하는데, 호스트는 세그먼트를 전송할때마다 이 재전송 타이멀르 시작한다. 이 카운트다운이 끝나면 타임아웃이라고하며 발생 시점까지 ACK 세그먼트를 받지 못하면 타임아웃이라고 간주하여 세그먼트를 재전송한다.
  3. 흐름 제어
  4. 수신 호스트가 한 번에 n개의 바이트를 처리할 수 있다면 송신 호스트는 n개의 바이트를 넘지 않는 선에서 송신해야 한다. 흐름 제어는 이 데이터를 처리할 수 있는 만큼 전송하는 것을 의미한다.
    이 전송량은 TCP 수신 버퍼의 크기에 의해 결정되며 수신 세그먼트가 애플리케이션 프로세스에 읽히기 전에 임시 저장되는 공간으로, 커널에 정의되어 있다.
    송신 호스트는 수신 호스트가 한 번에 처리할 수 있는 양을 알고 있어야 하는데 이를 위해서 TCP 헤더에는 윈도우라는 필드가 있다. 이 곳에 수신 윈도우 크기가 명시된다.
  5. 혼잡 제어
  6. 많은 트래픽으로 패킷의 처리 속도가 느려지거나 유실 될 수 있는 상황을 제어하기 위한 기능이다. 네트워크 혼잡 여부는 세그먼트 전송 오류 판단과 기준이 같다. 중복된 ACK 세그먼트 도착, 타임아웃이 발생시 혼잡하다고 판단하게 된다.
    네트워크의 혼잡 가능성을 검출한 송신 호스트는 최대 전송량이 아닌 혼잡 없이 전송할 수 있는 양만큼 송신하게 되며 이를 혼잡 윈도우라고 한다. 이 혼잡 윈도우 또한 모두 커널 내에 정의되어 있다.

TCP 종료

이를 포웨이 핸드 쉐이크라고 하며 과정은 다음과 같다.

  1. A->B / FIN 세그먼트
    A는 FIN 비트가 1인 세그먼트를 B에게 전달
  2. B -> A / ACK 세그먼트
  3. B -> A / FIN 세그먼트
  4. A -> B / ACK 세그먼트

이전과 반대로 TCP 연결 과정에서 먼저 연결을 종료하려는 호스트는 액티브 클로즈, 연결 종료 요청을 받는 호스트는 패시브 클로즈과정을 수행한다.

728x90
반응형
SMALL

'면접 준비 > Network' 카테고리의 다른 글

[CS 면접 지식 - Network] 네트워크 계층  (0) 2025.01.24
[CS 면접 지식 - Network] 물리 계층  (0) 2025.01.24
'면접 준비/Network' 카테고리의 다른 글
  • [CS 면접 지식 - Network] 네트워크 계층
  • [CS 면접 지식 - Network] 물리 계층
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325)
      • 면접 준비 (22)
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11)
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      백준
      자바스크립트
      Spring Data Redis
      Spring
      redis 채팅
      jsp기초
      레디스
      jsp request
      스프링프레임워크
      redis
      자바 알고리즘
      리눅스마스터2급정리
      리눅스
      springsecurity
      리눅스마스터2급
      CSS
      JSP
      자바 반복문
      JavaScript
      자바
      Til
      자바기초
      Springframework
      spring redis
      JS
      HTML
      자바 면접
      자바 면접질문
      프로그래머스
      java
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [CS 면접 지식 - Network] 전송 계층
    상단으로

    티스토리툴바