네트워크의 전송 계층

이선우·2024년 8월 4일
0

CS 공부

목록 보기
4/10

네트워크의 전송 계층


네트워크 계층까지가 네트워크 상의 특정 기기까지 어떻게 찾아가는냐를 따졌다면
전송 계층은 호스트상에 구동중인 프로세스들 중 특정 프로세스를 찾아가는 방법의 구현을 담당한다.
이때 사용되는 핵심 개념이 포트이고 UDPTCP가 바로 전송 계층의 핵심 프로토콜이다.

오류 복구, 흐름 제어, 신뢰성 있는 데이터 전송이 키워드이다.

송신 측에서는 데이터를 패킷으로 분할, 수신 측에서는 패킷을 결합하여 순서대로 재조립

전송 계층의 역할

  • 연결 제어: 패킷을 하나의 경로로 보낼 것인지 결정
  • 수신지로 데이터 전송: 데이터의 모든 패킷 전송과 도착을 검사
  • 단편화: 데이터를 전송 가능한 Segment로 나누고 Sequence number(순서 번호)를 기록
  • 재조립: 데이터를 순서에 맞게 올바르게 재조립

연결 지향 통신(TCP)와 비 연결 통신(UDP)

  • TCP는 연결 지향 통신으로 신뢰할 수 있고 데이터를 정확하게 전송할 수 있음
  • UDP는 비 연결 통신으로 신뢰나 정확성보다는 효율을 중시함
  • 문자 메시지나 동영상 시청은 UDP(빠르게, 효율적으로), 온라인 게임이나 전화 통화는 TCP(정확한 정보 전달)을 예로 들 수 있다.

TCP(Transmission Control Protocol)

  • 연결형 서비스, 상호 간의 데이터를 교환하기 전에 TCP 연결을 확립해야 한다
  • 수신측에서 성공적으로 수신했거나 오류가 발생했음을 알려준다

TCP 연결을 위한 초기 3-Way Handshaking

서로 수신 가능, 송신 가능함을 알기 위해(신뢰성을 위해) 데이터 통신 전에 연결하기 위한 사전 작업

  1. 송신 측 컴퓨터는 수신 측 컴퓨터에 SYN 요청을 보낸다
  2. 수신 측에서는 연결 확립을 위해 ACK를 보내면서 송신측에 전송 허가를 받기 위해 SYN을 같이 보낸다
  3. 송신 측에서 수신 측 컴퓨터를 허가한다는 ACK를 보낸다
  4. 연결이 완료되고 통신 시작

TCP 상태

TCP는 연결형 프로토콜 + stateful 프로토콜
현재 연결 상태를 나타내기 위해 다양한 상태(state) 활용
UDP는 스테이스리스 프로토콜

  • CLOSED: 아무런 연결이 없는 상태
  • LISTEN, SYN-SENT, SYN-RECEIVED: 연결 수립 도중 사용되는 상태
    LISTEN: SYN 세그먼트를 기다리는 상태(서버 호스트)
  • ESTABLISHED: 연결이 되어있는 상태

액티브 클로즈 호스트는 마지막 ACK를 보낸 뒤 일정 시간을 기다리고 연결을 종료한다..!

TCP 재전송 기능

TCP는 신뢰성 프로토콜

무엇인가를 확실히 전송했다는 보장이 있으려면?
1. 재전송 기반의 오류 제어: 잘못 전송된 경우 재전송
2. 흐름 제어: 받을 수 있을 만큼만 받기
3. 혼잡 제어: 보낼 수 있는 상황에서만 보내기

언제 잘못 되었음을 인지할까??
1. 중복된 ACK 세그먼트를 수신했을 때
2. 타임아웃이 발생했을 때

TCP 오류 제어

  • TCP는 재전송 기반의 오류 제어를 수행
  • 재전송을 기반으로 잘못된 전송을 바로잡는 것: ARQ (자동 재전송 요구)

  1. Stop-and-Wait ARQ
  • 가장 단순한 형태
  • 제대로 보냈음을 확인하기 전까지는 보내지 않음
  • 전송하고, 확인하고, 전송하고, 확인하고,,,

    네트워크 이용 효율이 낮아지는 문제가 있다
    위의 문제를 해결하기 위해서는 파이프라이닝기법을 사용해야 한다.
    보낼수 있을 만큼을 한꺼번에 보내는 기법

  1. Go-Back-N ARQ
  • 올바른 세그먼트에 대해서는 확인 응답을 보냄
  • 올바르지 않은 세그먼트가 수신되면 이후 모든 세그먼트 폐기
  1. Selective Repeat ARQ

TCP 혼잡제어와 흐름제어

TCP 흐름제어

  • 송신 버퍼와 수신 버퍼
    송신 버퍼: 어플리케이션 계층에서 전송할 데이터 임시 저장
    수신 버퍼: 네트워크 계층에서 수신할 데이터 임시 저장
    버퍼 오버플로우: 일부 데이터가 처리되지 않을 수 있다

슬라이딩 윈도우(sliding window)

윈도우: 파이프라이닝 가능한 순서번호 범위
윈도우 크기: 확인 응답 받지 않고도 한번에 보낼 수 있는 최대 양

수신 호스트
: 수신 윈도우 = 수신 버퍼 크기 - [마지막으로 수신한 바이트 - 마지막으로 읽어들인 바이트]

송신 호스트
: 수신 윈도우 >= 마지막으로 송신한 바이트 - 마지막으로 수신 확인된 바이트

TCP 혼잡제어
: 많은 트래픽으로 인해 패킷 처리 속도가 느려지거나 유실될 우려가 있는 상황

혼잡 윈도우: 혼잡 없이 전송할 수 있을 법한 양(TCP 헤더에는 포함되어 있지 않다)

RTT(Rount Trip Time)

메세지를 전송한 뒤 그에 대한 답변을 받는 시간

TCP 혼잡 제어 알고리즘
느린 시작
ACK 세그먼트가 수신될 때마다 혼잡 윈도우 1증가(RTT마다 혼잡 윈도우 2배 증가)
특정 임계치값과 같아지면 혼잡 회피 수행

포트

  • TCP가 상위 계층으로 데이터를 전송하거나 상위 계층에서 TCP로 데이터를 전송할 때 상호간에 사용하는 데이터의 이동 경로
  • 상위 게층 프로토콜과 하위 계층 프로토콜이 같은 포트를 사용해야 한다. 즉 접속할 때 요청하는 포트 번호는 송신자와 수신자의 포트 번호이다
  • 송신자 입장에서 응답을 받을 포트 번호를 소스 포트 번호라 하고, 연결을 요청할 포트 번호를 수신지 포트 번호라고 한다. 소스 포트 번호는 사용중인 프로그램에서 랜덤으로 지정하나 수신지 포트 번호는 정해진 번호를 사용해야 한다

서버는 일반적으로 잘 알려진 포트와 등록된 포트로 동작
클라이언트는 일반적으로 동적 포트로 동작



발표준비

전송 계층(포트)

전송 계층의 역할

  1. 연결 설정 및 해제: 통신을 시작하고 종료하는 데 필요한 연결 설정 및 해제 기능을 담당
  2. 오류 제어: 데이터 전송 중 발생할 수 있는 오류를 감지하고 복구하는 기능
  3. 흐름 제어: 송신자와 수신자 간의 데이터 전송 속도를 조절하여 네트워크 내의 혼잡을 방지
  4. 다중화: 하나의 네트워크 연결을 통해 여러 개의 데이터 흐름을 동시에 관리할 수 있도록 지원
  5. 신뢰성 보장: 데이터가 손실되거나 꼬이는 것을 방지하고, 데이터가 정확하게 전달되도록 보장
  6. 서비스 품질 보장: 일부 프로토콜은 데이터 전송의 우선순위를 조정하여 특정 애플리케이션의 서비스 품질을 향상

포트

포트는 전송 계층 프로토콜(TCP 또는 UDP)에서 특정 애플리케이션이나 프로세스를 식별하기 위해 사용하는 논리적인 채널로 포트 번호는 송신자와 수신자가 데이터 흐름을 구분할 수 있도록 도와준다!!

포트번호: 포트 번호는 0에서 65535까지의 범위를 가지며,세 가지로 나뉘어진다

  • 잘 알려진포트: 널리 알려진, 유명한 포트로 0에서 1023까지의 포트 번호로, HTTP(80), HTTPSㅣ(443), FTP(21), SSH(22)와 등과 같은 표준화된 서비스가 사용

  • 등록된 포트: 잘 알려진 포트에 비해서는 덜 범용적이지만 흔히 사용되는 애플리케이션들의 포트 번호로 1024에서 49152까지의 포트 번호로, 특정 애플리케이션이 자주 사용하는 포트가 포함 예를 들어 MySQL(3306), Microsoft SQL Server(1433), Redis(6379), Docker Daemon(2376)

  • 동적 또는 임시 포트: 사용자가 자유롭게 할당 가능한 포트 번호들로 49152에서 65535까지의 포트 번호로 일반적으로클라이언트 애플리케이션이 임시로 사용하는 포트

서버는 일반적으로 고정된 포트 번호를 사용해 클라이언트의 요청을 수신하며 클라이언트는 서버에 연결할 때 일반적으로 임시 포트 번호를 사용

NAT

NAT는 주로 IP 주소를 변환하고 네트워크 내에서 포트번호를 관리하여 여러 장치가 하나의 공용 IP 주소를 공유할 수 있게 해주는 기술

여기에서 NAT는 포트 번호를 사용해서 내부 네트워크와 외부 네트워크 간의 연결을 관리하고, 포트 주소 변환(PAT)가 작동됩니다.

  1. 내부 IP와 포트 매핑: 내부 네트워크의 장치가 인터넷과 같은 외부 네트워크에 통신할 때, NAT 장치는 내부 장치의 사설 IP 주소와 포트 번호를 공용 IP 주소와 새로운 포트 번호로 변환한다. 이때 사용되는 공용 IP 주소와 포트 번호의 조합은 NAT 장치가 내부 장치와 외부 장치 간의 연결을 식별하는데 사용

  2. 변환 테이블 유지: NAT 장치는 내부 IP 주소, 포트 번호, 그리고 외부 공용 IP 주소, 포트 번호 간의 매핑 정보를 저장하는 테이블을 유지해서 응답 패킷이 올바른 내부 장치로 전달될 수 있게 한다

  3. 포트 번호 재사용: NAT 장치는 여러 내부 장치가 동일한 공용 IP 주소를 사용할 수 있게 해주고, 내부 장치가 사용 중인 포트 번호와 공용 IP 주소의 포트 번호 조합으로 연결을 구분

TCP와 UDP

TCP와 UDP는 전송 계층에서 데이터 전송을 담당하는 두 가지 주요 프로토콜로 데이터 전송의 신뢰성, 순서 보장 및 흐름 제어를 다루는 방식에서 큰 차이를 보인다.

TCP의 특징은
1. 연결 지향: TCP는 데이터 전송을 시작하기 전에 송신자와 수신자 간에 3-way handshake를 통해 연결을 설정
2. 신뢰성: TCP는 데이터의 전송이 성공적으로 완료되었는지 확인한다. 데이터의 손실, 오류, 중복 등을 감지하고 필요한 경우 재전송한다
3. 순서 보장: TCP는 데이터가 송신된 순서대로 수신될 수 있도록 보장. 데이터의 패킷이 순서대로 재조립
4. 흐름 제어: 수신자의 버퍼가 넘치지 않도록 송신자가 데이터 전송 속도를 조절.
5. 혼잡 제어: 네트워크 혼잡 상황을 감지하고 데이터 전송 속도를 조절하여 네트워크 과부하르 ㄹ방지

TCP 세그먼트 구조

  • 송신자와 수신자의 포트 번호
  • 데이터의 순서를 식별하는 번호인 순서 번호
  • TCP 세그먼트의 중요한 제어 정보를 담고 있는 TCP 헤더의 길이
  • 연결 설정 요청을 나타내는 SYN, 확인 응답이 포함되어 있음을 알리는 ACK, 연결 종료 요청을 나타내는 FIN 등의 제어 플래그가 담겨져 있는 플래그
  • 네트워크 통신에서 수신된 데이터르 임시로 저장하는 메모리 공간인 수신자의 버퍼 크기가 담겨져 있는 윈도우 크기
  • TCP 헤더와 데이터의 무결성을 검증하기 위한 값으로 오류가 발생한 경우 재전송을 하는 체크섬
  • 실제 전송되는 데이터

UDP의 특징은
1. 비연결 지향: UDP는 데이터 전송 전에 연결 설정이 필요 없다. 각 데이터그램이 독립적으로 처리
2. 신뢰성 없음: UDP는 데이터 전송의 성공 여부를 보장하지 않는다
3. 순서 보장 없음: 데이터그램이 전송된 순서대로 수신되지 않을 수 있다
4. 흐름 제어 없음: 수신자의 버퍼 상태를 모니터링하거나 조절하지 않는다
5. 혼잡 제어 없음: 네트워크 혼잡 상태를 감지하거나 조절하지 않는다

UDP 데이터그램의 구조는 TCp 세그먼트의 구조에 비해 매우 간단하다

  • 송수신자의 포트번호
  • UDP 헤더와 데이터의 길이
  • 데이터의 무결성을 검증하기 위한 체크섬
  • 데이터

결론적으로

TCP는 신뢰성있는 데이터 전송을 보장하며, 데이터의 순서, 흐름 제어, 혼잡 제어를 제공.
UDP는 간단하고 빠른 데이터 전송을 제공하지만 신뢰성, 순서 보장, 흐름 제어, 혼잡 제어 기능이 없다

TCP는 신뢰성이 중요한 애플리케이션에서 사용
UDP는 속도가 중요한 애플리케이션에서 사용

profile
백엔드 개발자 준비생

0개의 댓글