1. 인터넷 네트워크 - 모든 개발자를 위한 HTTP 웹 기본 지식

Yejung·2022년 9월 14일
0

인터넷 통신

Q. 인터넷에서 컴퓨터 둘은 어떻게 통신할까??

Q. 복잡한 인터넷 망을 따라 전하려는 정보가 어떻게 넘어갈까??????

A. IP를 학습해보자


IP(인터넷 프로토콜)

IP의 역할

  • 지정한 IP 주소(IP Address)에 데이터 전달
  • 패킷이라는 통신 단위로 데이터 전달

IP 패킷 정보

  • 출발지 IP + 도착지 IP + ...기타
  • 메시지

클라이언트 패킷 전달

  1. 클라이언트가 인터넷망에 패킷 전달
  2. 노드끼리 패킷 던지기
  3. 도착지(서버)에 도착

서버 패킷 전달

  1. 서버가 인터넷망에 패킷 전달
  2. 노드끼리 패킷 던지기
  3. 도착지(클라이언트)에 도착

IP 프로토콜의 한계

  • 비연결성

    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송 (무지성 던지기...🙀)
    • ex) 미국에 친구가 받을 수 있겠지? 하고 패킷 던졌는데 컴퓨터가 꺼져 있을수도...
  • 비신뢰성

    • 중간에 패킷이 사라지면? (패킷 소실)
    • 패킷이 순서대로 안오면..? (메시지가 길면 끊어서 나눠서 보내는데 123으로 나눠서 보냈을때 321 순서로 도착한다면...?)
  • 프로그램 구분

    • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면...?

이 문제를 해결하는 것이 TCP, UDP



TCP, UDP

인터넷 프로토콜 스택의 4계층

[ 애플리케이션 계층 - HTTP, FTP ]
[      전송 계층 - TCP, UDP     ]
[        인터넷 계층 - IP       ]
[    네트워크 인터페이스 계층    ]

📌 Hello, world! 전송하기 프로세스

애플리케이션
1. 프로그램이 Hello, world! 메시지 생성
2. socket 라이브러리를 통해 전달

OS
3. TCP가 받은 메시지 데이터 포함해서 TCP 정보 (TCP 세그먼트)생성
4. TCP 정보 포함한 IP 패킷 생성

네트워크 인터페이스'
5. 이더넷 프레임 포함해서 LAN카드로 정보 내보내기

TCP 세그먼트

  • 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 ...

  • 데이터를 TCP 세그먼트가 감싸고 TCP 세그먼트를 IP 패킷이 감싼 형태

TCP(Transmission Control Protocol) 특징

: 전송 제어 프로토콜

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

    • 일단 연결을 하고 메시지를 보낸다 (서비스 불능 상태 해결)
  • 데이터 전달 보증

    • 패킷 누락을 알 수 있다
  • 순서 보장

  • 신뢰할 수 있는 프로토콜

  • 현재는 대부분 TCP 사용

TCP 3 way handshake

  1. 클라이언트 ➡ 서버 : SYN(synchronized) 메시지 전송
  2. 서버 ➡ 클라이언트 : SYN + ACK(okok 알겠어)
  3. 클라이언트 ➡ 서버 : ACK(okok 알겟삼)
    • 이 때 ACK와 함께 데이터 전송도 가능
  4. 데이터 전송

(SYN: 접속요청, ACK: 요청 수락)

⭐ TCP 3 way handshake는 가상연결 (그냥 우리끼리 연결이 됐다 생각하자...! 물리적이 아니라 논리적으로 연결된 것)

데이터 전달 보증

  1. 데이터 전송
  2. 데이터 잘 받았음! 이라고 응답을 보내준다.

순서 보장

  1. 패킷1, 패킷2, 패킷3 순서로 전송
  2. 패킷1, 패킷3(❌), 패킷2(❌) 순서로 도착
  3. 클라이언트야, 패킷2부터 다시 보내렴😑

💡 TCP 데이터(세그먼트) 안에 전송 제어, 순서, 검증 정보들이 모두 담겨져 있기 때문에 가능!!!

UDP(User Datagram Protocol) 특징

: 사용자 데이터그램 프로토콜

  • 하얀 도화지에 비유(기능이 거의 없음...)

  • 연결지향 - TCP 3 way handshake ❌

  • 데이터 전달 보증 ❌

  • 순서 보장 ❌

  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름

  • 정리

    • IP와 거의 같다 + PORT + 체크섬 정도만 추가
      • 한 PC에 여러 패킷이 올 때 구분하는 것 ➡ PORT
      • 체크섬 : 이 메시지에 대해서 검증해주는 데이터
    • 애플리케이션에서 추가 작업 필요

Q. 이걸 왜 쓰지???

➡ TCP 하는 일도 많고 데이터도 많다
➡ TCP 프로토콜은 손을 못댐 (이미 인터넷이 모두 TCP로 사용하는중)
➡ UDP는 내가 커스텀 가능 !
➡ 최근 각광받는다


PORT

하나의 클라이언트랑 여러 서버와 연결해야 한다면?
(ex. 게임하면서 화상통화하고 웹 브라우저 요청하기)

➡ 같은 IP 내에서 프로세스 구분

IP가 아파트라면 PORT는 몇 동 몇 호

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


DNS

문제 1. IP는 기억하기 어렵다 😡

문제 2. IP는 변경될 수 있다 😡


## 도메인 네임 시스템 (Domain Name System)
  • 마치 전화번호부
  • 도메인 명을 IP 주소로 변환

DNS 사용

  1. 도메인을 사서 DNS 서버에 등록

ex)

도메인 명IP
google.com200.200.2
aaa.com210.210.210.3
  1. google.com 을 주소창에 입력하면 DNS 서버에 해당 도메인 명의 IP를 달라고 함
  2. 응답 : IP 주소
  3. 서버에 IP 주소 전송해서 접속
profile
이것저것... 차곡차곡...

0개의 댓글