Socket
"소켓은 간단하게 말하자면 서로 다른 기기의 프로세스 사이에서 네트워크 교환을 위한 인터페이스" 이다.
Transport, Internet, Link계층은 OS 레벨에서 구현/관리되어 Application 이 네트워크 기능을 사용할 수 있도록 지원한다.
이를 지원하기 위한 인터페이스를 소켓이라고 하며, 실제 실제 운영체제에서 제공하는 네트워크 관련 시스템콜들의 집합을 Sockets API 라한다.
따라서 Socket 은 Application Layer와 Transport Layer 사이에서 네트워크 통신을 위한 통로이다.
TCP 프로토콜을 사용하는 Socket : SOCK_STREAM
UDP 프로토콜을 사용하는 Socket : SOCK_DGRAM 이라 한다.
Socket 의 동작 과정
1. 우선 통신을 위한 소켓을 Server 측에서 생성하고 소켓에 포트 번호를 바인딩한고 기다린다
2. 클라이언트 측에서 서버에 요청을 보내기 위해 소켓을 생성하고 연결하면 서버측은 accept() 하며 연결된다. 이 과정에서 TCP 연결 과정이 진행된다. (3 way handshake)
사실 연결 과정에서 서버측의 소켓이 accept() 되면서 클라이언트 측과 연결 과정이 일어나고 그 후에 새로운 소켓이 만들어진다.
클라이언트는 이렇게 새롭게 생성된 소켓과 실제 통신을 한다.
즉 accept() 하는 소켓은 연결을 위한 소켓이고 실제 통신하는 소켓은 새롭게 만들어낸다.
서버측의 가운데 소켓은 클라이언트 소켓과 연결하기 위해 listen() 상태로 있다가 accept() 가 되면 다른 소켓을 만들어 클라이언트와 통신하도록 한다.
이때 만든 소켓은 기존 소켓과 IP와 PORT 가 같기 때문에 Connection을 구분하기 위해서는 클라이언트 측 IP 와 Port 도 필요하다.
즉, 소켓을 구분하기 위해 Source Port, Destination Port, Source IP, Destination IP 4가지가 필요하다.
'CS > 네트워크' 카테고리의 다른 글
[응용 계층] DNS 정리 (0) | 2024.05.31 |
---|---|
[응용 계층] HTTP 와 Web Cache (Proxy Server) (0) | 2024.05.30 |
OSI 7계층과 TCP/IP 4계층 간단 요약 (0) | 2024.05.30 |