[Network] 인터넷 네트워크란?

jinni·2022년 12월 12일

Network

목록 보기
1/1

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

하나의 컴퓨터는 요청을 보내고, 하나의 컴퓨터는 응답을 해줄 것이다. 요청과 응답 사이에 수많은 노드로 이루어진 인터넷 망이라는 것이 존재하는데, 이 망을 통해 서로 송수신하는 것이다.

🫤 그렇다면, 단순하게 요청만 보내면 응답을 받을 수 있을까?

전제 조건이 있다! 바로 IP(Internet Protocol, 인터넷 프로토콜) 주소를 부여하는 것이다. 막말로 아무것도 없이 다른 컴퓨터에 요청을 보낼 수는 없는 거니까. 주소 같은 게 필요할 것임!!!

IP가 뭐하는건데.

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

IP 패킷의 정보는 요청 보내는 컴퓨터의 IP, 요청을 받는 컴퓨터의 IP, ... 등 전송 데이터를 가지고 있다. 이 IP패킷을 가지고 인터넷 망안에서 존재하는 노드끼리 IP를 받을 수 있는 녀석을 찾아다니면서 계속 서로 넘겨주다가 도착하는 것이다.

뭐든, 단점이 존재하듯이 IP 프로토콜도 한계점이 존재한다.

  1. 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷이 전송된다.
  2. 비신뢰성
    • 중간에 패킷이 사라지거나, 패킷이 순서대로 오지 않는다면? 요청을 보낸 사람은 알 수 없다.
  3. 프로그램 구분
    • 같은 IP를 사용하는 어플리케이션이 두 개 이상이라면? 어떻게 구분할 건데????

이러한 단점을 보완하기 위해 TCP(Transmission Control Protocol)가 등장한다.

📍TCP

인터넷 프로토콜은 아래와 같이 4계층으로 이루어져 있다.

이 중 전송 계층에 존재하는 것이 TCP 다. 애플리케이션 계층으로부터 요청을 받아 TCP에서 감싸지고 IP에서 감싸지고 네트워크 인터페이스를 통해 서버에 도착한다.

그럼, TCP 에 대해 자세히 알아보자.

TCP 특징 😵‍💫

  1. 연결 지향
    TCP 3 way handshake 를 통해 클라이언트와 서버를 가상 연결을 통해 연결 성공 여부를 알 수 있다. (물리적 연결이 아닌, 논리적 연결)

    TCP 3 way handshake 란, 클라이언트가 SYN 이라는 요청을 보내면, 서버는 SYN + ACK 로 응답해준다. 이후 클라이언트는 또 ACK 를 보낸다. 그럼 상호 송수신이 완료된 것이니, 연결이 됐다는 걸로 인식해서 데이터를 전송하게 되는 방식이다. (SYN: 접속 요청, ACK 요청 수락)
    (클라이언트 쪽에서 ACK와 함께 데이터를 함께 전송할 수도 있다.)

  2. 데이터 전달 보증
    중간에 패킷이 유실되면, 클라이언트가 인지할 수 있다. 서버가 데이터를 잘 받았다고 응답해주기 때문이다. 왜냐고? TCP 세그먼트로 인해서.

  3. 순서 보장
    요청 순서에 따라 다르게 도착한다면, 디폴트로 잘못된 순서부터 다시 보내는 것이다.
    ...

즉, 초반에 설명한 IP 프로토콜의 한계점을 보완해주는 녀석이다.

TCP 패킷PORT, 전송 제어, 순서, 검증 정보, ... 등 다양한 전송 데이터를 가지고 있다. 이를 TCP 세그먼트라고 한다. 그리고 위에서 감싸진다는 표현을 사용했는데, IPTCP 를 감싸준다고 했다. IP 패킷은 초반에 IP 주소값을 가지고 있다고 언급했었다.

즉, TCP/IP 패킷은 IP, PORT, 전송 제어, 순서, 검증 정보 등을 가지고 있는 패킷이 되는 것이다.

하지만, 이녀석도 단점이라는 것이 있다. 뭐냐고?

TCP 단점

  1. 속도가 느리다.
  2. 최적화를 할 수 없다. (이미 많은 웹 브라우저가 사용하기 때문에 쉽게 건드릴 수 없음)

그래서 요즘 각광 받는 것이 UDP 다.

UDP란 무엇일까 🤭

UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜) 는 TCP 와 같은 계층이지만, 기능이 거의 없다. 즉, IP와 똑같다고 볼 수 있다. (PORT, 체크섬 존재)

체크섬: 메시지가 있는 지 간단하게 검증

아무런 기능이 존재하지 않기 때문에 속도는 TCP 보다 상대적으로 빠르다.

왜 각광 받는 건데?

TCP 는 속도가 상대적으로 느리고, 최적화를 할 수 없어 UDP 를 통해 최적화를 진행하기 때문이다. 대신, 애플리케이션 단에서 추가 작업을 진행해야 한다.

📍 PORT

하나의 컴퓨터에서 여러 개의 어플리케이션을 실행하는 과정 속에서 어떻게 구분할 것인가에 대해 궁금증을 가질 수 있다.

예를 들어, IP 200.200.200.1 에서 게임(80)과 영상 통화(200) 두 가지를 진행한다고 하면 어떻게 구분하냐는 것이다. 이 구분을 바로 PORT 로 구분한다. (80, 200 이 포트번호라고 예를 든 것.)

클라이언트 쪽에서 각각 애플리케이션에 PORT를 매기고 서버에 요청을 보내면, 서버도 본인이 매기고 있는 PORT를 연결시켜준다. 그래서 애플리케이션을 서로 구분할 수가 있는 것이다.

PORT 특징

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

📍 DNS

IP는 변경될 수 있고 웹에 접속하기 위해 해당 IP를 매번 입력하는 것은 매~~~우 번거로운 일이다. 그래서 존재하는 것이 DNS(Domain Name System) 이다.

이녀석은 도메인명을 IP 주소로 변환해준다.

도메인명은 우리가 흔히 알고 있는

  • www.naver.com
  • www.google.com

과 같은 것들이다.

클라이언트가 도메인 명으로 요청을 보내면 DNS는 해당 도메인을 IP 주소로 변환해 응답을 주고 클라이언트는 서버에 해당 IP를 가지고 접속하게 된다.

이 글은 인프런 - 모든 개발자를 위한 HTTP 웹 기본 지식 (김영한) 강의 내용을 바탕으로 정리한 글 입니다.

profile
조금씩 천천히 꾸준하게

0개의 댓글