애정코딩 💻

BASIC 2021.05.03 댓글 0 Joana

01. HTTP 웹 기본 지식 - 인터넷 네트워크

www.inflearn.com/course/http-웹-네트워크#

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com

김영한님의 HTTP 웹 기본 지식 강의를 보고 필기했습니다! 강의를 보면 이해가 더 쉬우니 추천 합니다. 😋

 

실무에서 필요한 HTTP 기능과 올바른 HTTP API 설계 방법을 학습합니다! 

 

공부 계기

우리가 사용하는 HTTP 기반으로 구현된 웹 프레임워크나 기술들을 사용하는데 단순히 기능 사용법 위주로 사용하지 않고 원리를 이해하기 위해서 시작했습니다.

 

목표

HTTP의 전체 흐름을 이해한다.

 


 

01. 인터넷 통신

IP 란 무엇일까?

인터넷 환경에서의 통신규약입니다. 호스트간의 통신만을 담당한다는 점이 특징입니다.

지정한 IP주소에 패킷(Packet)이라는 통신 단위로 데이터를 전달 합니다.

 

그렇다면 패킷이란 뭘까?

데이터를 전송할 때 송신측과 수신측에서 하나의 단위가 되어 전송되는 집합체를 뜻하는데

패킷안에 출발지IP, 목적지 IP, 기타 ... 이 포함되어있다.

 

어떻게 전송할까?

IP 패킷을 만든다 -> 패킷 안에 있는 출발지, 목적지 IP 등을 인터넷으로 전달한다. -> 노드 끼리 주소를 확인하여 목적지까지 정확하게 도달한다. -> 목적지에서 메시지를 받았을 경우 받았다는 OK 메시지를 이미 온 노드를 기억하여 빠르게 답한다.

 

여기서 문제점이 있다.

1. 클라이언트에서 서버에게 데이터를 전송했다. 하지만 해당 서버가 없거나 서비스 불능 상태여도 전송이 된다. -> 비연결성

2. 클라이언트에서 서버에게 데이터를 전송했다. 하지만 중간에 패킷이 사라지거나 패킷이 순서대로 도착하지 않았다 (손실되어도 알 수 없다.) -> 비신뢰성

 

이 문제점을 해결하기 위한 방법을 알기 전에 인터넷 프로토콜 스택의 4계층을 살펴보자

 

애플리케이션 계층 - HTTP, FTP

전송 계층 - TCP, UDP

인터넷 계층 - IP

네트워크 인터페이스 계층 - LAN 드라이버, 장비

 

1. 애플리케이션에서 메시지를 생성한다. (ex. 채팅을 메시지 작성 -> Socket라이브러리 통해 전달)

2. TCP 정보 생성, 메시지 데이터 포함한다. 

3. IP 패킷 생성, TCP 데이터를 포함한다.

 

즉 데이터가 전송될때 IP 패킷 안에 TCP 데이터, 그안에 메시지 데이터를 포함하여 전송된다.

 

모든 개발자를 위한 HTTP - 김영한 / 인프런

위와 같은 그림으로 구성된 패킷을 TCP/IP 패킷이라고 한다. 

 

그렇다면 TCP란 무엇일까?

 

전송 제어 프로토콜(Transmission Control Protocol) 특징

 

- 연결지향 - TCP 3 way handshake ( 가상 연결 )

   논리적으로만 연결되어 있다고 생각하면 된다.

   양쪽에서 SYN, ACK를 사용하여 연결확인을 한다.

    -> 최근에는 마지막으로 클라이언트가 서버와 확인하는 ACK를 보낼때 요청도 같이 보낸다. 

 

    1. 클라이언트가 서버에게 연결요청 (SYN) 한다.

    2. 서버가 클라이언트에게 요청정보 (SYN), 요청 수락(ACK) 를 보낸다.

    3. 클라이언트가 마지막으로 서버와 확인하는 요청 수락(ACK)를 보낸다. -> 이때 데이터 전송을 보내기도 한다.

    4. 데이터 전송 한다.

 

- 데이터 전달 보증

   클라이언트가 서버에게 데이터를 전송하면 서버에서 잘 받았는지 응답해준다.

 

- 순서 보장

  클라이언트가 데이터를 보냈는데 서버에서 도착한 데이터의 순서가 다를시 전부 버리고 다시 요청하여 데이터를 받는다.

   -> TCP 안에 정보가 있기 때문에 가능하다. ( 순서정보, 검증 정보 등등,, )->  신뢰할 수 있는 프로토콜

 

- 현재는 대부분 TCP 를 사용한다. 

 

 

TCP와 같은 전송계층에 있는 UDP란 무엇일까? (User Datafram Protocol)

IP와 같은데 PORT, 체크섬 정보가 추가되었다.

 

왜 사용하지?

 

- UDP PORT를 사용하여 하나의 IP 에서 여러개의 어플리케이션의 패킷을 안전하게 받기 위해 사용한다. 

- 3 way handshake 가 없어 빠르다.

- TCP가 정보를 많이 갖고 있고 연결확인(3 way handshake)을 하기 때문에 느린 부분을 보안하기 위해 사용한다. (최적화)

 

그렇다면 PORT는 무엇일까?

IP 만으로는 어디서 필요한 패킷인 알수가 없기 때문에 PORT를 사용한다.

서버안에서 돌아가는 애플리케이션을 구분할 때 사용한다.

 

규칙

  • 0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음TELNET - 23HTTPS - 443
  • HTTP - 80
  • FTP - 20,21
  • 0 ~ 65535 : 할당 가능

 

그렇다면 IP 주소를 외우서 사용해야 하나?

도메인 네임 시스템 DNS(Domain Name System)

IP는 길고 어려운데다가 변경될 수 있기 때문에 DNS를 사용한다. 도메인명을 IP 주소로 변환한다.

 

IP 로 도메인을 확인하고 싶다면?

> nslookup 8.8.8.8 

반응형