안녕하세요 오늘은 네트워크 OSI 7계층의 역할에 대해 글을 써보도록 하겠습니다.

 

네트워크 관련한 공부를 한다면 항상 등장하는 것이 OSI(Open System Interconnection)입니다.

 

일단 대략적으로 1~7계층의 특징에 대해 알아보겠습니다.

 

  • 물리 계층(1계층) : 물리 계층(Physical Layer)은 실제 장치를 연결하기 위한 전기적, 물리적 세부 사항을 정의한 계층입니다.

  • 데이터 링크 계층(2계층) : 데이터 링크 계층(data link Layer)은 두 지점 간의 신뢰성 있는 전송을 보장하기 위한 계층입니다.

  • 네트워크 계층(3계층) : 네트워크 계층(network Layer)은 여러 개의 노드를 거칠 때마다 경로를 찾아 주는 역할을 합니다. 다양한 길이의 데이터를 네트워크를 통해 전달하고, 전 송 계층이 요구하는 서비스 품질QoS을 위해 기능적, 절차적 수단을 제공합니다.

  • 전송 계층(4계층) : 전송 계층(transport layer)은 양 끝단의 사용자들이 신뢰성 있는 데이터를 주고받게 함으로써 상위 계층이 데이터 전달의 유효성이나 효율성을 신경 쓰지 않게 해줍니다.

  • 세션 계층(5계층) : 세션 계층(session Layer)은 양 끝단의 응용 프로세스가 통신을 관리하는 방법을 제공합니다.

  • 표현 계층(6계층) : 표현 계층(presentation Layer)은 코드 간의 번역을 담당하는 계층으로, 사용자 시스템에서 데이터의 구조를 통일하여 응용 프로그램 계층에서 데이터 형식의 차이로 인해 발생하는 부담을 덜어줍니다.

  • 응용 프로그램 계층(7계층) : 응용 프로그램 계층(applicaion Layer)은 응용 프로세스와 직접 관계하여 일반적인 응용 서비스를 수행합니다.

 

더 자세하게 이를 설명하기위해 대표적으로 4계층에 대해 설명드리겠습니다. 

 

 

 

1. 물리 계층(1계층) 

 

물리 계층은 시스템 간의 연결을 의미하는 것으로 직관적으로 가장 쉽게 이해할 수 있습니다.

보통 물리계층 하면 LAN선을 생각할 수 있는데요 꼭 그런 것은 아닙니다. 

집에서 인터넷을 할 떄 쓰는 랜 케이블이나 전화선이 될 수도 있고 

동축 케이블, 광케이블이 될 수도 있습니다. 

 

즉, 전자 파장을 전달하는 공간 또는 물질 자체가 물리계층입니다.

 

2. 데이터 링크 계층(2계층)

 

데이터 링크계층은 두 포인트 간(Point to Point)의 신뢰성 있는 전송을 보장하기 위한 것입니다.

CRC 기반의 오류 제어 및 흐름 제어가 필요합니다. 

데이터 링크 계층은 네트워크 위의 개체 간에 데이터를 전달하며, 물리 계층에서 발생할 수 있는 오류를 찾아내고 수정하는 데 필요한 기능적,절차적 수단을 제공합니다.

 

데이터 링크 계층은 상호 통신을 위해 MAC 주소를 할당받습니다. 

MAC계층에서 동작하는 대표적인 프로토콜을 이더넷(Ethernet)입니다.

 

데이터 링크 계층은 스위치의 동작 원리, 패킷의 흐름 등이 있습니다. 하지만 이 장에서는 자세하게는 안 쓰겠습니다. 

 

3. 네트워크 계층(3계층)

 

네트워크 계층은 여러 개의 노드를 거칠 떄마다 경로를 찾아주는 역할을 합니다.

다양한 길이의 데이터를 네트워크를 통해 전달하며 그 과정에서 라우팅, 흐름 제어, 세그먼테이션(segmentation / desegmentation), 오류 제어 등을 수행합니다.

 

네트워크 계층에서의 동작하는 라우터나 스위치가 있는데 스위치의 경우 L3 스위치라고 합니다. 

 

네트워크 계층에는 A, B, C 클래스 등이 있습니다.

A 클래스는 10.0.0.0 ~ 10.255.255.255

B 클래스는 172.16.0.0 ~ 172.31.255.255

C 클래스는 192.168.0.0 ~ 192.168.255.255

 

4. 전송 계층(4계층)

 

양 끝단(end to end)의 사용자들이 신뢰성 있는 데이터를 주고받을 수 있도록 하여 상위 계층이 데이터 전달의 유효성이나 효율성을 신경 쓰지 않게 해줍니다. 

 

전송 계층은 시퀀스 넘버 기반의 오류 제어 방식을 사용하여 특정 연결의 유효성을 제어하며, 일부 프로토콜은 상태 개념이 있고 연결 지향형입니다. 

즉, 전송 계층이 패킷의 전송이 유효한지 확인하고 전송에 실패한 패킷을 다시 전송하는 것을 의미합니다.

 

가장 잘 알려진 전송 프로토콜은 TCP(Transmission Control Protocol)입니다. TCP도 포트라는 주소를 가지고 있습니다. MAC주소가 네트워크 카드의 고유 식별자이고 IP가 시스템의 주소라면 포트는 시스템에 도착한 후 패킷이 찾아갈 응용 프로그램으로 통하는 통로 번호라고 볼 수 있습니다.

 

 

 

5~7계층도 있지만 중요한 부분 1~4 계층만 알아봤습니다. 자세한 내용은 공부를 더 해서 추후에 올리도록 하겠습니다.

 

이상 포스터를 마치겠습니다.

 

안녕하세요 

appium과 핸드폰 안에 있는 앱을 연동하는 법을 알아보도록 하겠습니다. 

 

프로그램 설치해야 될 것들은 다음과 같습니다.

 

python 설치( 후 pycharm으로 해도 됩니다.) , appium 설치, 안드로이 드 설치 , SDK설치(안드로이드 설치하면 있습니다.) 해야 됩니다. (필요 시 JDK 설치하면 됩 니다.),

 

) 1. 안드로이드 설치 후 adb 환경변수 설정 후 cmd창에서 adb devices 입력(모바일이랑 연 결되어 있어야 합니다.) (http://labs.brandi.co.kr/2018/08/10/kimcy.html adb설정 참고 ) 2. sdk경로가 모르신다면 밑의 사진 참조 및 안드로이드 8.0 설치 ( 안드로이드에서 - settings ->sdk입력)

 

 

2. https://dejavuqa.tistory.com/224 (appium 서버 설정 및 파일 위치 설정) 안드로이드의 환경변수를 입력해야 합니다.

서버 시작하기 -> 돋보기 모양 클릭 -> 사용자 정의 서버 -> 원격 호스트 이 부분에서는 소스 코드 안에는 원격 호스트, 원격 경로가 있는데 입력을 해줍니다.

원격 호스트 : 127.0.01 

원격 경로 : /wd/hub 

 

밑에 사진처럼 입력합니다.

appPackage, appActivity 부분은 밑에 블로그를 참조하시길 바랍니다. 

https://dejavuqa.tistory.com/223

 

Appium Android Inspector 실행 (with Emulator)

Windows에 Appium을 설치했으니 Android Inspector를 실행해 봅시다. Android Inspector는 Android Native App인 경우 HTML Tag 처럼 계층형으로 된 Object들을 확인할 수 있게 해줍니다. 따라서 Android Native A..

dejavuqa.tistory.com

 

 

udid부분은 cmd창에서 adb devices 하면 됩니다. (1번 참조)

appium을 실행시키고 apk를 실행시킬려면 app폴더 안에는 apk가 있어야 됩니다. ex)adsfa.apk  

 

 

보안의 3대 요소


기밀성 : 인가된 사용자만이 정보 자산에 접근할 수 있도록 하는 것
즉, 비인가자가 정보에 접근하는 것을 막는 자물쇠를 떠올려보면 됩니다. 예를 들어 방화벽, 암호, 패스워드 등이 있습니다.

무결성 : 적절한 권한을 가진 사용자가 인가한 방법으로만 정보를 변경할 수 있도록 하는 것
예를 들어 지폐에 빗대어 살펴보면, 오직 정부(적절한 권한을 가진 사용자)만이 한국은행을 통해(인가된 방법으로만) 지폐를 만들거나 바꿀 수 있고, 그렇지 않은 경우(무결성이 훼손된 경우)에는 위조지폐로 취급되어 엄중한 법의 처벌을 받습니다. 

가용성 : 정보 자산에 대해 필요한 시점에 접근이 가능하도록 하는 것
예를 들어 24시간 편의점을 이라고 생각하시면 됩니다. 편의점에서는 밤이든 낮이든 필요한 것을 구할 수 있습니다. 즉, 언제나 가용하기 때문입니다 .


유닉스(리눅스)의 계정 관리


유닉스 계열의 시스템(이후 유닉스)에서는 기본 관리자 계정으로 root가 존재합니다. 
유닉스에서는 /etc/passwd 파일에서 계정 목록을 확인할 수 있습니다. 
/etc/passwd 파일은 다음과 같이 구성됩니다.

 



1. 사용자 계정입니다.
2. 패스워드가 암호화되어 shadow 파일에 저장되어 있음을 나타냅니다.
3. 사용자 번호입니다. 
4. 그룹 번호입니다.
5. 실제 이름입니다. 자신의 이름입니다.
6. 사용자의 홈 디렉터리 설정입니다. 즉, 위의 사진은 관리자 계정이므로 홈 디렉터리가 /root입니다. 일반 사용자는 /home 디렉터리의 하위에 위치합니다.
7. 사용자의 셀 정의로 기본 설정은 bash 셀입니다. bash셀 말고도 zshell 등이 있습니다. 


유닉스에서 관리자 권한은 3번과 4번으로 식별합니다.
관리자가 사용자 번호가 0이고 그룹 번호도 0입니다. 

유닉스에서 일반 사용자 계정도 /etc/passwd 파일에서 확인을 합니다. 이때 /etc/passwd파일 구조에서 2번과 7번을 확해야 합니다. 
초기의 리눅스 및 유닉스는 2번이 공백이면 패스워드 없이 로그인이 가능한 계정으로 처리했으나 지금은 계정을 비활성화 해놓습니다. 

 

 

간단한 설명으로 이상 포스터를 마치겠습니다. 감사합니다 

 

'운영체제' 카테고리의 다른 글

RSA(Rivest, Shamir and Adleman) 암호  (0) 2020.06.12
네트워크 OSI 7계층의 역할  (0) 2020.06.12
HTTP 인증  (0) 2020.05.28
JSP - doGet() 과 doPost()의 차이  (0) 2020.04.25
JSP - 서블릿(Servlet)과 웹(Web)이란?  (0) 2020.04.25

안녕하세요 벌써 5월달이 다 지나갔습니다. 5월달은 사건이 많았네요. 이태원, 미국 흑인 사망, 등이 있었네요. 코로나 조심하시고 건강 유의하시길 바랍니다. 생활 속 거리두기는 필수이고 좋은 일만 가득했으면 좋겠습니다.

 

벌써 5월달이 끝나고 6월달이 왔네요ㅎㅎ 운동한 결과를 보여드리겠습니다.

 

4월에 비해 다 채우지는 못했습니다ㅠㅠㅠ 뭔가 걷기를 많이 했는데도 작동하지가 않을 때가 있네요.ㅠㅠ

다음 달에는 꼭 다 채워보도록 하겠습니다.

 

다음사진은 5월 시간 칼로리랑 운동 전체한 시간을 보여사진인데요.

걷기 제외하고 뜀걸음(오래달리기)을 총 8시간정도 했다고 보시면 됩니다.

4월에 비해는 덜 했지만 만족은 합니다~ 의외로 운동할 시간이 없기도 하고 핑계도 되고 뭐 그랬죠

 

 

5월 운동한 결과인데 몇개 부분은 짤랐습니다. 너무 보기에 불편하실 것 같아서 대략적인 부분만 사진에 넣었습니다.

제일 중요한 게 실외 달리기 10.51km을 5월 10일날 한 거 였습니다. 인스타에는 올렸는데 이 블로그에는 안 올렸네요.

시간 나면 10km 후기를 올리도록 하겠습니다.

 

 

(오늘)5월 31일날 7.62km를 달렸습니다. 뭔가 뛰기가 싫었는데 그래도 그냥 뛰었습니다. 걷고 뛰고 씹고 맛보고? ㅈㅅ

 

그래서 한 결과 애플워치에서 목표를 달성하면 배지를 주는데 이렇게 줬네요 5월에 12번의 운동을 완료하여 이 배지를 획득했습니다.(15분 이상해야 1번 줌)

 

마지막 금메달 같은 5월!!! 금메달 같은 5월을 받아서 기분이 뿌듯하네요~ 4월달도 받았지만 5월달도 받게 되네요.

저는 뭔가 배지를 채우는 게 재밌어서 계속 하고 있어요~ 나중에 보면 완전 기분 좋을 것 같네요

 

 

 

제가 명언을 아주 좋아합니다. 그래서 명언 하나 올리도록 하겠습니다.

여러분들도 이 명언을 보시고 자극되었으면 좋겠습니다.

 

진부한 말 같지만 성공하려면 남들보다 두 배로 노력하라

-오스카 델라 호야-

 

이상 포스터를 마치겠습니다.

 

 

 

www.acmicpc.net/problem/10995

 

10995번: 별 찍기 - 20

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

www.acmicpc.net

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 차례대로 별을 출력한다.

 

 

바로 소스코드를 보시겠습니다.

#include <iostream>

using namespace std;

int main() 
{
    int N;
    cin >> N;

    for(int i = 0; i < N; i++)
    {
        if(i % 2 == 1)
            cout<<" ";
    
        for(int j = 0; j < N; j++)
        {
            cout<<"* ";
        }
        cout<<endl;
    }
}

 

풀이를 말씀드리자면

첫 번째로 i=0일 때 if문은 지나칩니다. 0 % 2 = 0이기때문에 지나치고 j = 0 에서 j < 2; j ++ 에서 총 두 번을 실행해야 되기 때문에 * *가 나옵니다.

두 번째로 i =1 일 때 if문을 한 번 실행하죠? 한 칸을 띄어준다음에 j를 두번 실행합니다.

그러면 첫 번째 실행햇을 때는 * * 가나오고 두 번째 실행했을 때는 (한 칸 띄어줌) *  *가 나옵니다.

 

이상 포스터를 마치겠습니다.

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 N번째 줄까지 차례대로 별을 출력한다.

 

소스코드는 다음과 같습니다.

#include <iostream>

using namespace std;

int main()
{
    int N; 
    cin >> N; //N = 2일 때 , 

    for(int i = 1; i <= N; i++)  i = 1 <= N(2);  ----- 1  
    {
        for(int j = i;j<= N - 1; j++)  // j = 1 ,  j <= N(2) -1 = 1   --- 2 
        {
            cout<<" "; // 1번 실행  -- 3 
        }
        for(int j = 1 ; j <= i *2 - 1; j++) // j = 1 <= 1 * 2 - 1 = 1; --- 4   
        {
            if(j % 2 == 1)  // 1 % 2 == 1 * 출력  즉, " *"  ---- 5 
                cout<< "*"; --- 6 
            else
                cout<<" ";
        }
        cout<<endl; // 다시 맨 위로 올라갑니다. i = 2일 때로 시작합니다. --- 7 
    }
}

 

저도 아직 부분한 점이 많아 이런식으로 이해하려고 합니다. 입출력 문제는 30분이상 넘기면 안 될 것 같아서 다른사람의 해설, 문제풀이를 보면서 이해합니다.

 

이상 포스터를 마치겠습니다. 감사합니다.

HTTP는 너무 어려운 것 같네요 ㅠㅠ 외울려고 글을 올리겠습니다. 몇 번째 읽는 지 ㅠㅠ 

HTTP인증 프레임워크

RFC 7235는 서버에 의해 클라이언트 요청을 시도하고, 클라이언트에 의해 인증 정보를 제공하기 위해 사용될 수 있는 HTTP 인증 프레임워크를 정의합니다.

이러한 시도와 응답과정은 다음과 같습니다.

서버는 클라이언트에게 401(Unauthorized)응답 코드를 가지고 응답, 최소한 한 번의 시도에 포함된 WWW-Authenticate 응답 헤더로 권한을 부여하는 방법에 대한 정보를 제공합니다.

 

서버와 인증을 하기를 원하는 클라이언트는 Authorization 요청 헤더 필드에 인증 정보를 포함함으로써 인증을 수행할 수 있습니다.

 

클라이언트는 대개 사용자에게 비밀번호 프름프트를 표시할 것이고 정확한 Authorization 헤더를 포함하는 요청을 만듭니다.

 

"Basic"인증의 경우의 교환은 안전을 위해 HTTPS(TLS) 연결 위에서 발생하여야 합니다.

 

 

프록시 인증

동일한 시도 및 응답 메커니즘이 프록시 인증을 위해서도 사용될 수 있습니다. , 인증을 요구하는 중간 프록시입니다. 리소스 인증 및 프록시 인증은 함께 존재할 수 있기 때문에, 헤더와 상태 코드의 다른 세트가 필요합니다. 프록시의 경우, 요청에 대한 상태 코드는 407(Proxy Authentication Required)이며,

Proxy-Authenticate 응답 헤더는 프록시에 적용 가능한 최소한 하나의 요청을 포함합니다.

Proxy_Authorization 요청 헤더는 프록시 서버에 인증 정보를 제공하기 위해 사용합니다.

 

WWW-AuthenticateProxy-Authenticate 헤더

WWW-Authenticate Proxy-Authenticate 응답 헤더는 자원에 대한 액세스를 얻기 위해 사용되어야 할 인증 방법을 정의합니다.

헤더의 문법은 다음과 같습니다.

WWW-Authenticate : <type> realm = <realm>

Proxy-Authenticate : <type> realm = <realm>

<type> : 인증 스킴

realm : 보호 되는 영역을 설명, 보호의 범위를 알리는데 사용

, 어떤 공간에 사용자가 접근하려고 시도하는지를 알리기 위하여, “중간 단계의 사이트에 대한 접근과 같거나 또는 비슷한 메시지가 될 수 있습니다.

 

AuthorizationProxy-Authorization 헤더

요청 헤더는 사용자 에이전트가(프록시) 서버에 인증을 하기 위한 인증 정보를 포함합니다.

이들은 인증을 하려는 클라이언트가 인증 정보를 제공할 방법을 알기 위해, 어떤 인증 스킴이 사용될 것인지를 구체적으로 적을 필요가 있습니다.

WWW-Authenticate : <type> realm =<relam>

Proxy-Authenticate : <type> realm =<relam>

인증 스킴

HTTP 인증 프레임워크는 여러 인증 스킴에 의해 사용됩니다. 스킴은 보안 강도와 클라이언트 , 서버 소프트웨어에서 사용 가능성에 따라 달라질 수 있습니다.

 

일반적인 인증 스킴은 Basic인증 스킴입니다.

이외의 Bearer, Digest, HOBA, Mutual, AWS4-HMAC-SHA256이 있습니다.

 

 

다음 포스터는 인증 스킴에 대해 알아보도록 하겠습니다. 감사합니다. 

www.acmicpc.net/problem/2446

 

2446번: 별 찍기 - 9

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

www.acmicpc.net

문제

예제를 보고 규칙을 유추한 뒤에 별을 찍어 보세요.

입력

첫째 줄에 N(1 ≤ N ≤ 100)이 주어진다.

출력

첫째 줄부터 2×N-1번째 줄까지 차례대로 별을 출력한다.

 

결과는 다음과 같습니다.

 

소스코드는 다음과 같습니다.

#include <iostream>

using namespace std;

int main()
{
    int N;
    cin >> N;

    for(int i=0; i < N; i++)
    {

        for(int j = 0; j < i; j++)
            cout<<" ";
        for(int j =0; j < N - i; j++)
            cout<<"*";
        for(int j = 0; j < N -i -1; j++ )
            cout<<"*";

        cout<<endl;
    }

    for(int i = 1; i < N; i++)
    {
        for(int j = 1; j < N - i; j++)
            cout<<" ";
        for(int j = 0; j < i+1; j++)
            cout<<"*";
        for(int j = 0; j < i; j++)
            cout<<"*";
        cout<<endl;
    }
}

 

아직 제가 실력이 많이 부족해 public, private, 오버라이딩 등을 사용해서는 구현은 못 하겠습니다. 계속 공부를 하면서 배워가면서 추후 더 좋은 소스와 좋은 내용으로 말씀드리겠습니다.

 

이번 문제에도 위에 별을 먼저 생각하고 그 후에 밑에 별을 출력할 생각을 했습니다.

 

이상 포스터를 마치겠습니다.

+ Recent posts