전송 계층
전송 계층은 이름 그대로 데이터 전송을 관리하고 상위 계층(세션 계층)과 하위 계층(네트워크 계층) 간의 데이터 흐름을 제어하는 역할을 한다. 또한 종단 간(end-to-end)의 통신을 담당하며, 데이터를 신뢰성 있게 전송할지, 빠르게 전송할지를 결정하는 중요한 계층이다.
종단 간 통신?
종단 간(end-to-end) 통신이란 네트워크 상에서 송신자와 수신자 간의 직접적인 통신을 의미한다. 중요한 점은 이 통ㅇ신이 중간에 있는 여러 네트워크 장치(라우터, 스위치 등)를 거치지만, 궁극적으로는 송신자와 수신자 사이의 데이터 전송을 뜻한다는 것이다.
전송 계층의 주요 역할
1. 데이터 세그먼트화
일반적으로 네트워크에서 한 번에 전송할 수 있는 데이터의 크기는 제한되어 있다. 때문에 데이터를 작은 조각으로 쪼개는 것이 필요한데, 이 때 전송 계층에서 데이터를 세분화(segmentation)해서 전송하는 역할을 한다. 또한, 수신자는 송신자로부터 받은 세그먼트를 원래의 데이터로 다시 조립해야 한다.
2. 흐름 제어
수신자가 한 번에 받을 수 있는 데이터의 양은 제한되어 있는데, 송신자가 너무 빠르게 데이터를 보내버리면 이를 제대로 처리하지 못할 수 있다. 흐름 제어는 이러한 현상을 방지하기 위해 송신자와 수신 자 간 데이터 전송 속도를 조절하는 메커니즘이다.
3. 오류 제어
데이터를 전송할 때, 데이터 무결성을 보장하기 위해, 전송 계층은 데이터 전송 중 발생할 수 있는 오류를 탐지하고 수정한다. 이를 통해 데이터의 신뢰성을 보장하고, 네트워크 오류가 발생하더라도 데이터가 완전히 수신될 수 있게 한다.
4. 다중화
다중화란, 한 대의 장치에서 여러 응용 프로그램들이 동시에 네트워크 연결을 사용할 수 있도록 해주는 기능이다. 각 응용 프로그램은 포트 번호를 통해 구분되는데, 이 때 전송 계층에서는 데이터에 출발지와 목적지 포트 번호를 부여해 특정 응용 프로그램으로 데이터를 전송하고, 수신자는 이 정보를 바탕으로 도착한 데이터를 적절한 응용 프로그램에 전달한다.
TCP (Transmission Control Protocol)
TCP는 신뢰성 있는 데이터 전송을 보장하는 프로토콜이다. 데이터의 신뢰성을 보장하기 위해 TCP는 다음과 같은 특징들을 갖는다.
1. 연결 지향성
연결 지향성이라는 것은 데이터 전송을 시작하기 전에 송신자와 수신자 같에 논리적인 연결을 설정하는 과정을 거친다는 의미이다. 연결은 데이터 전송이 시작될 때부터 끝날 때까지 유지되며, 데이터 전송이 완료되면 연결을 해제한다.
3-way Handshake
TCP에서는 데이터를 전송하기 전에 송신자와 수신자 간에 3-way Handshake를 통해 연결을 설정한다.
- SYN : 송신자는 연결을 시작하기 위해 수신자에게 SYN(동기화) 패킷을 보냄
- SYN_ACK: 수신자는 SYN 패킷을 받고 응답으로 SYN-ACK 패킷을 송신자에게 보냄
- ACK: 송신자는 SYN-ACK 패킷을 확인한 후 ACK(확인) 패킷을 보내어 연결이 성립됨
이러한 과정을 통해 송신자와 수신자는 데이터를 주고받을 준비가 완료되었음을 서로 확인한다.
4-way Handshake
데이터 전송이 완료된 후에는 4-way Handshake를 통해 연결을 안전하게 해제한다.
- FIN: 송신자가 연결을 종료하기 위해 수신자에게 FIN 패킷을 보냄
- ACK: 수신자는 이를 확인하고 ACK 패킷을 보냄
- FIN: 수신자도 연결을 종료할 준비가 되면 FIN 패킷을 송신자에게 포냄.
- ACK: 송신자는 이를 확인하고 ACK 패킷을 보냄
위 과정을 통해 연결이 해제되고 통신이 종료된다.
2. 신뢰성 있는 데이터 전송
TCP는 데이터 세그먼트화, 순서 제어, 오류 제어, 그리고 확인 응답(ACK) 및 재전송을 통해 데이터가 정확한 순서로 수신되도록 보장한다.
확인 응답(ACK) 및 재전송
TCP는 송신된 세그먼트가 제대로 도착했는지 확인하기 위해 수신자로부터 ACK를 받는다. 만약 받지 못하면 해당 세그먼트를 재전송하는 것으로 데이터 손실을 방지한다.
3. 슬라이딩 윈도우(Sliding Window)
TCP는 슬라이딩 윈도우(Sliding Window) 방식을 사용해 흐름 제어를 한다. 수신자는 자신이 처리할 수 있는 데이터의 크기를 윈도우 크리고 설정하고, 송신자는 이 범위 내에서 데이터를 전송한다. 송신사는 수신자의 ACK를 받으면 다음 데이터를 보낼 수 있게 된다.
4. 혼잡 제어(Congestion Control)
TCP는 네트워크 상의 혼잡을 감지하고 제어하는 기능을 통해 네트워크가 과부하에 빠지는 것을 방지한다. 네트워크에 과부하가 걸리면 데이터를 천천히 보내고, 혼잡이 해소되면 점점 전송 속도를 높이는 식으로 작동한다.
혼잡 제어 알고리즘
- Slow Start: 처음에는 작은 윈도우 크기로 시작해, ACK를 받을 때마다 윈도우 크기를 두 배씩 늘려 나감.
- Congestion Avoidance(혼잡 회피): Slow Start 이후에, 윈도우 크기가 특정 임계값에 도달하면, 윈도우 크기를 선형적으로 증가시킴. (두 배씩이 아니라 하나씩 증가)
- Fast Retransmit(빠른 재전송): 패킷 손실을 감지하면 즉시 재전송을 시작함
- Fast Recovery(빠른 회복): 혼잡 상태에서 윈도우 크기를 줄인 후, 혼잡이 해소되면 다시 윈도우 크기를 늘려감
TCP는 신뢰성 있는 데이터 전송이 중요한 여러 애플리케이션에서 사용된다. (HTTPS, FTP 등)
UDP(User Datagram Protocol)
UDP는 TCP와 달리, 신뢰성보다는 속도를 중요시하는 프로토콜이다. TCP보다 속도가 빠르지만, 데이터의 신뢰성이 떨어진다. UDP의 특징들은 다음과 같다.
1. 비연결형 프로토콜(Connectionless Protocol)
비연결형 프로토콜이라는 것은, 송신자와 수신자가 데이터를 주고받기 전에 연결을 설정하지 않는 것을 말한다. 송신자는 일방적으로 데이터를 보내고, 수신자는 이를 수신할 뿐이다. 연결을 설정하거나 해제하는 과정이 없어 속도가 매우 빨라진다. 그렇기 때문에 데이터 손실이나 순서 뒤바뀜이 발생할 수 있지만, 이는 UDP가 응용 프로그램에 따라 더 적합하게 사용될 수도 있다.
2. 데이터그램 전송
UDP는 데이터를 데이터그램 형태로 전송한다. 데이터그램은 독립적으로 전송되며, 각 데이터그램은 서로 다른 경로로 전송될 수 있고, 순서가 뒤바뀌거나 손실될 수 있다. 또한 UDP는 데이터를 전송할 때 각 데이터그램에 포트 번호와 체크섬을 포함한다.
- 포트 번호: 송신자와 수신자 간의 특정 응용 프로그램을 식별하는데 사용됨
- 체크섬: 오류를 감지하는데 사용되지만, 오류를 수정하는 기능은 없음
신뢰성이 낮은 대신 속도가 빠른 점 때문에, UDP는 주로 실시간 스트리밍이나 온라인 게임 등에서 자주 사용된다.
포트
포트란, 컴퓨터 네트워크에서 송신자와 수신자 간에 데이터를 주고받기 위한 논리적인 통신 통로이다. IP 주소가 네트워크 상에서 장치를 구분하고, 포트 번호는 그 장치의 응용 프로그램을 구분해주는 것이다. 따라서 IP 주소가 집의 주소라면, 포트는 그 집에 있는 문의 번호라고 할 수 있다.
1. 포트 번호의 개념
포트 번호는 16비트 숫자로 표현되며, 따라서 가능한 포트 번호의 범위는 0부터 65535까지이다. 네트워크에서 데이터 패킷이 전송될 때, 각 패킷에는 출발지의 포트 번호와 목적지 포트 번호가 포함되어, 어느 애플리케이션에서 데이터가 송수신되는지를 알 수 있다.
2. 포트의 역할
포트는 네트워크에서 여러 애플리케이션이 동시에 작동할 수 있게 도와준다. 예를 들어, 웹 브라우저가 HTTP 요청을 보내는 동시에 다른 애플리케이션이 이메일을 보내거나 파일을 다운로드 할 수 있다. 이는 각 애플리케이션이 서로 다른 포트를 사용하기 때문이다.
3. 포트 번호의 범위
포트 번호는 특정 역할에 따라 세 가지 범위로 나뉜다.
- 잘 알려진 포트 (Well-knwon Ports): 0~1023번까지의 포트 번호. 주로 표준화된 서비스에 할당됨.
- HTTP(웹) : 포트 80
- HTTPS(보안 웹) : 포트 443
- FTP(파일 전송): 포트 21
- DNS(도메인 네임 시스템): 포트 53
- SMTP(이메일 전송): 포트 25
- 등록된 포트(Registered Ports): 1024~49151번까지의 포트 번호. 특정 애플리케이션이나 프로토콜에 등록되어 사용되지만, 반드시 표준화된 것은 아님.
- MySQL 데이터베이스 서버: 포트 3306
- Microsoft SQL Server: 포트 1433
- 동적 포트 또는 사설 포트(Dynamic or Private Ports): 49152~65535번까지의 포트 번호. 주로 클라이언트 측에서 임시로 할당되는 포트.
'스탠다드반 자료조사' 카테고리의 다른 글
프로세스와 스레드 / 컨텍스트 스위칭 (0) | 2024.11.05 |
---|---|
CPU (1) | 2024.10.07 |
데이터 링크 계층 (0) | 2024.09.05 |
물리 계층 (0) | 2024.09.02 |
OSI 7계층 (0) | 2024.08.28 |