네트워크 3-1 : 트랜스포트 계층 이해 (포트, 소켓, 다중화-역다중화)

Jang990·2024년 2월 20일
0

네트워크

목록 보기
3/5
post-thumbnail

패킷을 전송해보자.

패킷을 하나의 PC에서 다른 PC로 전송하는 상황을 생각해보자.

지금 애플리케이션 계층을 알아보고 트랜스포트 계층을 알아보고 있다.
하지만 이 그림은 아직 모르는 네트워크, 링크, 물리과 여러 라우터와 링크들이 보여서 복잡해보인다.

(그림처럼 애플리케이션, 트랜스포트 계층은 종단 간의 시스템에서 구현된다)

단순하게...

그림 3.1의 두 종단 시스템간의 통신을 단순화해봤다.
PC 1프로세스 1PC 2프로세스 2가 통신을 하는 상황이다.
(단순화를 위해 복잡한 네트워크를 빨간 화살표롤 바꿔버렸다.)

이렇게 단순하게 바라보면 이제는 두 가지 궁금증만 남게된다.

  1. 네트워크의 수 많은 PC중에 어떻게 PC 2에게 정확하게 전송할 수 있을까?
  2. PC 2의 수 많은 프로세스 중에 어떻게 프로세스 2에게 정확하게 전송할 수 있을까?

1번 궁금증은 이후 글에서 네트워크 계층을 알아보며 해소할 것이다.
지금은 "네트워크 계층에서 IP를 통해 식별한다." 정도로 넘어가고
2번 궁금증에 집중하자.

이 글은 2번 궁금증을 해소하기 위한 글이다.

단계별로 궁금증 해소하기.

2번 궁금증을 해소하기 위해서는 트랜스포트 계층을 알아야 한다.

트랜스포트 계층

트랜스포트 계층은 애플리케이션 메시지를 보낼 때 메시지를 작은 조각으로 분할하고 각각의 조각에 트랜스포트 계층 헤더를 추가하여 네트워크 계층으로 전달한다.
(이 글에서 트랜스포트 계층의 패킷을 UDP는 데이터그램 TCP는 세그먼트라 부르지만 세그먼트로 통일해서 부르겠다.)

트랜스포트 계층은 프로세스 간의 논리적 통신을 제공한다.
여기서 논리적 통신이란 직접 연결된 것처럼 보인다는 것을 의미한다.
(= 트랜스포트 계층은 프로세스 간에 직접 연결된 것처럼 보이게 해준다.)

포트 - 프로세스를 어떻게 식별하지?

트랜스포트 계층이 프로세스 간의 논리적 통신을 제공한다는 것은 알겠는데 어떻게 제공한다는 것일까?
일단 프로세스를 식별할 수 있어야 한다.
이 식별할 때 필요한 것이 포트 번호이다.

네트워크에서 포트는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위이다.
각 포트는 번호로 식별된다.

이 포트 번호를 통해서 프로세스를 식별하게 되는 것이다.

소켓 - 패킷을 어디로 주고 받지?

이제 프로세스는 식별을 했는데 프로세스 2에서 패킷을 어떻게 받을 수 있을까?
이때 소켓이 사용된다.

소켓은 호스트의 애플리케이션 계층과 트랜스포트 계층 간의 인터페이스이다.
프로세스는 소켓을 통해 네트워크 메시지를 주고 받는다.
그래서 트랜스포트 계층은 데이터를 직접 프로세스로 전달하지 않고 중간 매개자인 소켓에게 전달한다.

소켓은 프로세스로와 네트워크간의 데이터를 전달하는 출입구 역할을 한다.
프로세스가 방이라면 소켓은 방의 문이라고 생각할 수 있다.

다중화 역다중화 - 소켓을 어떻게 식별하지?

하나의 PC는 여러 프로세스가 있기 때문에 PC 1에도 여러 소켓이 있을 수 있고, PC 2에도 여러 소켓이 있을 수 있다.

근데 네트워크에서 PC 1프로세스 1에서 PC 2프로세스 2로 패킷을 전송하면
프로세스 1의 소켓에서 보낸 패킷이 프로세스 2의 소켓에서 뿅하고 튀어나온다.

프로세스 1의 소켓에서 데이터를 보낼 때 다중화(멀티플렉싱)을 거치고,
프로세스 2의 소켓에서 뿅하고 패킷이 튀어 나올 때 역다중화(디멀티플렉싱)를 거친다.

좀 더 다듬어서 말하면 다음과 같다.

PC 1의 트랜스포트 계층은 애플리케이션 계층에서 메시지를 받으면
헤더를 붙혀 하나의 세그먼트(트랜스포트 계층의 패킷)를 만들고, 네트워크로 전송해준다.
이 과정을 다중화(멀티플렉싱)이라 한다.

PC 2의 트랜스포트 계층은 네트워크 계층에서 온 세그먼트를 까본 후
여러 프로세스 소켓들 중 올바른 소켓으로 데이터를 전달된다.
이 과정을 역다중화(디멀티플렉싱)이라 한다.

소켓은 IP와 포트 번호의 조합으로 식별된다.

다중화, 역다중화 자세히 살펴보기

트랜스포트 계층의 다중화와 역다중화를 TCP와 UDP를 예시로 좀 더 자세히 살펴보자.

지금은 TCP는 신뢰적이고 연결지향형 서비스라는 점과
UDP는 비신뢰적이고 비연결형 서비스라는 점만 기억하면 된다.

TCP와 UDP에 대해서는 이후 글에서 자세히 다루기 때문에 다중화와 역다중화에만 집중하자.
예시에서 보여주는 헤더 그림들은 참고만하자.

(애플리케이션 개발자는 이 두가지 트랜스포트 프로토콜 중 하나를 명시해야 한다.)

예시 1) TCP

지금은 그림의 TCP 헤더에 포트 정보들이 담기는 것을 확인만 하고 다른 헤더 필드들은 뒤에서 배울 것이다.

TCP는 신뢰적이고 연결 지향형 서비스이기 때문에
TCP 소켓은 {출발지 IP주소, 출발지 포트번호, 도착지 IP주소, 도착지 포트번호}에 의해 식별된다.

다음 그림을 확인하면 같은 도착지 IP주소와 도착지 포트번호를 가져도
다른 출발지 IP를 갖거나, 다른 출발지 포트번호를 가진다면 다른 소켓으로 들어간다.

이렇기 때문에 연결 소켓과 프로세스는 항상 일대일 대응되는 것은 아니다.
하나의 같은 프로세스에 붙어있는 많은 연결 소켓들이 존재할 수 있다.(ex - 웹서버)
(그림에서도 도착지 포트번호와 IP 주소가 같지만, 출발지가 달라서 다른 포트로 역다중화되는 것을 확인할 수 있다.)

예시 2) UDP

UDP는 비신뢰적이고 비연결형 서비스이기 때문에
UDP 소켓은 {도착지 IP주소, 도착지 포트번호}에 의해 식별된다.

참고 및 출처

책 - 컴퓨터 네트워킹 하향식 접근
컴퓨터네트워크 - 한양대학교 | KOCW 공개 강의
https://ko.wikipedia.org/wiki/%ED%8F%AC%ED%8A%B8_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9)#%EC%9D%BC%EB%B0%98%EC%A0%81%EC%9D%B8_%ED%8F%AC%ED%8A%B8_%EB%B2%88%ED%98%B8

profile
공부한 내용을 적지 말고 이해한 내용을 설명하자

0개의 댓글