CS/HTTP

[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 1

haenni 2023. 11. 27. 19:33

👩‍💻 인터넷 네트워크


 

 

📌 인터넷 통신

 

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

 

만약에 내 PC가 전달해야 하는 PC가 굉장히 멀리 있으면 인터넷망이라는걸 통해서 메세지를 보내야 한다.

하지만 인터넷은 단순하지 않아  수 많은 중간 노드라고 하는 서버를 거쳐서 메세지가 도착하게 된다. 

그럼 도대체 어떤 규칙으로 어떻게 넘어갈까 ?

 

📌 IP(인터넷 프로토콜)

✏️IP (인터넷 프로토콜)

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

IP 주소 부여
IP 패킷 정보

메세지를 그냥 보내는 것이 아니라 IP 패킷 이라는 규칙이 있다.(나의 IP, 미국에 있는 친구IP, 기타 . . . , 전송데이터)

 

클라이언트 패킷 전달

IP 프로토콜에 의해서 서버들이 규약을 따르고 있기때문에 (목적지IP, 출발지IP 등)다 이해를 하며 노드끼리 던진다. 

서버 패킷 전달

미국 친구의IP도 똑같이 던진다.

 

"IP 프로토콜의 한계"

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송(친구가 컴퓨터를 꺼놔도 보냄, 근데 나는 모름)

  • 비신뢰성
    • 중간에 패킷이 사라지면?
    • 패킷이 순서대로 안오면?
      • 메세지가 1500바이트를 넘으면 이것을 끊어서 보내게 되는데 헬로가 1500바이트, 월드가 1500바이트라고 했을때 나는 Hello를 먼저 보내고 world를 보냈지만 Hello와 World가 무수히 노드를 타면서 World가 먼저 도착할 수도 있다.
  • 프로그램 구분
    • 한 PC에서 게임도 하고 음악도 듣고 이러면 IP가 같아 여러 애플리케이션이 같은 IP를 쓰고있는데, 이건 어떻게 구별 할 것인가 ? 하는 한계

 

 

 

 

 

 

📌 TCP, UDP

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

IP라는거를 TCP에 살짝 올려서 그걸 보완해 주는 역할을 한다고 이해하면 됨

"프로토콜 계층"

  • 소켓 라이브러리를 통해서 OS 계층에 "Hello"라는 메세지를 넘긴다.
  • OS계층에서 TCP가 "Hello"라는 메세지에 TCP 정보를 씌운다.
  •  TCP 정보를 씌운 위에 밖에 IP 정보를 씌우게 된다. => IP 패킷 생성됨
  • IP패킷이 생성 되었고 네트워크 인터페이스를 통해서 Ethernet frame을 통해서 나가게 됨 

 

✏️TCP/IP 패킷 정보

TCP 정보에는 전송 제어, 순서, 검증등이 추가 되면서 IP에서 해결이 안 됐던 순서 제어등의 문제가 해결 된다

 

✏️TCP 특징

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

  • 연결지향 - TCP 3 way handshake (친구와 연결이 되어있는지 먼저 확인 후 메세지를 보냄)
  • 데이터 전달 보증 (전송 메세지가 누락되면 내가 알 수 있음)
  • 순서 보장
  • 신뢰할 수 있는 프로토콜

🔍"TCP 3 way handshake"란?

: 이렇게 3 way handshaking을 하면 클라이언트도 서버를 믿을 수 있고, 서버도 클라이언트를 믿을 수 있으며 SYN, SYN+ACK, ACK 세번 주고 받음. 그럼 두 곳에서 연결이 되었음을 인식하고 바로 그 다음 데이터를 전송함 (서버가 꺼져있을시, 처음 SYN을 보냈을 때 서버에서 SYN,ACK 요청이 없을 것)

 

SYN: 접속 요청 (SYN이라는 메세지를 보냄 "나 연결해줘")

ACK: 요청 수락("알았어", 메세지를 클라이언트에 보내면서 SYN을 보내며 "나도 연결해줘")

ACK:("알았어" - 연결)

 

 

🔍"데이터 전달 보증" 및 "순서 보장"

데이터 전달 보증

: TCP IP에서는 내가 데이터를 보냈을 때 서버에서 잘 받았다고 나한테 보내줌. 서버에서 아무 응답이 없으면 서버가 데이터를 못 받은 것

 

순서 보증

: 기본적으로 1번다음 2번이 와야하는데 3번이 왔을 경우, 다 버리고 패킷 2번부터 다시 보낸다.

 

 

 

 

✏️UDP

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

 

  • 하얀 도화지에 비유(기능이 거의 없음)
  • 연결지향 - TCP 3 way handshacke 도 없음
  • 데이터 전달 보증, 순서 보장 안됨 (데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름)
  • 정리
    • IP와 거의 같지만 PORT가 추가되며, (내가 하나의 PC로 여러개의 동작을 할때 (ex) 게임을 하면서 음악을 들음, 내 IP로 여러 패킷이 오게 되는데 게임용 포트, 음악용 포트 등으로 구분 해줄 때 쓰는듯? )체크섬이 추가된다 (메세지에 대해서 제대로 맞는지 검증해주는)
    • 애플리케이션에서 추가 작업 필요 

 

 

 

 

 

 

 

📌 PORT

✏️PORT란 무엇인가?
:
port는 영어로 항구라는 뜻으로, 같은 IP 내에서 프로세스를 구분하는 것

: 예를 들어서 우리의 PC에서 게임을 하면서도 화상통화를 하고, 웹 브라우저 요청도 하고있다. 이렇게 되면 한 번에 하나의 클라이언트가 여러개의 서버와 통신해야한다. 하지만 서버에서 패킷이 날아올텐데, 이것이 게임에서 필요한 패킷인지, 웹 브라우저 요청에서 응답 결과로 오는 패킷인지 알 수 없다(보낼때도 마찬가지).

 

: 전에 봤던 TCP 정보를 보면 출발지 PORT, 목적지 PORT라는 것이 있다. 이것은 IP에 PORT라는 개념도 있는 것 이다.

 

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

: 정리를 해보면 같은 IP내에서 프로세스를 구분하는 것이 포트이다.

게임은 8090 포트, 화상통화 21000포트, 웹 브라우저 10010 포트에 연결해놓고 목적지 포트를 11220 포트로 연결하여 보낸다. 

 

 

예시를 들자면 아파트는 IP고 한 사람이 사는 ~호, 가 포트라고 할 수 있다. 

 

 

 

 

 

 

 

 

📌 DNS

✏️DNS란?

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

  • IP는 100.100.100.1, 200.200200.2.?? 등으로 IP는 길어서 기억하기가 어렵고, 변경이 될 수 있다.
  • DNS는 도메인 명을 이러한 IP 주소로 변환하는 것을 말한다. 
  • DNS 서버에 도메인을 등록할 수가 있다.
    • 도메인을 사서 등록하면 클라이언트가 먼저 도메인으로 찾게 되고 DNS서버가 이것을 응답해준다.

 

 

 

 

 

"인터넷 네크워크 정리"
복잡한 인터넷 망을 통해서 메세지를 보내기 위해선 인터넷 프로토콜이라고 하는 IP가 있어야하는데 이 IP 프로토콜만으로는 메세지가 잘 도착했는지 등을 알수도 없고 PORT도 없다. 이런거에 대한 TCP 프로토콜이 해결해준다.
그리고 UDP라는 것도 있엇는데 UDP는 PORT만 추가된 IP라고 할 수있다.
PORT는 같은 IP안에서 동작하는 통신할 애플리케이션을 구분하기 위해서 사용하고, DNS는 IP는 변하기 쉽고 기억하기 어려워 도메인 명으로 등록해서 쉽게 사용할 수 있도록 도와준다.