DevOps21일차 - 소켓, 데이터 링크 계층, 네트워크 엑세스 계층

문한성·2023년 4월 6일
0

부트캠프

목록 보기
34/123
post-thumbnail

소켓(Socket)

소켓(Socket)을 사전에서 찾아보면, 전구 따위를 끼워 넣어 전선과 접속되게 하는 기구를 일컫습니다. 우리가 소켓이라는 단어를 들으면, 흔히 전구 소켓을 떠올립니다. 이와 같이 네트워트에서 사용되는 소켓의 의미도 마찬가지로 프로그램이 네트워크에서 데이터를 송수신 할 수 있도록, "네트워크 환경에서 클라이언트와 서버가 서로 연결할 수 있게 만들어진 연결부"를 의미합니다.

조금 더 명확하고 통용되고 있는 소켓의 정의로는 네트워크 상에서 돌아가는 두 개의 프로세스 간 양방향 통신의 하나의 엔드포인트이며, 여기서 엔드포인트는 IP주소와 포트 번호의 조합을 의미합니다.

소켓은 포트 번호에 바인딩되어 전송계층에서 데이터를 주고 받는 어플리케이션을 식별할 수 있게 합니다. 다시 말하면, 어플리케이션 계층에 존재하는 프로세스들은 데이터를 주고 받기 위해 소켓을 거쳐 전송 계층의 네트워크로 전달함으로써 데이터를 송수신 할 수 있습니다. 이 때, 누가 어디로 보낼지를 정하는 IP주소와 포트 정보가 필요합니다. IP 주소는 데이터를 전달받을 호스트의 주소를 가리키고, 포트 번호는 그 데이터를 전달받을 호스트 안에서 원하는 프로세스를 찾는 용도로 사용됩니다.

그렇기 때문에 소켓 안에는 다음과 같은 정보들이 포함됩니다.

  • 프로토콜
  • 호스트 IP 주소 (Source IP Address)
  • 호스트 Port 번호 (Source Port Nunber)
  • 목적지 IP 주소 (Destination IP Address)
  • 목적지 Port 번호 (Destination Port Number)

소켓의 특징

데이터를 주고 받는 프로세스 간의 양방향 통신을 목적으로 하기 때문에, 클라이언트와 서버의 구조를 가집니다. 이때 서버는 특정 포트 번호에 바인딩하여 작동하고, 소켓을 통해 클라이언트의 요청을 리스닝하며 대기합니다. 클라이언트는 이미 리스닝하고 있는 서버의 IP주소 및 포트 번호를 알고 있기 때문에, 이에 해당하는 서버에 연결을 시도하게 됩니다. 순조롭게 연결이 진행되고 나면, 서버는 같은 포트에 바인딩 된 새로운 소켓을 형성하고, 기존의 연결된 소켓으로는 연결된 클라이언트의 요청을 처리합니다. 따라서 같은 포트에 여러 개의 소켓을 생성하여 사용할 수 있습니다.

데이터 링크 게층

OSI 7 계층 모델을 기준으로 데이터 링크 계층(2계층)은 전기 신호를 모아 알아볼 수 있는 데이터 형태로 처리합니다. 출발지와 도착지 주소를 확인하고 내게 보낸 것이 맞는지 혹은 내가 처리해야 하는지에 대해 검사한 후 데이터 처리를 하는 것이 주된 역할입니다.

여기서 주소를 확인한다는 것은 한 명과 통신하는 것이 아니라 동시에 여러 명과 통신할 수 있다는 것이기 때문에 무작정 데이터를 주고 받는 것이 아니라, 받는 사람이 데이터를 받을 수 있는지 확인하는 작업부터 해야합니다. 이런 역할을 플로우 컨트롤(flow control)이라고 합니다.

2계층에서 동작하는 네트워크 구성 요소는 네트워크 인터페이스 카드와 스위치가 있습니다.

네트워크 인터페이스 카드(Network Interface Card, NIC)

네트워크 인터페이스 카드는 여러 이름을 가지고 있습니다. 우리는 흔히 랜 카드 라고 부르기도 하고, 네트워크 카드, 네트워크 인터페이스 컨트롤러(Network Interface Controller), 네트워크 어댑터(Network Adapter) 등으로 부르기도 합니다. 네트워크 인터페이스 카드는 컴퓨터를 네트워크에 연결하기 위한 하드웨어 장치이며, 노트북과 데스크톱에서는 기본 장착되므로 별로도 추가할 필요가 없습니다.

네트워크 인터페이스 카드의 주요 역할은 다음과 같습니다.

  • 직렬화(Serialization) : NIC는 전기적 신호를 데이터 신호 형태로, 혹은 그 역으로 변환해 줍니다. 이러한 상호 변환작업을 직렬화라고 합니다.
  • MAC 주소 : NIC는 고유한 MAC 주소를 가지고 있습니다. 이 MAC 주소는 Media Access Control의 줄임말로, 네트워크에 접속하는 모든 장비는 MAC 주소라는 물리적 주소가 있어야 하고, 변경할 수 없도록 하드웨어에 고정되어 있습니다.
    NIC는 입력되는 전기 신호를 데이터 형태로 만들고 데이터에서 도착지 MAC주소를 확인한 후 자신에게 들어오는 전기 신호가 맞는지 확인합니다. 자신에게 들어오는 전기 신호가 아니면 버리고, 맞으면 이 데이터를 상위계층에서 처리 할 수 있도록 메모리에 적재합니다.

스위치(Switch)

스위치는 여러 장비를 연결하고 통신을 중재하며, 케이블을 한 곳으로 모아주는 역할을 하는 2계층의 장비입니다. 주어진 MAC 주소를 보고 어디로 연결되는지, 포트는 어디인지 확인하며 이 데이터를 기반으로 통신할 때 포트를 적절히 필터링 하고 정확한 포트로 포워딩 하는 역할을 합니다.

필터링(Filtering)과 포워딩(Forwarding)

패킷이 스위치에 들어온 경우, 도착지 MAC주소를 확인하고 자신이 가진 MAC 테이블과 비교해 맞는 정보가 있으면 매치되는 해당 포트로 패킷을 포워딩 합니다. 이때 다른 포트로는 해당 패킷을 보내지 않으므로 이 동작을 필터링이라고 부릅니다.

물리 계층

물리 계층(1계층)은 용어 그대로 물리적 연결과 관련된 정보를 정의하며, 이 계층에서는 물리적 장비를 통해 전기 신호를 전달하며, 전기 신호를 전달하는데 초점이 맞춰져 있습니다.

1계층에서 이러한 전기 신호를 전달하기 위해 사용하는 주요 장비로는 허브(Hub), 케이블(Cable), 리피터(Repeater), 트랜시버(Tranceiver) 등이 있습니다.

  • 허브와 리피터 : 네트워크 통신을 중재
  • 케이블과 커넥터 : 케이블 본체를 구성하는 요소
  • 트랜시버 : 컴퓨터의 랜카드와 케이블을 연결하는 장비로 다양한 외부신호를 컴퓨터 내부 전기신호로 바꾸어주는 역할

따라서 전기 신호가 1계층 장비에 들어오게 되면 이 전기 신호를 재생성하여 내보냅니다. 이 때 장비가 주소의 개념을 이해할 수 없으므로 전기 신호가 들어온 포트를 제외하고 모든 포트에 같은 전기 신호를 전송합니다.

profile
기록하고 공유하려고 노력하는 DevOps 엔지니어

0개의 댓글