프로토콜 스택이란? 

OS에 내장된 네트워크 제어용 소프트웨어

프로토콜 스택 구성

  • TCP - 커넥션 사용, 데이터 송수신 담당
  • UDP - 커넥션 사용하지 않음, 데이터 송수신 담당(짧은 양을 사용시) 
  • IP - 패킷 운반, 경로 설정, ICMP(오류 통지, 제어용 메시지 통지)와 ARP(MAC주소 찾을때)라는 프로토콜을 다룸

IP주소를 DNS를 통해 알아냈으면 이제 액세스 대상 웹서버에 메시지를 송신하도록 OS 내부에 있는 프로토콜 스택에 의뢰합니다.

웹서버에 보내는 HTTP의 메시지는 디지털 데이터이므로 디지털 데이터를 송신하도록 의뢰한다고 해도 좋습니다.

IP주소를 조회할 떄와 같이 소켓 라이브러리에 들어있는 프로그램 부품을 이용하는데, IP주소를 조회할 때처럼 프로그램 부품을 하나씩 호출하고 끝나진 않는다. 복수의 부품을 결정된 순번대로 호출하게 돼서 조금 복잡할 수 있다. * 소켓은 서버와 클라이언트가 데이터를 송수신하는데 연결되는 파이프의 양끝(출입구)을 소켓이라고 부른다.

데이터 송수신 동작 순서

  1. 소켓을 만든다.
  2. 서버측의 소켓에 파이프를 연결한다.(연결시에 포트번호가 필요하다)
    • IP주소 : 전화번호
    • 포트번호: 소켓지정(홍길동씨 계십니까?)  (포트번호는 중간과정이라고 보면된다.)
  3. 데이터를 송수신한다.
  4. 파이프를 분리하고 소켓을 말소한다(연결 끊기)

포트번호는 종류에 따라 미리 결정된 값을 사용한다는 규칙이 있습니다. 

  • 웹: 80번
  • 메일: 25번

'IT 스터디 > 네트워크' 카테고리의 다른 글

기본적으로 알면 도움이 되는 포트 번호  (0) 2022.10.17
프로토콜 스택의 구성  (0) 2021.08.18
IP주소의 기본  (0) 2021.08.18
HTTP 리퀘스트 메시지 작성  (0) 2021.08.17
네트워크 공부 시작  (0) 2021.08.16

인터넷이나 사내 LAN은 TCP/IP의 개념에 기초하여 만들어졌으므로 TCP/IP의 개념부터 알아보자.

TCP/IP란?

서브넷이라는 작은 네트워크를 라우터로 접속하여 전체 네트워크가 만들어진다고 볼 수 있다.

이것의 한개의 단위는 서브넷이고, 라우터에서 연결하면 네트워크 전체가 완성된다.

집 주소로 따지면 ~~동은 서브넷이고, 번지에 해당하는 번호를 컴퓨터에 할당한 것이네트워크 주소라고 한다.

이 동에 해당하는 번호를 네트워크 번호, 번지에 해당하는 번호를 호스트 번호라고 한다.

네트워크번호와 호스트번호를 합쳐서 IP주소라고 한다.

송신측이 메시지를 보낼때는 서브넷 안에있는 허브가 운반하고, 가장 가까운 라우터까지 도착한다.

그리고 라우터가 메시지를 보낸 상대를 확인하여 다음 라우터를 판단하고

그 다음 라우터의 서브넷의허브로 보내고를 반복합니다. 이것이 TCP/IP의 기본적인 개념입니다.

IP주소의 구조

IP주소의 규칙에서는 네트워크 번호와 호스트 번호의 두 가지를 합쳐서 32비트로 되어있다.

11111111.11111111.11111111.    00000000   

                 네트워크 번호                 호스트번호

IP주소의 호스트 번호

모두 0 : 서브넷 자체를 나타냄

모두 1: 서브넷에 있는 기기 전체에 패킷을 보내는 '브로드 캐스트'를 나타냄

DNS란?

서버명과 IP 주소를 대응시키기 위해 사용하는것

서버명을 입력하고 IP주소값을 얻는 과정

  1. 서버명 입력
  2. 리졸버 호출(리졸버는 소켓에 있는 IP주소값을 호출하는 프로그램)
  3. OS내부에 프로토콜 스택을 호출하여 실행 의뢰(리졸버는 송수신 기능이 없기 때문)
  4. LAN어댑터를 통해 메시지가 DNS서버를 향해 송신
  5. 답이 발견되면 클라이언트에게 반송
  6. 프로토콜 스택을 경유하여 리졸버에 건네져서 리졸버가 내용을 해독한 후
  7. 애플리케이션에 IP주소 제공

 

유저가 URL을 작성 (url은 보통 http://로 시작하지만 ftp:, file:, 기능의 따라 다양함)

브라우저가 웹서버에 보내는 리퀘스트의 메시지를 작성하기 위해 URL을 해독

http://www.example.co.kr/dir1/fil1.html

  • http: - 데이터 출처에 엑세스 하는 방법, 즉 프로토콜을 기록
  • //  - 나중에 이어지는 문자열이 서버의 이름임을 나타냄
  • www.example.co.kr  - 웹 서버명
  • / - 디렉토리명
  • dir1/file.html - 경로명

끝이 /로 끝나는 경우: 파일명을 생략한 경우 기본접속값이 존재한다. (index.html 등)

 

네트워크 공부 이유 : 백엔드 개발자 공부를 하면서 프로그램을 서비스하려면 네트워크 지식은 필수라고 생각했다. 이외에도 공부하면서 네트워크 관련 언급이 계속 나오기 때문에 더 좋은 개발자가 되기 위해서 지나칠 수가 없었다.

공부 교재 : 우선 시중에 나와있는 네트워크 책 중에 "성공과 실패를 결정하는 1%의 네트워크 원리"라는 책이 기본기를  잡기 가장 좋다고 판단하여 이 책을 구매하였다.

얻고 싶은 것: "유저가 브라우저에 URL을 입력한 후 원했던 화면이 보일 때까지 어떤 일이 벌어지는가"에 대한 확실한 이해와 설명을 할 수 있는 수준이 되길 바란다.

교재 링크 : https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=243233851 (역시나 내돈내산)

git stash - 수정 중인 파일 감추기 및 되돌리기

먼저 git stash를 사용하기 위해서는 파일이 한 번 commit된 상태여야 합니다. 이후에 파일을 수정했을 때 숨기고 싶다면

$ git stash  #어딘가에 수정내용을 보관한다.

숨긴 파일을 꺼내고 싶을 때

$ git stash pop # 가장 최근에 숨긴 목록을 되돌린다. (선입후출 방식)

꺼내면서 숨겨진 내용도 그대로 유지하고 싶을 때

$ git stash apply

stash 목록에서 가장 최근 항목 삭제하고 싶을 때

$ git stash pop

'IT 스터디 > 깃&깃허브' 카테고리의 다른 글

지역 저장소와 원격 저장소 연결하기  (0) 2021.08.18
원격 저장소 - 깃허브  (0) 2021.08.18
브랜치란?  (0) 2021.08.16
깃 파일 커밋하기(2)  (0) 2021.08.16
깃 버전관리 간단한 원리  (0) 2021.08.16

브랜치란? 버전관리 시스템에서는 나무가 가지에서 새 줄기를 뻗듯이 여러 갈래로 퍼지는 데이터 흐름을 뜻함

기본적으로 저장소 생성시 master라는 브랜치가 만들어짐 (커밋 할때마다 master 브랜치는 최신 커밋을 가리킴)

master브랜치에서 새로운 브랜치를 만드는 것을 브랜치라고 한다 -> 새 브랜치에서 원하는 작업이 끝나면 master브랜치에 합칠 수 있다. 이를 병합(merge)이라고 한다.

쉽게 이해하자면 master는 기둥이고 브랜치는 뻗어나가는 가지라고 생각하면 된다.

브랜치 만들기

git branch "브랜치이름"

git branch -> 브랜치 목록들 나열 + * 있는 곳이 현재 브랜치 위치

브랜치 이동

git checkout "옮기고 싶은 브랜치 이름"

브랜치의 커밋 상태 보기

git log --oneline --branches

git log --oneline --branches --graph

각 브랜치 사이의 차이점 보기

git log "브랜치이름" .."비교대상브랜치"

브랜치 병합

먼저 master브랜치로 체크아웃해주세요. git checkout master

git merge 병합할 브랜치 이름

* 편집기 창을 열리지 않게 하려면

git merge 브랜치이름 --no-edit

차이 나타나지 않지만 커밋메시지를 추가하거나 수정하고 싶다면

git merge 브랜치이름 --edit

* 브랜치 수정한 부분이 같은 위치에 겹칠 경우 파일을 열고 겹치는 부분을 수정하여 다시 커밋하면 된다.

병합 후 브랜치 삭제하기 - 삭제 후 다시 같은 이름의 브랜치를 만들면 내용 다시 볼 수 있음

먼저 master브랜치로 체크아웃

gir branch -d "삭제할 브랜치 이름"

 

 

 

'IT 스터디 > 깃&깃허브' 카테고리의 다른 글

원격 저장소 - 깃허브  (0) 2021.08.18
깃 - git stash 사용법  (0) 2021.08.16
깃 파일 커밋하기(2)  (0) 2021.08.16
깃 버전관리 간단한 원리  (0) 2021.08.16
vim파일 사용법  (0) 2021.08.16

스테이징 되돌리기 (수정한 파일 다시 되돌리기)

 git reset HEAD 파일이름

최신 커밋 되돌리기

git reset HEAD^

  • --soft HEAD^ - 최근 커밋을 하기전 상태로 작업 트리를 되돌림
  • --mixed HEAD^ - 최근 커밋과 스테이징을 하기 전 상태로 작업 트리를 되돌림 -- 보통 기본 옵션
  • --hard HEAD^ - 최근 커밋과 스테이징, 파일 수정을 하기 전 상태로 작업 트리를 되돌림, 되돌린 내용은 복구할 수 없음

특정 커밋으로 되돌리기

git reset --hard (되돌리고 싶은 커밋 주소)

커밋 삭제하지 않고 되돌리기

git revert (되돌리고 싶은 커밋 주소)

 

'IT 스터디 > 깃&깃허브' 카테고리의 다른 글

깃 - git stash 사용법  (0) 2021.08.16
브랜치란?  (0) 2021.08.16
깃 버전관리 간단한 원리  (0) 2021.08.16
vim파일 사용법  (0) 2021.08.16
리눅스 명령어 연습하기  (0) 2021.08.14

+ Recent posts