ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Network] 인터넷 네트워크(IP, TCP, UDP, PORT, DNS)
    Network/HTTP 2024. 4. 10. 13:41
    반응형

    IP

    컴퓨터에 "주소"를 부여하는 것이라고 보면 된다. 클라이언트 컴퓨터가 서버 컴퓨터에 요청을 보낼 때 어떤 컴퓨터에 보낼지 지정해야하고, 그리고 서버 컴퓨터도 클라이언트에 요청에 대한 응답을 보내려면 클라이언트 컴퓨터에 대한 주소를 알아야 할 것이다. 그럴 때 사용하는 것이 IP이다. (우리가 택배를 보내는 것과 비슷하다고 보면 된다. )

    IP 패킷

    IP와 IP가 서로 요청과 응답을 주고 받을 때 패킷이라는 것을 통해 요청과 응답을 주고받는다. 이 패킷에는 요청을 보낸 클라이언트 서버의 ip와 목적지 IP의 서버, 전송 데이터 등의 정보가 들어있다. -> 비유하자면 우체국의 송장과 같은 역할. 

    IP 패킷

    이렇게 패킷 단위로 전송하면 노드들은 목적지 IP에 도달하기 위해 서로 데이터를 전달. 노드는 하나의 서버 컴퓨터를 의미. 이 패킷 단위 전송을 통해 복잡한 인터넷 망 속에서도 정확한 목적지로 패킷이 전송 가능.

    클라이언트로 요청을 받은 서버도 똑같이 IP패킷을 통해 요청에 대한 응답을 전송한다. 

     

    IP 프로토콜의 한계

    • 비연결성: 패킷을 받을 대상이 없거나(목적지 서버가 꺼져있다거나), 서비스가 되지 않는 상태여도 패킷이 전송되는 문제.
    • 비신뢰성: 중간에 패킷이 사라지거나 순서대로 안올 수 있다. (패킷에 담긴 전송 데이터의 크기가 클 경우 여러 패킷에 쪼개 요청을 보내게 되는데, 이때 잘못된 순서로 패킷이 서버에 전달되는 문제가 발생할 수 있다. )
    • 프로그램 구분: 한 서버에서 두 개 이상의 애플리케이션이 돌아가고 있을 때 클라이언트는 어떻게 요청을 보내야할까?(아파트로 생각하면 편하다. 아파트로 택배를 보내는데 동과 호수를 안적는 것과 같은 격)

    ->TCP와 UDP를 통해 해결 가능

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

    IP의 한계를 해결하기 위해 TCP 계층이 위에 하나 덮였다.

    IP 패킷 안에 TCP 세그먼트를 넣어 세부 정보들을 넣어주고 있다. 

     

    TCP

      • 전송 제어 프로토콜(Transmission Control Protocol)
      • 연결 지향 - TCP 3 way handshake(가상 연결) -> 클라이언트와 서버가 연결이 가능한지 아닌지 확인을 먼저 하고 연결 후 요청을 보냄. -> IP의 한계중 하나인 "비연결성"을 해결

    • 데이터 전달 보증: 데이터를 전달 하는 중 패킷이 누락될 경우 클라이언트가 누락을 알 수 있다.
    • 순서 보장 (패킷 1, 2, 3 순서로 와야하는데 1, 3, 2 순서로 왔을 경우 2번부터 다시 보내라고 클라이언트에게 알려줌)
    • 신뢰할 수 있는 프로토콜로 현재는 대부분 TCP를 사용한다.

    UDP

    • 사용자 데이터그램 프로토콜(User Datagram Protocol)
    • 연경지향 x
    • 데이터 전달 보증 x
    • 순서 보장  x
    • 단순하고 빠름
    • -> IP와 거의 같고, Port와 체크섬 정도만 추가됨. -> 애플리케이션에서 추가 작업 필요 
    • 그럼 쓰는 이유? 내가 원하는대로 최적화할 수 있음. 

    Port

    같은 IP(같은 컴퓨터 서버) 내에서 프로세스를 구분하기 위해 사용

    예를 들어 클라우드를 이용해 서버를 배포했을 때 한 서버에서 rds, 스프링부트, redis 애플리케이션을 모두 실행하고 있다고 하고, 그 서버의 ip가 200.200.200.2로 요청을 보냈을 때 이 서버가 스프링부트 애플리케이션에 요청을 받았는지, rds에 요청을 받았는지 등을 구분하기 위해 필요한 것이 바로 port이다.

    한마디로 ip주소가 아파트이고 port가 동 호수라고 생각하면 된다. 예를 들어 스프링부트의 애플리케이션의 포트 번호가 8080이라고 할 때 클라이언트는 200.200.200.2:8080으로 요청을 보내면 된다. 

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

    DNS

    • 도메인 네임 시스템(Domain Name System)
    • ip는 서버가 꺼졌다가 켜지면 바뀔 수 있다. 따라서 등장한 것이 도메인이다.
    • 예를 들어 naver의 도메인은 naver.com이다. 이 naver의 ip는 바뀔 수 있다.
    • 하지만 클라이언트가 바뀔 때마다 계속 다른 주소에 요청을 보내기 힘들 것이다. 예를 들어 naver의 ip주소가 200.200.200.1이었다가, 200.200.200.2로 바뀌면 우리는 주소 입력 창에 200.200.200.2를 쳐야 들어갈 수 있는 것이다. 하지만 DNS를 이용하면 우린 서버 ip가 바뀌던지 말던지 naver.com 으로만 요청을 보내면 언제든지 네이버에 요청을 보낼 수 있다. 

    References

    인프런(김영한) - 모든 개발자를 위한 HTTP 웹 기본 지식(https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard)

    https://velog.io/@starrypro/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%8B%AC%ED%99%94

     

    네트워크 심화 1. IP/IP Packet

    네트워크 심화 현재 코드스테이츠 강의를 통해 프론트엔드를 학습하고 있습니다.본 포스트는 해당 강의에 대한 내용 정리를 목적으로 합니다. 학습목표

    velog.io

    https://creatijin.netlify.app/http/http-01/

     

    웹과 네트워크의 기본 - 01

    웹과 네트워크의 기본 - 01네트워크의 기본은 TCP/IP우리가 일반적으로 사용하는 인터넷과 네트워크는 TCP/IP라는 프로토콜로 움직이고 있다. 그중에 하나가 HTTP다TCP/IP…

    creatijin.netlify.app

     

    반응형

    'Network > HTTP' 카테고리의 다른 글

    [Network/HTTP] HTTP란? HTTP의 동작 과정  (1) 2024.04.10
Designed by Tistory.