일기

OSI 4계층: 전송 계층

Realuda72 2024. 12. 24. 19:54

 전송 계층에 대해 알아보자.

 

0. 전송 계층이 뭘까

 전송 계층은 OSI 7계층 모델의 4번째 계층이다. 3계층 네트워크 계층과 함께 데이터 전송에서 핵심적인 역할을 하는 가장 중요한 계층이다. 전송 계층의 주요 역할은 호스트와 최종 시스템 간의 네트워크 트래픽을 제어하여 전체 데이터 흐름을 보장한다. 4계층의 프로토콜은 TCP, UDP 등이 있다.

 

1. 전송 계층의 기능

 전송 계층은 데이터 패킷의 종단 간 통신을 담당한다. 네트워크 환경에서 호스트 시스템 간의 안정적이고 효율적이며 체계적인 데이터 전송을 위해 여라가지 중요한 기능을 제공한다.

  • 전송 계층은 상위 계층에서 얻은 데이터를 세그먼트라고 하는 작은 단위로 분할한다. 반대편의 전송 계층은 이러한 비트들을 다시 모아 원래의 데이터 스트림으로 만든다.
  • 전송 계층은 출발지와 목적지 사이에 연결을 만든다. 두 시스템이 모두 데이터를 통신할 준비가 되었는지 확인하기 위해 핸드셰이크 프로토콜이 실행된다. 데이터 전송이 완료되면 전송 계층은 연결을 닫는다.
  • 전송 계층은 신뢰할 수 있는 데이터 전송을 보장하기 위해 수신 확인 또는 ACK 비트를 사용한다. 수신자가 수신을 확인할 때까지 발신자는 데이터를 추적한다. 세그먼트가 손상되었다는 확인이 있으면 데이터를 재전송한다.
  • 전송 계층은 데이터 과부하를 방지하기 위해 데이터 전송 속도를 조절한다. 이는 슬라이딩 윈도우 프로토콜과 같은 프로토콜을 활용하여 수행되며, 수신자가 수신할 수 있는 최대 데이터 양을 송신자에게 알려준다.
  • 전송 계층은 오류를 감지하고 복구한다. 체크섬은 오류 감지를 위한 기술이다. 체크섬을 통해 데이터가 변조되었는지 확인할 수 있다. 오류를 감지했다면 데이터를 재전송할 수 있다.

2. 프로세스 간 데이터 전송

 데이터 링크 계층에선 mac주소로, 네트워크 계층에선 IP주소로 목적지를 찾았다. 전송 계층에선 목적 프로세스를 찾기 위해 포트 번호를 사용한다. 포트 번호는 프로그램을 식별하는 데 사용되는 16비트 주소이다.

 3. 멀티플렉싱과 디멀티플렉싱

 멀티플렉싱은 송신자의 여러 프로세스로부터 데이터를 수집하여 헤더와 함께 하나의 패킷으로 병합하고 단일 패킷으로 전송하는 것이다. 멀티플렉싱은 호스트의 네트워크가 여러 프로세스를 동시에 사용할 수 있게 한다. 마찬가지로 메세지가 여러 프로세스로 분산되기 위해서 수신자는 디멀티플렉싱을 한다.

4. 혼잡 제어

 혼잡은 네트워크에서 너무 많은 소스가 데이터를 보내려고 시도하고, 라우터 버퍼가 오버플로되기 시작하여 패킷 손실이 발생하는 상황이다. 결과적으로 소스에서 패킷을 재전송하면서 혼잡이 더욱 증가한다. 전송 계층은 다양한 방식으로 혼잡 제어를 제공한다.

5. 데이터 무결성 및 오류 수정

 전송 계층은 오류 감지 코드를 사용하고, 체크섬을 계산하여 어플리케이션 계층에서 오는 메세지의 오류를 검사하고, 수신된 데이터가 손상되지 않았는지 검사하고, ACK 및 NACK 서비스를 사용하여 데이터가 도착했는지 여부를 보낸 사람에게 알리고 데이터 무결성을 검사한다.

 

6. 전송 계층의 프로토콜

 전송 계층의 프로토콜은 대표적으로 TCP와 UDP가 있다. 두 프로토콜의 차이점은 아래와 같다.

TCP UDP
TCP는 연결 지향 프로토콜이다 UDP는 연결 없는 프로토콜이다
TCP는 신뢰할 수 있다 UDP는 신뢰할 수 없다
TCP는 오류 검사 메커니즘을 지원한다 UDP는 체크섬을 사용한 기본적인 오류 검사 메커니즘만 가지고 있다
ACK 세그먼트가 존재한다 ACK 세그먼트가 없다
TCP는 UDP보다 느리다 UDP는 TCP보다 빠르고 간단하며 효율적이다
TCP는 손실된 패킷을 재전송 할 수 있다 UDP는 손실된 패킷을 재전송하지 않는다
TCP는 20~60바이트의 가변 길이 헤더가 있다 UDP는 헤더 길이가 8바이트로 고정되어 있다

 

 두 프로토콜에 대해서는 다른 글에서 자세히 알아보자

'일기' 카테고리의 다른 글

(JavaScript) 공원 산책  (0) 2024.12.26
(JavaScript) 달리기 경주  (0) 2024.12.25
IOCP  (0) 2024.12.24
Socket.io를 활용한 통신 프로젝트  (0) 2024.12.20
(JavaScript) 바탕화면 정리  (0) 2024.12.18