프로필사진
DevOps 부트캠프 기록일지
DevOps_04_김재환
19_Study(Socket & port)
19_Study(Socket & port)

2023. 4. 6. 15:54부트캠프/DevOps (TIL)

SOKET

 

소켓은 네트워크 상에서 동작하는 프로그램 간 통신의 종착점(End_Point)이다. 즉 프로그램이 네트워크에서 데이터를 통신 할 수 있도록 연결해주는 연결부라고 볼 수 있다. 데이터를 통신할 수 있도록 연결해주기 때문에 통신할 클라이언트와 서버 모두 소켓이 생성되어야 한다.

 

통신의 종착점(End_Point)

즉, OSI 7 계층의 어플리케이션 계층(application layer)에 존재하는 네트워크 응용 프로그램들은 데이터를 송수신 하기 위해 소켓을 거쳐 전송 계층(trasport layer)의 통신 망으로 전달함으로써 데이터를 송수신 하게 된다.

따라서 소켓은 그 사이에 위치하고 있으며, 응용 프로그램에서 TCP/IP를 이용하는 인터페이스 역할을 한다.

soket을 통한 연결과

 

5-Tuple

 

통신을 통해 전달되는 모든 데이터 포맷은 5-tuple 이라는 규격에 맞추어 흐르게 된다.

  1. 프로토콜 (Protocol)
  2. 호스트 IP 주소 (source IP address)
  3. 호스트 port 번호 (source port nunber)
  4. 목적지 IP 주소 (destination IP address)
  5. 목적지 port 번호 (destination port number)
  • IP 주소: 호스트(컴퓨터, 스마트 폰 등의 단말기)들을 식별할 수 있는 고유한 주소다. IP 주소가 있으면 어떤 호스트에 데이터를 보내는 지, 누가 보내는 지를 알 수 있다.
  • port 번호: 호스트 내의 프로세스들을 식별할 수 있는 번호다.

소켓도 위 정보들인 프로토콜, IP 주소, port 번호가 있어야 정의된다.

먼저 보통 소켓은 인터넷 소켓이며, 위에서도 말했듯이 전송 계층 위에서 동작하므로 프로토콜은 TCP/UDP 가 된다. 프로토콜이 정의되면 네트워크 상에서 데이터를 송수신할 수 있는 방법, 규칙이 정의된 것이다.

이제 누가 어디로 보낼 지를 정의하기 위한 주소로 IP와 port 정보가 필요하다. IP 주소는 어떤 호스트(단말기)로 데이터를 보내야 할 지 알려준다. IP 주소를 이용해 원하는 호스트에 도착했다고 끝이 아니라 송수신할 프로세스를 찾아야 한다. 소켓은 프로세스 간 통신을 하기 위한 api다. 이때 port 번호를 통해 어떤 프로세스에 가야할 지 정할 수 있다.

즉, 호스트의 어떤 프로세스와 다른 호스트(목적지 호스트)의 프로세스가 네트워크 상에서 통신하기 위해 당연하게 위 정보들이 필요하게 된다.

또 중요한 부분이 1개의 프로세스는 1개 이상의 소켓을 사용할 수 있다. 따라서 1개의 호스트 내의 프로세스 1개로 여러 개의 소켓을 열어 다수의 호스트들과 통신도 가능하다. 이때 소켓들을 구분하는 방법은 소켓에 주어지는 소켓 번호로 식별한다.

 

소켓의 종류 및 통신 흐름

Stream sockets - TCP (Transmission Control Protocol)

  • TCP를 사용하므로 연결 지향형(Connection-oriented) 소켓
  • 신뢰성을 보장한다
  • 데이터가 순서대로 송수신된다
  • 점대점(point-to-point) 연결

Server

  1. socket(): 소켓 생성(TCP는 stream)
  2. bind(): 사용할 IP address와 Port number 등록
  3. listen(): 연결 되지 않은 소켓을 요청 수신 대기 모드로 전환(Block 상태)

Client

  1. socket(): 마찬가지로 소켓 생성(TCP는 stream)
  2. connect(): Client에서 Server와 연결하기 위해 소켓과 목적지 IP address, Port number 지정 (Block 상태)

Server

  • accept(): client의 요청 수락 후 실질적인 소켓 연결 → 통신을 위한 새로운 소켓 생성

처음 만들어 진(bind()  listen()한) 소켓은 그 이후로도 새로운 Client의 요청을 대기하기 위해 쓰임

Server-Client

  • send(), recv(): Client는 처음에 생성한 소켓으로, Server는 새로 반환(생성)된 소켓으로 client와 server간에 데이터 송수신
  • close(): 소켓을 닫음

Datagram sockets - UDP (User Datagram Protocol)

  • UDP를 사용하므로 비 연결형(Connectionless) 소켓
  • 신뢰성을 보장할 수 없다.
  • 데이터가 순서대로 송수신될 지를 보장하지 못한다.
  • 점대점 연결뿐만 아니라 일대다도 가능

connect()과정이 필요 없기 때문에 소켓을 생성한 후 바로 데이터 전송

따라서 주로 일 대 다 통신에 많이 쓰임

 

PORT

 

포트(port)는 "논리적인 접속장소"이며, 특히 인터넷 프로토콜인 TCP/IP를 사용할 때에는

클라이언트 프로그램이 네트워크 상의 특정 서버 프로그램을 지정하는 방법으로 사용된다.

 

네트워크 상에서 통신을 할 때 IP를 토대로 해당 서버가 있는 컴퓨터에 접근한다.

그런데 대부분의 경우 하나의 컴퓨터에는 여러 개의 서버가 실행될 수 있다.

컴퓨터에 여러 개의 서버가 실행되고 있다면, 어느 서버에 접속해야 하는지 컴퓨터에게 알려주어야 한다.

이때 사용되는 것이 포트 번호이다.

 

SOKET과 PORT의 차이점

 

- 소켓은 특정 포트에서 데이터를 송수신하는 인터페이스, 포트는 장치의 특정 프로세스 또는 프로그램에 할당된 숫자 값이다.

 

-소켓은 컴퓨터 네트워크의 노드 내에서 데이터를 보내고 받기 위한 내부 Endpoint, 포트는 통신의 Endpoint에서 응용 프로그램에 할당되는 숫자 값이다.

- 소켓이 특정 포트를 통해 데이터를 주고 받는 인터페이스 역할, 포트는 특정 어플리케이션이나 프로세스를 식별하는데 도움을 준다.

 

출처
https://blog.naver.com/ding-dong/221389847130
https://bnzn2426.tistory.com/52?category=770232  
https://on1ystar.github.io/socket%20programming/2021/03/16/socket-1/
https://tigercoin.tistory.com/189

'부트캠프 > DevOps (TIL)' 카테고리의 다른 글

20_Study(JSON이 XML에 비해 가지는 이점)  (0) 2023.04.10
19_Study(HTTP 종류와 차이점)  (0) 2023.04.06
18_Study(OLTP vs OLAP)  (0) 2023.03.31
16_Study(Partitioning)  (0) 2023.03.30
16_Study(인덱스)  (0) 2023.03.30