JAVA & SPRING/HTTP 웹 기본 지식

HTTP 웹 기본 지식 - 1일차(인터넷 네트워크)

눈오는1월 2023. 8. 2. 15:12
728x90

이번 강의는 김영한 님의 모든 개발자를 위한 HTTP 웹 기본 지식을 듣는다.

내가 Django 로 여러 해커톤 및 대회에 나가고 또 온좋게 2번에 대회에서 입상을 했지만, 통신 부분과 값을 주고받는 부분에 대해서 깊이 있는 학습을 하지 못했고, 그저 일단 돌아가게만 하려고 노력했는데 이번강의에서 조금이나마 이론적인 부분들을 이해하는 시간이 되었으면 좋겠다. (네트워크 수업 재수강도..잘해서 A0를...)

 

인터넷 네트워크에는

  • 인터넷 통신
  • IP(인터넷 프로토콜)
  • TCP,UDP
  • PORT
  • DNS

이렇게 있다. 이걸 하나씩 간단하게 정리해보도록 하자

 

클라이언트와 서버가 데이터를 주고 받을때 단순히 데이터를 바로 보내는 것이 아니라 인터넷에 많은 노드들이 있고 인터넷을 통해 값을 주고받는다. 그리고 데이터를 주고받을 때 규격이 존재하는데 이러한 규격들이 다 존재한다.

 

1.IP(인터넷 프로토콜)

각각의 컴퓨터에는 IP 주소가 있다

인터넷 프로토콜은 지정한 IP 주소에 데이터를 전달하고 패킷이라는 통신 단위로 데이터를 전달한다.

(쉽게 예로 들어서 설명하자면, 우리가 택배를 보낼때 주소에 물건만 띡하고 보내는 것이 아니라 박스에 넣어서 주소를 적고 그걸 보내는 것처럼 인터넷에서는 패킷을 통해 값을 보낸다)

IP 패킷 정보에는 출발지 IP, 목적지 IP,기타 등등의 정보가 있고, 전송 데이터와 같이 전달 된다.

이 패킷이 전달하고 받으면 받았다고 받은 신호를 보낼때 서로 다른 곳을을 통해 전달 받을 수도 있다. (아래그림처럼)

클라이언트 패킷 전달 과정과 서버 패킷 전달 과정이 서로 다를 수도 있음

이러한 IP 프로토콜의 한계는

  • 비연결성
  • 비신뢰성
  • 프로그램 구분

이 존재한다.

비연결성은 상대방 컴퓨터가 꺼져있어도 패킷이 전송되는 상태를 말하는 것으로 말 그대로 연결되어있는지 모른다

비신뢰성은 패킷이 중간에 사라지거나 순서대로 도착안될 수도 잇는 것이다.

프로그램 구분은 같은 IP를 사용하는 서버에 통신하는 애플리케이션이 2 이상일때는 구분이 안된다

 

이러한 IP 프로토콜의 한계점을 보완해주는게 TCP, UDP 이다.

 

2. TCP,UDP

TCP,UDP를 알아보기 전에 일단 프로토콜 계층부터 알아보

프로토콜 계층

이런식으로 되어있고 이 게층의 동작방식은

프로토콜 계층 동작 방식

위 그림 처럼 보통 메세지를 보낼때 SOCKET 라이브러리를 사용하는데 해당 라이브러리를 사용해 메세지를 만들고, 

TCP 정보를 데이터에 포함하고 그 위를 IP 패킷으로 감싼뒤에 LAN을 통해 서버에 보내진다. 

(해당 물건을 뽁뽁이로 감싸고 박스로 감싸고 택배를 보내는 거처럼? 물론 여기에서 뽁뽁이가 다른 정보들도 가지고 있음 비유상)

즉, IP 패킷안에는 TCP 세그먼트가 들어간다. 이러한 세그먼트 안에는 출발지 PORT, 목적지, 목적지 PORT, 전송 제어 , 순서 , 검증 정보의 내용이 드어가 있어서 IP 한계점을 해결한다

이러한 TCP(Transmission Control Protocol)의 특징으로는 아래 3가지 특징이 있다.

  • 연결지향 (TCP 3 way handshake (가상연결))
  • 데이터 전달 보증
  • 순서 보장

이러한 TCP 특징으로 TCP는 신뢰할 수 있는 프로토콜이며 현재는 대부분 TCP를 사용한다.

 

TCP 3 way handshake란 무엇이냐면

TCP 3 way handshake

 

위 그림처럼 서버가 컴퓨터가 꺼져있는지 연결을 하면 반응할 수 있는 상태인지 확인을 하는데 쓰이는데

먼저 클라이언트가 서버에 SYN을 보낸다

그럼 서버는 SYN과 ACK을 보내고 클라이언트는 ACK을 보낸 후 데이터를 전송한다. (서로 SYN 과 ACK을 한번씩 주고받는다)

이러한 과정을 TCP 3 way handshake라고 한다.(요즘엔 최적화가 돼서 3번쨰 ACK을 보낼때 데이터를 같이 보낼 수 도 있다.)

현실세계에서 비유를 하면 내가 공부잘하는 친구(A)한테 무엇을 물어볼때

1.  나 ) 나 이것좀 물어봐도됨?

2.  A) ㅇㅇ 물어보삼

3. 나) ㅇㅋ 그럼 나 지금 물어본다

하고 물어보는 상황인거 같다.

 

근데 이러한 연결이 개념적으로 연결되어있는 것이지 인터넷 안에 있는 노드들은 연결이 된지 모른다

(한마디로 전용 랜선이 보장된 것이 아니고 논리적으로 연결됐구나 라고 생각하면 됨)

 

데이터 전달 보증이란 IP 프로토콜에서는 상대방이 데이터를 잘 받았는지 아닌지 모르지만 데이터 전달 보증을 통해서 상대방에게 잘 받았다고 응답을 주는 것이다( 현실세계 비유 -> 온라인 구매 후 받기 완료 버튼 클릭)

 

마지막으로 순서 보장에서는 데이터가 커서 패킷1, 패킷2, 패킷3 나눠서 온다 했을때 , 만약 패킷1 다음 패킷 3 패킷 2 순서로 오면 패킷2부터 다 버리고 패킷2부터 다시보내라고 클라이언트에 요청을 한다.( 물론 서버에서 최적화를 내부에서 일어날 수도 있긴한데 이론상 그렇다)

 

위 3가지 특징으로 TCP를 신뢰할 수 있는 프로토콜이라고도 표현을 한다.

 

UDP(User Datagram Protocol) 의 특징을 알아보면

TCP의 모든 특징들이 존재하지 않는다(연결지향 x, 데이터 전달 보증 x, 순서 보장 x)

그래서 IP와 거의 같은데 IP 프로토콜에 + PORT 와 체크섬 정도만 추가 되어있어서 애플리케이션에서 추가 작업이 필요하다.

그래서 UDP를 하얀 도화지에 비유를 한다 (기능이 거의 없어서)

 

이러한 특징으로 UDP 장점은 일단 빠르고, 데이터 양도 그만큼 작다.

또 TCP는 이미 전세계에 구축되어있어서 건드릴 수 없고 최적화를 하려면 UDP를 이용하면 된다. 

(최근에는 HTTP3가 나오면서 UDP 프로코톨을 사용하면서 뜨고있다 -> 더 최적화 해보자 이런 마인드 인거 같다)

 

3. PORT

 

TCP, UDP를 설명하면서 PORT라는 단어가 많이 나오는데 PROT를 해석하면 배가 도착하는 항구의 의미로 PROT를 통해 하나의 IP에서 둘 이상의 서버에 연결이 가능하다 

하나의 클라이언트가 여러개의 서버를 연결할때 PORT를 통해 구분을 할 수 있음

PORT는 0 ~ 65535 번호 중에서 할당이 가능하다. 근데 0 ~ 1023 포트는 잘 알려진 포트라 사용하지 않는 것이 좋다

 

IP와 PORT에 대해서 현실세계로 비유하자면 IP는 아파트이고 PORT는 몇동 몇호 이러한 개념이다.

 

4.DNS(Domian Name System)

 

DNS는 전화번호부 같은 특징이 있다. 이게 무슨 말이냐면

IP는 기억하기 어렵다. 200.xxx.xxx.x 이런식으로 되어있는데 당장 우리도 우리가 쓰는 컴퓨터나 노트북 IP를 기억하지 못하는 것처럼 말이다. 

또한 IP는 변경될 수도 있다.

 

DNS 와 클라이언트 서버 연결 과정

 

클라이언트는 DNS 서버에 도메인 명을 통해 IP를 가져오고 받아온 IP를 통해 서버와 연결을 한다

만약 서버의 IP연결이 바뀌면 DNS 서버에 IP 주소만 바꾸면 된다.

 

728x90