커넥션과 소켓은 TCP/IP 스택의 다양한 계층과 깊은 연관이 있다.
TCP/IP Stack 계층 구조
네트워크 통신을 이해하기 위해서는 TCP/IP 스택의 계층 구조를 알아야 한다. 다음은 TCP/IP 스택의 네 가지 주요 계층이다
- Application Layer: 애플리케이션 레벨에서 구현 및 관리됩니다. 네트워크 기능을 사용하는 데 목적이 있다.
- Transport Layer: 데이터 전송을 담당하며, 신뢰성 있는 전송을 보장하는 프로토콜(TCP 등)을 포함한다.
- Internet Layer: 패킷의 전달과 라우팅을 담당한다.
- Link Layer: 물리적 네트워크 매체와의 인터페이스를 제공한다.
컴퓨터 관점에서의 계층 구조
Internet Layer, Link Layer, Transport Layer를 하드웨어/펌웨어 및 운영체제 수준에서 구현하고 관리한다. 이들 계층은 네트워크 기능을 지원하는 데 목적이 있다. 때문에 시스템의 영역이라고 볼 수 있다.
반면, Application Layer는 애플리케이션 수준에서 구현 및 관리되며, 네트워크 기능을 사용하는 데 초점을 맞춘다. 때문에 애플리케이션의 영역이라고 볼 수 있다.
소켓과 포트
소켓과 포트는 Application Layer와 Transport Layer 사이의 개념이다. 프로세스가 인터넷에 연결되려면 데이터를 시스템으로 내려보낼 통로가 필요하다. 이때 사용하는 개념이 바로 소켓과 포트이다.
포트
RFC 793 문서에 따르면, 포트는 프로세스와 연결된 데이터 경로(data path) 또는 데이터 채널(data channel)이다. 포트는 포트 번호를 통해 식별되며, 경우에 따라 두 개 이상의 포트를 연결할 수 있다.
포트 식별
프로세스 간의 통신을 위해서는 인터넷에서 포트를 유니크하게 식별하여야 한다.
포트는 16비트 숫자로 (0 ~ 65535) 구성된다.
- 0 ~ 1023: well-know ports, system ports (예: HTTP(80), HTTPS(443), DNS(53))
- 1024 ~ 49151: registered ports (IANA에 등록된 번호, 예: MySQL DB(3306), Tomcat server(8080))
- 49152 ~ 65535: dynamic ports (등록되지 않은 번호, 임시로 또는 자동 할당될 때 사용)
하지만, 이 값만으로 인터넷상의 모든 포트를 유니크하게 식별할 수 없다. 따라서 포트 앞에 IP 주소를 붙여 포트를 유니크하게 식별할 수 있게 되었으며, 이를 소켓이라고 한다.
소켓
소켓은 Protocol + IP Address + Port Number의 조합으로 이루어진다. 예를 들어, <TCP, 50.50.50.50, 8081>와 같은 형식이다. 소켓은 인터넷상에서 유니크하게 포트를 식별하기 위한 주소이다. 하나의 소켓은 동시에 여러 커넥션에서 사용될 수 있다.
인터넷 프로토콜
인터넷 프로토콜(IP)은 데이터 손실과 순서 오류가 발생할 수 있는 신뢰할 수 없는 형태로 데이터를 전송하다. 따라서 프로세스 간 통신에서는 데이터를 정확하게 주고받는 것이 중요하다. 이를 위해 개발된 프로토콜이 Transmission Control Protocol(TCP)이다.
TCP Connection
TCP에서 커넥션은 프로세스 간 안정적이고 논리적인 통신 통로를 의미한다. TCP는 Connection-Oriented 프로토콜로, 프로세스 간 통신을 위해서는 커넥션을 열고 데이터를 주고받은 뒤, 커넥션을 닫는 과정을 거친다. 커넥션을 여는 과정에서는 3-way-handshake가, 커넥션을 닫는 과정에서는 4-way-handshake가 일어난다.
커넥션을 여는 이유는 안정적인 데이터 전송을 위한 기본적인 셋업이 필요하기 때문이며 커넥션을 닫는 과정에서는 시스템으로부터 할당받은 자원을 반환한다.
Connection과 Socket의 관계
각 커넥션은 인터넷상에서 유니크하게 식별되어야 하며, 한 쌍의 소켓이 커넥션을 유니크하게 식별한다. 여기서 한 쌍의 소켓이란 통신하는 두 호스트의 소켓을 이야기한다. 예를 들어, <33.33.33.33:3000, 50.50.50.50:8282>와 같이 각각의 호스트 주소와 포트 번호를 포함하는 형태이다.
'CS > 네트워크' 카테고리의 다른 글
[Network] 실제 구현상에서의 Socket (0) | 2024.08.06 |
---|---|
[Network] 네트워크의 기본 기능과 계층 모델 (0) | 2024.08.06 |