[TIL]TCP/IP, 프로토콜, HTTP, 상태코드, CORS

meek·2023년 3월 16일
0

/*elice*/

목록 보기
7/21

1. TCP/IP

  • 현재 주요 프로토콜로써 컴퓨터간 통신에 기본이 되는 것
  • 하드웨어와 운영체제 접속매체와는 상관없이 동작할 수 있다는 점에서 인터넷 통신을 위한 핵심이 됨

🐢 TCP/IP

  • 데이터가 정확한 목적지에 도달할 수 있도록 해주는 통신 규약
    👉 데이터를 안정성있게 보내기위한 프로토콜
  • 디바이스를 연결하는 프로토콜의 집합이며 개별적인 프로토콜로도 사용 가능
  • 데이터 패킷을 컴파일하고 올바른 위치로 전송하여 다른 컴퓨터와 통신할 수 있음
    * 컴파일(compile)
    • 주어진 언어로 작성된 컴퓨터 프로그램을 다른 언어의 동등한 프로그램으로 변환하는 프로세스

🐢 TCP

  • 데이터 전송을 위한 연결지향 프로토콜
  • 데이터는 네트워크 선로로 전달되는 과정에서 손실되거나 순서가 뒤바뀌어서 전달될 수 있는데, TCP는 손실을 검색해서 이를 교정하고 순서를 재조합할 수 있도록 해줌

TCP의 특징

  1. 적극적 수신과 통신 재전송 체계를 사용해 신뢰감을 보장한다.
  2. 송신자가 보낸 데이터의 양을 제어하는 메커니즘을 구현해 흐름제어가 가능하다.
  3. 원격 컴퓨터의 응용 프로그램 프로세스 사이에 여러 연결이 존재할 수 있도록 하기 때문에 다중화가 가능하다.

🐢 IP

  • 인터넷 또는 로컬 네트워크를 통해 전송되는 데이터 형식을 관리하는 규칙 집합

🐢 OSI 7계층과 TCP/IP 모델의 차이

  • TCP/IP 모델은 네트워크 통신이 일어나는 과정을 4단계로 나눈 것

  • OSI 4계층이라고도 부름

    TCP/IP 모델
    4계층응용 계층(Application Layer)
    3계층전송 계층(Transport Layer)
    2계층인터넷 계층(Internet Layer)
    1계층네트워크 액세스 계층(Network Access Layer)
  • TCP는 메세지 파일들을 작은 패킷으로 나누어 인터넷을 통해 전송하는 것과 수신된 원래 메세지로 재조립하는 일을 담당

  • 반면, 하위계층인 IP는 각 패킷에 주소부분을 처리하며 패킷들이 목적지에 정확하게 도달할 수 있게 함

👻 응용 계층

  • 사용자와 가장 가까운 계층

    응용 계층
    데이터 단위DATA/Message
    역할응용프로그램 간의 데이터 송수신
    종류응용계층, 표현계층, 세션계층
    전송 주소X

👻 전송 계층

전송 계층
데이터 단위Segment
역할통신 노드 간의 연결 제어 및 자료 송수신을 담당
종류전송 계층
전송 주소포트 번호
  • Segment
    • 데이터 전송을 위해 데이터를 일정크기로 나눈 것

👻 인터넷 계층

인터넷 계층
데이터 단위Packet
역할네트워크상 최종목적지까지 정확하게 연결되도록 연결성을 제공
종류네트워크 계층
전송 주소IP

👻 네트워크 액세스 계층

네트워크 액세스 계층
데이터 단위Frame
역할물리적으로 데이터가 네트워크를 통해 어떻게 전송되는지를 정의
종류물리 계층, 데이터 링크 계층
전송 주소MAC 주소

🐢 인트라넷

  • '내부의(Intra)'라는 의미의 단어와 네트워크의 줄임말 Net이 결합된 용어
  • 해당 회사에 속한 직원만 접근할 수 있는 사설망
  • 구축하는 가장 큰 이유는 보안 때문

🐢 엑스트라넷

  • '바깥의(Extra)'라는 의미의 단어와 네트워크의 줄임말 Net이 결합된 용어
  • 인트라넷과 달리 외부 협력사 또는 고객들도 접속 가능
  • 고객에게 가용성 있는 서비스를 제공하고, 협력사와 원활하게 업무를 진행하기 위해 구축

2. 프로토콜

🐢 프로토콜

  • 통신에 필요한 형식, 약속, 규칙 등의 정의
  • 신호 처리법, 오류처리, 암호, 인증, 주소 등을 포함
  • 원활한 통신을 위해서 프로토콜을 통일시키는 것이 좋음

🐢 네트워크 아키텍처

출처: 변계사 Sam의 테크 스타트업!

  • 복잡한 네트워크 시스템을 프로토콜의 조합으로 단순화한 것
  • 프로토콜의 집합

🐢 프로토콜의 구성요소

구분프로토콜
구문(Syntax)전송하고자 하는 데이터의 형식, 부호화, 신호 레벨 등을 규정
의미(Semantics)효율적이고 정확한 정보 전송을 위한 제어 정보를 규정
시간(Timing)통신 속도, 순서 제어 등을 규정

🐢 프로토콜의 기능

기능역할
단편화/재합성데이터 블록을 나누고 합쳐서 전송
캡슐화프로토콜에 필요한 데이터 정보를 부착
연결/흐름/오류 제어데이터 전송에 필요한 연결/흐름/오류를 개설,조정,종결
순서 결정데이터 단위 순서대로 수신 측에 전달
주소 설정발생지, 목적지 등의 주소를 명기하여 데이터를 전달
동기화/다중화상태를 일치시키는 기능
통신로를 나누어 동시에 사용할 수 있도록 하는 기능

🐢 캡슐화(Capsulation) & 역캡슐화(Decapsulation)

  • 캡슐화 : 상위 계층에서 통신 프로토콜 정보를 데이터에 추가, 실제 구현 내용의 일부를 내부어 감추어 은닉한다는 의미
  • 역캡슐화 : 상위 계층에서 통신 프로토콜 정보를 데이터에서 제거

3. HTTP

🐢 HTTP

  • Hyper Text Transfer Protocol
  • 인터넷에서 데이터를 주고받을 수 있는 프로토콜
  • 전통적인 클라이언트 : 서버 모델을 따름
  • 무상태 프로토콜이며, 서버가 어떠한 상태나 데이터를 유지하지 않음을 의미

🐢 HTTP 구조

HTTP 구조역할
Start Line요청라인/상태라인 👉 항상 한 줄
Header헤더는 생략 가능
Empty Line공백라인
Message Body메세지 본문 👉 bite로 담을 수 있는 정보들은 가능

🐢 HTTP 헤더

  • 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있게 해줌
  • HTTP 본문 및 요청, 응답에 대한 정보를 포함
  • 헤더의 속성은 이름-값 쌍으로 설정되며 :로 구분

🐢 HTTP 헤더의 종류

  1. General Header : 요청과 응답 모두에 적용, Body에서 최종적으로 전송되는 데이터와 관련은 없음
  2. Response Header : 위치 또는 서버 자체에 대한 정보와 같이 응답에 대한 부가적인 정보를 가짐
  3. Request Header : 패치된 리소스나 클라이언드 자체에 자세한 정보를 포함
  4. Entity Header : 컨텐츠의 길이나 MIME 타입과 같이 Body에 대한 자세한 정보를 포함

🐢 HTTP 메서드

메서드역할
GET자료를 조회할 때 사용
POST자료를 등록할 때 사용
PUT자료의 수정을 요청할 때 사용
DELETE자료의 삭제를 요청할 때 사용

🐢 CRUD

  • Create, Read, Update, Delete
  • 대부분의 컴퓨터 소프트웨어가 가지는 기본적인 데이터 처리 기능
  • 사용자 인터페이스가 갖추어야할 기능을 가리키는 용어
  • 클라이언트와 서버간의 HTTP 프로토콜을 이용해서 데이터를 전송할 때도 활용

4. 상태코드

  • 클라이언트의 요청에 대한 상태에 대한 서버의 응답
  • 상태코드를 통해 어떤 오류가 있는지 확인가능

🐢 1xx 상태코드

  • 요청을 받았으며 프로세스를 계속한다

  • HTTP 1.0에서는 지원안됨

    코드설명
    100Continue
    - 서버가 request 헤더는 받았고, 클라이언트가 request 바디 부분을 보내고 있는 상태
    101Switching Protocol
    - 요청자가 서버에게 Switching Protocol을 묻는 상태
    102Processing
    - 요청자에 의해 서버가 요청을 수신하였으며 이를 처리했지만, 응답이 없는 상태
    103Checkpoint
    - 중단된 Put과 Post 요청을 재개할 목적으로 되찾을 수 있는 request를 사용하는 상태

🐢 2xx 상태코드

  • 요청을 성공적으로 받았으며 인식했고 수용했다

  • Successful : 성공 응답

    코드설명
    200OK
    - 에러 없이 전송이 성공된 상태
    201Created
    - request가 되었고, 새로운 자원이 만들어진 상태
    주로 회원가입, 특정 업로드가 되었거나 서버에서 새로운 식별자를 생성할 때 사용하기도 함
    202Accepted <br / > - 서버가 request를 전송받았으나 현재 완전하게 처리되진 않은 상태
    203Non-Authoritative Informaiton
    - 서버가 클라이언트 요구 중 일부만 전송한 상태
    204No Content
    - 서버가 클라이언트 요구를 처리했으나 전송할 데이터가 없는 상태
    성공적으로 처리했지만 Content를 제공하지 않는 것
    206Partial Content
    - 클라이언트의 header 범위 문제로 서버가 자원 일부만 전달받은 상태

🐢 3xx 상태코드

  • redirection

  • 요청 완료를 위해 추가 작업 조치가 필요

    코드설명
    301Moved Permanently
    - 요청된 페이지가 새 URL로 옮겨진 상태
    302Found
    - 요청된 페이지가 일시적으로 새 URL로 옮겨진 상태
    304Not Modified
    - 마지막 요청 이후 수정되지 않은 상태
    305Use Proxy
    - location field에 proxy의 URL을 사용하는 상태
    307Temporary Redirect 302 Foung HTTP 응답 코드와 동일한 의미가 있으며, 사용자 에이전트가 반드시 사용된 HTTP 메소드를 변경하지 말아햐 하는 점만 다른 상태
  • 305 추가 설명
    • Proxy : 클라이언트와 웹서버 사이에 위치하여 빠른 access나 안전한 통신 등을 확보하기 위한 중개서버
    • 요청자가 사용해야하는 프록시 서버의 정보를 포함할 수 있음
    • 다만, 보안상의 이유로 이 응답코드를 인식하는 브라우저는 없고 현재 사용중지된 비권장 응답코드

🐢 4xx 상태코드

  • Client Error

  • 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.

    코드설명
    400Bad Request
    - 요청사항에 문법적인 오류가 있어서 서버가 이해할 수 없는 상태
    401Unauthorized
    - 해당 요청에 대한 권한이 없는 상태
    - 이 코드를 사용할 때는 반드시 브라우저에 어느 인증방식을 사용할건지 보내줘야함
    403Forbidden
    - 금지된 요청을 허가하지 않는 상태
    - 단순히 권한이 없는 상태일 때
    - 서버가 요청을 거부할 때
    404Not Fount
    - 요청한 페이지를 찾을 수 없는 상태
    - 요청해서 서버는 찾았으나 데이터를 찾지 못한 경우
    405Method Not Allowed
    - request에 명시된 요청 Method가 제공되지 않은 상태
    - url는 있지만 해당 method는 제공되지 않는 경우
    406Not Acceptable
    - request에서 accept header에 not acceptable의 내용을 가진 자원을 요청한 상태
    408Request Timeout
    - 요청 대기 시간이 지난 상태
    410Gone
    - 요청 페이지는 더 이상 사용할 수 없는 상태
    - 404와 달리 찾는 resource가 영원히 사라진 경우에 사용

🐢 5xx 상태코드

  • Server Error

  • 서버가 명백히 유효한 요청에 대해 충족을 실패

  • 요청이 올바른 것인지에 대해서는 알 수 없음

    코드설명
    500Internal Server Error
    - 일반적인 서버 에러 메세지로 요청 사항을 이행할 수 없는 상태
    502Bad Gateway
    - 게이트웨이나 프록시의 상태가 나쁘거나 과부하인 상태
    504Gateway Timeout
    - 과부하 등의 이유로 게이트웨이나 프록시의 한계 대기 시간이 지난 상태
    505HTTP Version Not Supported
    - request에서 사용한 HTTP 프로토콜을 서버가 지원하지 않는 상태

🐢 CORS

  • Cross-Origin Resource Sharing
  • 서로 다른 출처 간에도 요청과 응답을 허용하는 정책

  • 브라우저에서는 보안적인 이유로 CORS를 제한한다. 그래서 CORS 요청을 하려면 서버의 동의필요하다. 만약, 서버가 동의한다면 브라우저에서는 요청을 동의하고 동의하지 않는다면 브라우저에서 요청을 거절한다. 이러한 허락을 구하고 거절하는 매커니즘을 HTTP 헤더를 통해서 가능한데 이것을 CORS라고 부른다.
  • 예를 들어, 악의적으로 정보를 추출하거나 다른 사람의 정보를 입력하는 등 공격을 하는 것을 방지하기 위해 사용한다.

🐢 SOP

  • Same-Origin Policy
  • 자신과 동일한 출처만 서버로부터 데이터를 요청하여 받을 수 있도록 하는 정책
  • Scheme(Protocol), Host(Domain), Port로 구성

🐢 CORS Request 종류

  1. Simple Request
  • Content-type 헤더는 다음의 값들만 허용됨
  • get, post, head 메서드 중 하나 사용
  • Preflighted을 제외한 요청
  1. Preflighted Request
  • 먼저 OTIONS 메서드를 통해 다른 도메인의 리소스로 HTTP 요청을 보내 전송하기에 안전한지 확인
  • cross-origin 요청은 유저 데이터에 영향을 줄 수 있기 때문에 미리 전송

🐢 Same Origin

  • Origin의 프로토콜, 도메인, 포트 번호가 같을 경우 같은 출처라 할 수 있음
  • 포트 번호가 없으면 암시적으로 포트 번호가 일치하는 것으로 간주

🐢 Same Site

  • 도메인만 일치하면 같은 사이트라고 할 수 있음

💡 추가로 보면 좋을 것들

profile
hello, world!

0개의 댓글