인터넷 네트워크

2021. 12. 8. 16:23·교육 및 인강/모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한

김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 수강하면서 HTTP 내용을 정리한다.

자세한 정보가 궁금하면 수강을 추천드립니다.

 

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

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

www.inflearn.com


인터넷 통신

클라이언트가 hello world를 보내면 서버에서는 ok 응답을 보내준다.

이 과정을 통해, 인터넷은 어떻게 통신을 할까?

서버가 하나만 있는 것도 아니고 많이 존재하는데 어떻게 찾아갈까?

어떻게 찾아갈까?


IP (인터넷 프로토콜)

클라이언트에서 서버로 찾아가는 방법은 IP를 이용하는 것이다.

 

인터넷 프로토콜의 역할 

- 인터넷 프로토콜은 지정한 IP 주소 (IP Adress)로 데이터를 전달한다.

IP로 서로 찾아간다.

- 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.

    - 출발 IP, 도착 IP, 전송 데이터로 구성된다. 

클라이언트에서 서버로 요청을 전달한다.
서버에서 클라이언트로 응답을 보내준다.

IP 프로토콜의 한계

위의 그림을 보면 통신을 하는 과정에서 많은 노드를 거치게 되는데, 클라이언트와 서버가 서로 연결 안된걸 볼 수 있다.

이 과정에서 문제가 생기기도 한다.

 

- 비연결성

    - 패킷을 받을 대상이 없거나 서비스 불능 대상이여도 패킷을 전송한다. (대상 서버가 패킷을 받을 수 있는지 알 수 없다)

- 비신뢰성

    - 노드를 거치다가 해당 노드에 문제가 생겨서 중간에 패킷이 사라지면? 

    - 패킷이 순서대로 안오면? 패킷이 정해진 노드대로 오지않고 중간에 경로가 바뀔 수도 있다. 

- 프로그램 구분

    - 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 2개 이상이면?


TCP, UDP

이전에 언급된 IP 프로토콜의 한계를 해결해주는게 TCP와 UDP 이다. 

먼저 IP 계층을 알아보자.

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

- 전송 계층 : TCP, UDP 

- 인터넷 계층 : IP

- 네트워크 인터페이스 계층

 

TODO : OSI 7계층 간단히 알아보기. 

 

프로토콜 계층

컴퓨터를 바라보면 간단하게 애플리케이션, 운영체제, 네트워크 관련된 구조로 3가지로 나눠진다.

여기서 채팅 프로그램을 통해 해외에 있는 친구에게 메시지를 보낸다면 다음과 같은 그림을 볼 수 있다. 

순서대로 보면 HTTP -> TCP -> IP -> 이더넷프레임 차례대로 정보가 포함되어 서버로 전송이 된다.

 

IP 패킷 정보

 

 

IP 패킷 정보에는 출발지 IP, 목적지 IP 등를 포함한다.

* 패킷은 수하물을 뜻하는 패키지와 덩어리를 뜻하는 버킷의 합성어다. 

 

TCP/IP 패킷 정보

TCP/IP 패킷은 IP 패킷 정보에 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 담긴다.

 

TCP는 전송 제어 프로토콜(Transmission Control Protocol)로 다음과 같은 특징을 가진다. 

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

 

 

1. 클라이언트에서 서버로 SYN(접속 요청) 메시지를 보낸다.

2. 서버에서 클라이언트로 SYN+ACK 메시지를 보낸다.

3. 클라이언트에서 서버로 ACK 메시지와 데이터를 보낸다. 

1,2 과정을 통해 서로 응답을 확인하고 나서 3번 과정을 통해 데이터를 보낸다.

* 실제로 물리적으로 연결된 게 아니라 개념적으로 연결이 된거다. 

 

- 데이터 전달 보증

- 순서 보증

- 신뢰할 수 있는 프로토콜

- 현재 대부분 TCP 사용

 

UDP (User Datagram Protocol)

사용자 데이터그램 프로토콜로 다음과 같은 특징을 가진다.

- 하얀 도화지에 비유 (기능이 없다고 보면됨)

- 연결지향 - TCP 3 way handshake 없음 

- 데이터 전달 보증도 하지 않음

- 순서 보장도 없음

- 그냥 단순하고 빠르다. 

 

IP와 비교하자면

- PORT, 체크섬 정도만 추가된다.

- 애플리케이션에서 추가 작업이 필요하다.


PORT

지금까지 클라이언트와 서버로 1:1 통신을 기준으로 알아봤다.

그런데 보통 게임에서 팀으로 진행하면 게임 서버, 팀과 화상통화, 웹 브라우저로 게임 정보 검색 등 1:n 으로 통신하면 어떻게 해야할까?

동시에 여러 서버로 통신하면 어떻게 구분할까?

 

TCP/IP 정보를 다시 확인해보자.

IP만으로 구분하기 힘들기 때문에 출발지 PORT, 목적지 PORT가 존재한다.

정리하면 IP와 PORT 2가지로 구분하게 된다.   

- 출발지 IP, PORT

- 목적지 IP, PORT

 

PORT란?

같은 IP 내에서 프로세스를 구분하는 걸 PORT라고 한다.

IP, PORT로 구분

 

PORT의 범위

0 ~ 65535 까지 할당이 가능하다.

0 ~ 1023는 기본적으로 사용하고 있기 때문에, 건들지 않는 것이 좋다. 다음은 대표적으로 사용 중인 PORT 번호다

  • FTP - 20, 21
  • TELNET - 23
  • HTTP - 80
  • HTTPS - 443

DNS (Domain Name System)

지금까지 IP로 클라이언트와 서버가 서로 통신하는 걸 알 수 있었다.

하지만 일반적인 사용자의 입장에서 인터넷을 사용할 때 생각해보면 IP 100.100.100.1 같은 주소를 외우긴 힘들다. 

https://www.naver.com  같이 도메인 주소를 입력해서 인터넷을 사용하는 게 대부분이다. 

또한 IP 주소는 변경이 될 수 있다.  

IP를 외워서 사용하기엔 많은 불편함이 있다.

 

이런 문제를 쉽게 해결해주는 것이 도메인 네임 시스템이다.

 

DNS이란?

IP 계의 전화번호부 역할을 한다.

도메인 명을 IP 주소로 변환시켜준다.

도메인 -> IP로 변환

 

'교육 및 인강 > 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한' 카테고리의 다른 글

HTTP 상태코드  (0) 2021.12.10
HTTP 메서드 활용  (0) 2021.12.10
HTTP 메서드  (0) 2021.12.09
HTTP 기본  (0) 2021.12.09
URI와 웹 브라우저 요청 흐름  (0) 2021.12.08
'교육 및 인강/모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한' 카테고리의 다른 글
  • HTTP 메서드 활용
  • HTTP 메서드
  • HTTP 기본
  • URI와 웹 브라우저 요청 흐름
loop-study
loop-study
오늘도 공부하자
  • loop-study
    개발 공부할래?
    loop-study
  • 전체
    오늘
    어제
    • 분류 전체보기 (187)
      • 목표 및 회고 (26)
      • 세미나 & 워크샵 (1)
      • 교육 및 인강 (67)
        • TDD, Clean Code with Java (5)
        • ATDD, 클린 코드 with Spring (6)
        • DDD 세레나데 (3)
        • 인프라 공방 (6)
        • 이규원의 현실 세상의 TDD (19)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (18)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (0)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한 (8)
        • 코딩으로 학습하는 GoF의 디자인 패턴 (1)
        • 스프링 시큐리티 완전정복 6.x (1)
      • 서적 (62)
        • 객체지향의 사실과 오해 (1)
        • 객체지향과 디자인패턴 (7)
        • 만들면서 배우는 클린 아키텍처 (3)
        • 테스트 주도 개발로 배우는 객체 지향 설계와 실천 (1)
        • 오브젝트: 코드로 이해하는 객체지향 설계 (17)
        • 리팩토링 : 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 (0)
        • 토비의 스프링 (3)
        • 엔터프라이즈 애플리케이션 아키텍처 패턴 (9)
        • 개발자의 글쓰기 (1)
        • 소프트웨어 장인 (17)
        • Real MySQL 8.0 (2)
        • JVM 밑바닥까지 파헤치기 (0)
      • 개발 & 방법론 (29)
        • Java (13)
        • TDD (5)
        • ATDD (3)
        • DDD (6)
        • 인프라 (2)
        • SQL (0)
      • 개인이야기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 백엔드 로드맵
  • 인기 글

  • 태그

    테스트 주도 개발
    엔터프라이즈 애플리케이션 아키텍처 패턴
    Patterns of Enterprise Application Architecture
    조영호
    소프트웨어 장인
    현실세상의 TDD
    ATDD
    자바
    스프링
    인프런
    DDD 세레나데
    인프라공방
    백기선
    오브젝트
    java
    fastcampus
    모든 개발자를 위한 HTTP 웹 기본 지식
    마틴 파울러
    JUnit
    추상화
    study
    TDD
    넥스트스탭
    객체지향
    Test Driven Development
    이규원
    nextstep
    장인정신
    스터디
    김영한
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
loop-study
인터넷 네트워크
상단으로

티스토리툴바