SY 개발일지
article thumbnail

인터넷 통신

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

다음과 같이 컴퓨터 2대가 케이블로 연결되어 있다고 해보자.

클라이언트가 Hello, world!라는 요청을 보내면

서버에서 OK라는 응답을 연결한 케이블로 다시 보내면 된다.

이제, 클라이언트와 서버가 멀다고 가정해보자. 그렇다면 인터넷 을 사이에 두고 통신을 하게 된다.

즉, 클라이언트는 인터넷망 을 통해서, Hello world! 라는 메세지를 보내야한다.

근데 이 인터넷망은 간단하지 않다. 예를 들어 중간에 해저 광케이블이 있을 수도 있고, 혹은 메세지가 인공위성을 통해서 내려갈 수도 있고, 수많은 중간 녿드라고 하는 서버를 통해서 메세지를 보내야 한다.

 

그렇다면 어떻게해야 안전하게 데이터를 전달할 수 있을까? 이 문제는 IP 를 알면 해결할 수 있다.

IP(Internet Protocol)

복잡한 인터넷 망

복잡한 인터넷 망에서 누군가에게 데이터를 보내기 위해서는 주소 가 필요하다. 이 주소가 IP 주소가 된다.

IP 주소 부여

우선 클라이언트가 IP 주소가 있어야 한다. 동일하게, 메세지를 받는 서버도 IP 주소가 있어야 한다.

IP 인터넷 프로토콜 역할

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

IP 패킷 정보

메세지는 그냥 보내는 것이 아니라 IP 패킷 이라는 규칙이 존재한다.

IP 패킷이란 메세지, 즉 전송 데이터 Hello world!를 넣을 바구니 같은 것이다. 먼저 현재 나의 출발 IP주소(클라이언트 IP)와 목적 IP주소(서버 IP)를 적는다. 그런 후 패킷을 인터넷망에 던진다.

클라이언트 패킷 전달

패킷이 인터넷망에 던져지면, IP 프로토콜에 의해서 서버들이 모두 그 규약을 따르고 있어 패킷에 적혀있는 출발 IP주소와 목적 IP주소를 인식한다. 그래서 패킷이 목적 IP주소에 다다를때까지 서로 노드들이 해당 패킷을 주고받는다.

서버 패킷 전달

서버가 데이터를 받으면 마찬가지로, 패킷에 출발 IP주소와 목적 IP주소, 그리고 데이터를 담아 인터넷망에 던진다. 그러면 인터넷망에 존재하는 노드들이 목적 IP주소(클라이언트 IP)에 다다를 때까지 패킷을 던져 결국 클라이언트에 패킷이 도착하게 된다.

참고로, 인터넷망이 복잡하기 때문에 데이터를 보낼 때의 경로와 받을 때의 경로가 두 IP가 같다고 하더라도 다를 수 있다.

 

IP 프로토콜의 한계

IP 프로토콜이라고 하는 IP 주소를 부여하고 이걸 찾아가는 방식, 그리고 IP라는 패킷에 담는 방식만 가지고는 한계가 존재한다.

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성
    • 중간에 패킷이 사라지면 ?
    • 패킷이 순서대로 안오면 ?
  • 프로그램 구분
    • 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 ?

대상이 서비스 불능, 패킷 전송

컴퓨터가 꺼져있든, 그렇든 일단 패킷을 보내어

패킷을 열심히 전달해도 받을 수 없다.

패킷 소실

패킷을 보내는 도중, 해당 패킷을 갖고 있는 노드가 꺼진다거나 사라지면 패킷도 함께 사라진다.

패킷 전달 순서 문서 발생

데이터 용량이 커서 데이터를 나누어 보냈을 때, 패킷들이 다른 노드를 타고 가, 나중에 보낸 패킷이 먼저 도착할 수 있다.

이러한 문제를 해결해주는 것이 바로 TCP 프로토콜 이다.

TCP, UDP

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

IP를 TCP 위에 올려 보완해주는 역할을 한다고 이해하면 된다.

프로토콜 계층

쉽게 설명을 하면, 우리가 사용하는 애플리케이션 이 존재하고, 이 애플리케이션은 OS , 즉 리눅스나 윈도우와 같은 운영체제 위에서 작동이 된다. 그리고 그 밑에 실제 네트워크와 관련된 LAN 드라이버, LAN 카드와 같은 네트워크 인터페이스(LAN 장비) 들이 존재하고 있다.

우리가 메세지를 작성하면, TCP로 감싸고, 이것을 또 IP로 감싼다. 그 후 네트워크 인터페이스를 통해서 LAN카드를 통해 나갈 때 Ethernet frame 이 포함되어 나간다.

Ethernet frame이란?

LAN카드에 등록된 MAC주소와 같이 실제 물리적인 정보들이 포함되어 있는 프레임.

IP 패킷 정보

IP 패킷과 같은 경우에는 출발지 IP와 목적지 IP가 있다.

패킷이란 단어는, 진짜 수화물을 뜻하는 패키지와 덩어리를 뜻하는 버킷의 합성어이다.

TCP/IP 패킷 정보

TCP/IP 패킷 안에는 TCP와 관련된 아이디어가 들어가는데, 출발지 PORT, 목적지 PORT, 전송 제어, IP만으로 해결이 안됐던 순서 및 검증 정보 등이 포함이 된다.

 

TCP 특징

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

→ 즉, 뭔가 전송을 할 때에 어떻게 할지를 제어한다.

  • 연결 지향 - TCP 3 way handshake (가상 연결)
    • 출발 IP와 목적 IP를 연결부터 한다. 먼저 연결을 한다면 목적 IP를 가진 컴퓨터가 꺼져 있다거나 하는 것을 방지한다.
  • 데이터 전달 보증
    • 만일 패킷이 중간에 누락이 되거나 한다면, 메시지를 못받았다는 것을 클라이언트가 알 수 있다.
  • 순서 보장
  • 신뢰할 수 있는 프로토콜
  • 현재는 대부분 TCP 사용

TCP 3 way handshake

TCP IP 프로토콜로 연결을 하면, 먼저 클라이언트에서 서버로 1번 Syn(Synchronize) 이라는 메세지를 보낸다. 그러면 서버에서 알았다는 의미로 ACK 라는 메세지를 클라이언트에게 서버도 연결해달라고 하며 보내게 된다. 그러면 또 클라이언트도 알았다는 의미로 ACK 를 보낸다.

즉, 서로 Syn 과 Ack 을 모두 보낸다. 즉 모두 연결이 되어 신뢰할 수 있는 상황이 만들어진다.

이렇게 연결이 성공한 후, 데이터를 전송 한다.

요즈음에는 최적화가 되어 3번 ACK를 보내면서 데이터도 함께 보낸다.

추가적으로 여기서 두 IP가 연결되었다는 것은 개념적 으로 연결되었다는 뜻이지, 물리적으로 연결되었다는 것은 아니다. 물리적으로 연결이 되었다는 표현은 직접 두 IP가 선으로 연결되었다는 것이다. 하지만 TCP 연결은 서로 데이터가 연결되었다는 것을 우리끼리만 연결되었다고 생각하자 ! 라는 느낌이다. 즉, 이것을 위한 랜선이 있는 것은 아니라는 것이다.

데이터 전달 보증

내가 데이터를 보내게 되면, 서버에서 데이터를 잘 받았다는 메세지를 보낸다. 만일 이 메세지가 오지 않는다면 중간에 무슨 문제가 생겼음을 클라이언트는 알 수 있다.

순서 보장

서버에 1번 다음에 3번이 왔다면, 다 버리고 2번부터 다시 보내라는 메세지를 보낸다. 물론 서버에서 정렬하는 등 최적화를 할 수 있지만, 기본적인 개념은 다음과 같다.

이러한 것들은 TCP내에 검증 정보, 순서 정보 등이 담겨져 있기 때문에 가능한 것이다.

UDP 특징

사용자 데이터그램 프로토콜(User Datagram Protocol)

→ UDP는 다음 이미지에서 확인 가능하다시피 TCP와 같은 계층에 존재하는 프로토콜이다.

  • 하얀 도화지에 비유(기능이 거의 없음)
  • 연결 지향 X (TCP 3 way handshake X)
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
    • TCP는 연결하는 데에서 시간이 느리고, 어떤 데이터를 보내는 데에 해주어야 하는 작업처리가 많아 무거운데, UDP는 보다 가볍다고 생각하면 된다. 아무것도 안되어있기 때문에 !
  • 정리
    • IP와 거의 같다. +PORT +체크섬 정도만 추가
      • PORT는 하나의 IP에서 여러 애플리케이션이 실행되고 있을 때 어떻게 특정 패킷이 게임용 애플리케이션인지, 음악용 애플리케이션인지 등을 구분해주는 것이 PORT이다.
      • 체크섬은 이 메세지에 대해서 제대로 맞는지 검증해주는 데이터이다.
    • 애플리케이션에서 추가 작업 필요
  • 요즘에 각광을 받고 있다.
    • 웹 브라우저에서 HTTP통신을 할 때, 최적화를 하기 위해서 TCP 3 way handshakes에서 SYN, SYN+ACK, ACK을 보내는 과정을 줄여보자고 하면서, HTTP 3 같은 경우에 UDP 프로토콜을 사용하며 뜨고 있다.

PORT

한번에 둘 이상 연결해야 하면 ?

하나의 IP에서 여러 프로그램을 돌리고 있을 때 IP만으로는 어떤 프로그램에서 보낸 요청인지 알 수 없다.

TCP/IP 패킷 정보

IP: 목적지 서버를 찾는 것

PORT: 해당 서버 안에서 돌아가는 애플리케이션을 찾는 것

패킷 정보

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

패킷을 전송할 때에 보낸 출발지 IP와 출발 PORT를 이용하여 서버에서 패킷을 다시 전송할 때에 해당 IP와 PORT를 이용하여 목적지를 설정한다.

PORT

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

DNS

IP는 기억하기 어렵다.

IP는 변경될 수 있다.

중간에 바뀌어 버리면 접근을 하지 못한다.

DNS

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

  • 전화번호부
    • 중간에 전화번호부 같은 서버를 제공 해준다.
  • 도메인 명을 IP 주소로 변환
    • 즉, 도메인 명을 등록을 해놓고, 그 도메인을 IP주소로 변환이 가능하다.

DNS 사용

 

profile

SY 개발일지

@SY 키키

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!