네트워크

컴퓨터 네트워크 기본 3

hs-archive 2023. 1. 7. 18:59

http://www.kocw.net/home/search/kemView.do?kemId=1169634

 

컴퓨터네트워크

인터넷을 동작시키는 컴퓨터네트워크 프로토폴을 학습한다.

www.kocw.net

https://media.pearsoncmg.com/intl/ge/2021/cws/ge_kurose_compnetwork_8/cw/index.php

 

Companion Website | Computer Networking: A Top-Down Approach, Global Edition, 8/e

VideoNotes Video tutorials illustrating key concepts from the text.

media.pearsoncmg.com


계층 간 통신 단위

Application layer: message

Transport layer: segment

Network layer: packet

Link layer: frame

Physical layer: 전기 신호

 

Transport layer는 Application layer에서 내려온 message에 header를 붙여 segment로 만든다. 이때 message는 segment의 data 부분이 된다. 그리고 이 segment를 Network layer로 전달한다. 

 

Network layer는 Transport layer에서 내려온 segment에 header를 붙여 packet으로 만든다. 이때 segment는 packet의 data 부분이 된다. 그리고 이 packet을 Link layer로 전달한다.

 

Link layer는 Network layer에서 내려온 pakcet에 header를 붙여 frame으로 만든다. 이때 packet은 frame의 data 부분이 된다. 그리고 이 frame을 Physical layer로 전달한다.

 

Physical layer는 Link layer에서 내려온 frame을 전기 신호로 바꾸어 전선으로 흘려보낸다.

 

layer 간 통신 단위

 

What is a socket?

소켓은 데이터를 내보내거나 들여보내는 양방향 통신의 끝점이다. 비유하자면 문으로 생각할 수 있다. 소켓이라는 문 밖으로 데이터를 보내면 데이터는 반대쪽 문(소켓)으로 날아가고, 문을 열면 반대쪽에서 보낸 데이터를 들여보낼 수 있다. 소켓이 없다면 데이터를 내보낼 수도 들여보낼 수도 없다.

 

우리는 OS가 제공해 주는 API를 사용하여 socket을 사용한다. 단, socket을 사용하되 TCP socket을 사용할 것인지 UDP socket을 사용할 것인지 정해야 한다.

 

전송 계층은 메시지를 프로세스에 직접 전달하지 않고 소켓을 통해 간접적으로 데이터를 전달한다.

Socket

 

Socket의 종류: TCP socket, UDP socket

socket 중 가장 유명한 두 종류 TCP socket, UDP socket에 간단히 알아보자.

TCP, UDP는 다음에 더 자세히 배운다.

 

SOCK_STREAM

  - a.k.a. TCP

  - 신뢰성 있는 전달

  - 순서 보장

  - 연결 지향

  - 양방향 통신

SOCK_STREAM

 

SOCK_DGRAM

  - a.k.a. UDP

  - 신뢰성 보장 X

  - 순서 보장 X

  - 연결의 개념이 없음

  - 보내거나 받기만 함

SOCK_DGRAM

 

Transport layer의 역할

출발지 프로세스부터 정확한 목적지 프로세스까지 데이터가 전송되도록 한다. 정확히 어떤 프로세스한테 도착해야 하는지 구분하기 위해 port number를 적어 놓는다. 예를 들어, 하나의 프로세스가 port number 80을 가졌으면 같은 PC의 다른 프로세스는 port number 80을 중복으로 가질 수 없는 방식이다. (process들이 중복으로 port number를 가지면 port number를 통해 process들을 구분할 수 없으니까..) 또한 프로세스는 여러 port number를 가질 수도 있다. (e.g., port numbers used by process A = [80, 81, 82], port numbers used by process B = [90, 99, 100])

 

출발지에서 Multiplexing이 일어나고 목적지에서 Demultiplexing이 일어난다. 

 

Multiplexing (mux, 다중화)

통신 및 컴퓨터 네트워킹에서 멀티플렉싱은 여러 아날로그 또는 여러 디지털 신호를 공유 매체를 통해 하나의 신호로 결합하는 방법이다.

 

전송 계층에서 멀티플렉싱이란 여러 다른 소켓들로부터 받은, 전송해야 할 message들에게 source port# dest port#를 적어주고 모두 세그먼트라는 하나의 신호로 변환하여 네트워크 계층으로 전달하는 것(넌 P1의 소켓에서 왔고 넌 P2의 소켓에서 왔어? ㅇㅋ 알겠고 각자 source Port#, dest Port# 적어줄 테니까 지금부터 너네들은 다 세그먼트고 이제부터 한 줄로 가)을 말한다.

 

Multiplexing

 

Demultiplexing (demux, 역다중화)

다중화와 마찬가지로 전송 계층에서 일어나며, 전달받은 세그먼트의 dest port#를 확인하여 올바른 소켓으로 전달하는 과정(너 header에 적힌 dest port# 확인해 봐 그거야? 그러면 너는 P1의 소켓으로 가 너는 dest port# 뭐야 그러면 너는 P2의 소켓으로 가 너는 dest port# 뭐야 그거면 P3의 소켓으로 가)을 역다중화라고 한다. 

 

Demultiplexing

다중화-역다중화를 하는 이유는 보내는 데이터를 채널을 하나로 함으로써 리소스를 절약하는 데 있다. 만약 소켓마다 하나의 채널을 만들어 연결을 관리한다면 소켓을 만들 때마다 채널도 만들고 소켓이 사라질 때마다 채널도 삭제해야 한다. 예를 들어, 소켓이 1000개가 있다면 채널도 1000개를 생성해야 한다는 것이고 또, 언젠가 1000개를 삭제해야 한다는 것이다. 이러한 일은 모두 기기의 리소스를 잡아먹는 일이다. 다중화-역다중화는 이러한 문제점을 해결해 준다.

 

Multiplexing (다중화) & Demultiplexing (역다중화) 이미지

다중화 역다중화 1)
다중화 역다중화 2)

 

소켓 통신과 디멀티플렉싱 더 알아보기

UDP(connectionless)의 경우 (destination IP, destination Port) 두 가지 요소를 기준으로 demultiflexing이 이루어지고, TCP(connection-oriented)의 경우 (source IP, source Port, destination IP, destination Port) 네 가지 요소를 기준으로 demultiflexting이 이루어진다. 이것이 무슨 말인지 어떤 차이를 갖는지 알아보자.

 

UDP 소켓 식별자: (destination IP, destination Port)

TCP 소켓 식별자: (source IP, source Port, destination IP, destination Port)

 

Connectionless demux (UDP)

Connectionless demux

위 그림은 UDP 소켓 통신을 나타낸 그림이다. P3와 P4가 중앙에 위치한 서버로 보낸 패킷들의 destination IP, destination Port가 같다.(P4가 서버에게 보내는 패킷의 dest Port가 '?'로 되어 있지만 오타이며, P3, P4 둘 다 중앙에 위치한 서버로 패킷을 보내므로 dest IP 또한 같다.) 앞서 UDP의 디멀티플렉싱은 (destination IP, destination Port) 두 가지 요소를 기준으로 진행된다고 언급하였다. P3와 P4가 보낸 패킷들의 dest IP, dest Port가 같으므로 P3, P4가 보낸 데이터는 모두 P1의 같은 소켓으로 디멀티플렉싱 되어 전달된다. 만약 두 가지 요소 중 단 한 가지 요소라도 달랐다면 P1의 서로 다른 소켓으로 디멀티플렉싱 되었을 것이다.

 

이제 P1의 소켓으로 오는 데이터는 누가 보낸 데이터일까 생각해 보자. 딱히 정해져 있지 않다. 전 세계 원하는 누구든 P1에게 데이터를 보낼 수 있다. P1의 소켓은 어느 특정 소켓이랑 연결되어서 그 소켓이랑만 통신하는 게 아니라 그냥 문 열어두고 아무나 데이터 보내주세요 하는 것이다. 따라서 connectionless이다.

 

Connection-oriented demux: Threaded Web Server

Connection-oriented demux

위 그림은 TCP 소켓 통신을 나타낸 그림이다. P2, P3가 중앙에 위치한 서버로 보낸 패킷들의 dest IP, dest Port는 같지만 source IP와 source Port는 서로 다르다. 앞서 TCP의 디멀티플렉싱은 (source IP, source Port, dest IP, dest Port) 네 가지 요소를 기준으로 진행된다고 언급하였다. P2, P3가 보낸 패킷들의 dest IP, dest Port는 같지만 source IP, source Port가 다르므로 P2, P3가 보낸 데이터는 P4의 서로 다른 소켓으로 디멀티플렉싱 되어 전달된다. 네 가지 요소 중 단 한 가지 요소라도 다르면 P4의 서로 다른 소켓으로 디멀티플렉싱 된다.

 

이제 P4의 각 소켓으로 전달되는 데이터는 누가 보낸 데이터일까 생각해 보자. P4의 각 소켓은 전 세계 단 하나의 소켓과 짝을 이룬다. 이와 같이 어느 특정 소켓이랑 연결되어 그 소켓이랑만 양방향 통신을 하므로 connection-oriented이다.

 

 

** 위 두 예시를 보면 UDP 소켓 식별자는 (destination IP, destination Port)이고 TCP 소켓 식별자는 (source IP, source Port, destination IP, destination Port) 임을 유추할 수 있다.

 

** 내가 네이버에 접속하면, 네이버 서버는 socket을 하나 만들어 그 소켓을 나와의 통신에서만 사용한다. 또 다른 client가 접속을 하면 또 다른 소켓을 만들 것이다. client가 늘어날수록 소켓도 늘어난다. 그에 반해, UDP는 거의 하나의 소켓으로 퉁 친다. 따라서 TCP는 UDP에 비해 자원이 많이 든다.

 

** 내 PC에서 chrome과 firefox를 통해 동시에 네이버에 접속했다고 생각해 보자. chrome은 내 PC의 443 포트를 열고 TCP 소켓을 만들어 네이버(x.x.x.x:443)와 통신할 것이다. 마찬가지로 firefox도 내 PC의 443 포트를 열고 TCP 소켓을 만들어 네이버(x.x.x.x:443)와 통신할 것이다. 그런데, 이상하다. 이렇게 되면 한 PC에서 서로 다른 프로세스가 같은 포트를 공유하는 것이다. 이건 뭐 어떻게 공유했다 치더라도 chrome 소켓과 firefox 소켓의 식별자(source IP, source Port, dest IP, dest Port)가 모두 같아지게 된다. 식별자가 중복되면 서버가 내 PC로 보낸 메시지를 디멀티플렉싱 할 때 chrome 소켓으로 보내야 할지 firefox 소켓으로 보내야 할지 알 수 없을 것이다. 하지만 실제 PC에서 여러 브라우저를 통해 이를 동작해 보면 아무 문제 없이 잘 돌아가는 것을 확인할 수 있다. 어떻게 이런 일이 가능한 것일까.

: source IP, dest IP, dest Port는 같지만 source Port는 같지 않다. 서버의 443 포트에 접속한다고 나도 무조건 443 포트를 열어야 하는 것은 아니다. 우리가 브라우저로 어떤 페이지에 접속을 할 때 브라우저는 어떤 고정된 포트를 여는 것이 아니라 임의의 놀고 있는 포트를 열어 소켓 통신을 한다. 따라서 TCP 소켓 식별자의 중복이 생기지 않고 문제없이 브라우징을 할 수 있다. 

 

** 포트의 개수는 총 2^16개이고, 포트는 중복으로 열 수 없으며 소켓을 만들 때는 포트가 필요하다. 그러면 2^16개의 소켓을 만들면 더 이상 소켓을 만들지 못하는 것일까. 만약 그것이 사실이라면 네이버 같은 서버는 2^16 이상의 클라이언트가 접속하면 어떻게 처리하는 것일까

: 그렇지 않다. 2^16보다 더 많이 만들 수 있다. TCP 소켓 통신의 경우 소켓의 식별자는 (source IP, source Port, dest IP, dest Port)이다. dest IP, dest Port가 동일하더라도 source IP 혹은 source Port가 다르다면 새로운 소켓을 만들어 연결을 수립할 수 있다. 따라서 클라이언트당 2^16개의 연결이 가능하므로 서버 CPU 및 서버 Memory가 허락하는 한 사실상 제한이 없다.

 

 

 

 

 


https://medium.com/coderscorner/transport-layer-multiplexing-and-demultiplexing-670e16b6bfc

 

Transport Layer Multiplexing and Demultiplexing

In this post we are going to talk about how multiplexing and demultiplexing happens at the transport layer. Before we jump into the…

medium.com

https://ddongwon.tistory.com/79

 

Transport Layer 개요 (Multiplexing, Demultiplexing)

0. Transport Layer 앞서 살펴본 TCP/IP 프로토콜 스택에서 Application Layer 바로 아래에 위치하는 Transport Layer에 대해 알아보자. 1. Transport Layer의 역할 Transport Layer의 역할은 크게 두가지가 있다. 1) Source(출

ddongwon.tistory.com

https://en.wikipedia.org/wiki/Multiplexing

 

Multiplexing - Wikipedia

From Wikipedia, the free encyclopedia Jump to navigation Jump to search Method of combining multiple signals into one signal over a shared medium For multiplexing in electronics and signal processing, see Multiplexer. Multiple low data rate signals are mul

en.wikipedia.org

 

'네트워크' 카테고리의 다른 글

컴퓨터 네트워크 기본 5  (0) 2023.01.09
컴퓨터 네트워크 기본 4  (0) 2023.01.09
컴퓨터 네트워크 기본 2  (0) 2023.01.07
컴퓨터 네트워크 기본 1  (0) 2022.11.05
로드 밸런싱  (0) 2021.07.28