no image
[HTTP] URI와 웹 브라우저 요청 흐름
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. URI URI, URL, URN URI 내부에 URL, URN이 포함되어 있다. URI는 로케이터(Locator), 이름(Name) 또는 둘다 추가로 분류될 수 있다. URI (Uniform Resource Identifier) Uniform : 리소스 식별하는 통일된 방식이다. Resource : URI로 식별할 수 있는 모든 걸 자원이라고 한다. 웹 브라우저에 있는 HTML의 파일 것만 자원을 뜻하는 게 아니라 실시간 교통 정보 등등 이런것도 자원이라고 한다. Idenrifier : 다른 항목과 구분하는 데 필요한 정보이다. 사람을 식별할 때 주민등록번호를 식별 하는 것처럼 말한다. URL (Uniform ..
2024.02.06
no image
[HTTP] 인터넷 네트워크
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다. 인터넷 통신 인터넷망에서 컴퓨터들은 어떻게 통신할까? 클라이언트가 한국에 있고 서버가 먼 곳에 있다면 한국에 있는 클라이언트가 'Hello, world'라는 메시지를 보내야 하는데 데이터의 출발지와 도착지 사이에 수많은 중간 노드라고 하는 서버들을 걸쳐서 다른 곳에 있는 서버에게 안전하게 메시지가 도착해야 한다. 어떤 규칙으로 다른 곳에 있는 서버에게 안전하게 도착할 수 있는지 이해를 하려면 IP 프로토콜을 알아야 한다. IP 인터넷 프로토콜 IP 주소 부여 IP(인터넷 프로토콜) 역할 지정한 IP 주소(Address)에 데이터 전달 패킷(Packet)이라는 통신 단위로 데이터 전달 클라이언트에게 IP 주소, ..
2024.02.05

이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.


URI

URI, URL, URN 

URI 내부에 URL, URN이 포함되어 있다.

URI는 로케이터(Locator), 이름(Name) 또는 둘다 추가로 분류될 수 있다. 

URI (Uniform Resource Identifier) 

  • Uniform : 리소스 식별하는 통일된 방식이다. 
  • Resource :  URI로 식별할 수 있는 모든 걸 자원이라고 한다. 웹 브라우저에 있는 HTML의 파일 것만 자원을 뜻하는 게 아니라 실시간 교통 정보 등등 이런것도 자원이라고 한다.
  • Idenrifier : 다른 항목과 구분하는 데 필요한 정보이다. 사람을 식별할 때 주민등록번호를 식별 하는 것처럼 말한다.

 

URL (Uniform Resource Locator) 

  • Locator : 리소스가 있는 위치를 지정한다. 

 

URN (Uniform Resource Name)

  • Name : 리소스에 이름을 부여한다. 

 

위치는 변할 수 있지만 이름은 변하지 않는다.

 

URN이 이름으로 실제 리소스가 결과 나올수 있어야 하는데, 이름만으로는 찾기가 어렵다.

 

그래서 URN은 보통 잘 사용되지 않는다. 따라서 URI = URL 으로 통용되기도 한다.

 

URI 전체 문법

scheme://[userinfo@]host[:port][/path][?query][#fragment]
https://www.google.com:443/search?q=hello&hl=ko
  • scheme

주로  프로토콜 사용한다. 어떤 방식으로 자원에 접근할 것인가 하는 클라이언트와 서버 간의 약속 규칙이라고 보면 된다. 

http : 80 / https : 443 / ftp : 20, 21 주로 사용한다.

https는 http에 강력한 보안 추가로 적용된거다.  (HTTP Secure)

 

  • userinfo

URL에 사용자정보를 포함해서 인증해야 할 때 있는데 거의 사용하지 않는다.

 

  • host

호스트명이라고 한다. 보통 도메인명이나 IP 주소를 직접 사용 가능하다.

 

  • port

접속 포트이다. 일반적은 웹 브라우저에서는 생략을 많이 하지만 특정 서버에 따로 접근 할 때는 port를 입력을 한다.

 

  • path
/home/file1.jpg  -> home 이라는 경로에 file1.jpg가 있다.
/members  -> 회원들에 대한 정보를 보여주는 경로이다.
/members/100, /items/iphone12  -> 100번의 회원의 정보, 아이템 중에 아이폰12 정보 경로이다.

리소스가 있는 경로이자 계층적 구조로 되어 있다. 

 

  • query

key와 value 형태로 데이터가 들어가 있다.

?keyA=valueA&keyB=valueB

query는 ?로 시작하고 &로 추가적으로 query string를 입력한다.

숫자를 적어도 다 문자 형태로 넘긴다 해서 query string이라고 부르기도 한다. 

 

  • fragment
https://docs.spring.io/spring-boot/docs/current/reference/html/getting-
started.html#getting-started-introducing-spring-boot

HTML 내부에서 중간에 이동하고 싶을 때 북마크 등에 사용한다. 잘 사용하지 않고 서버에 전송하는 정보 아니다.

 

웹 브라우저 요청 흐름

1. URL을 입력한다. 

2. DNS 서버로 IP를 찾아내고 생략된 PORT는 scheme로 찾아낸다. 

3. 웹 브라우저가 HTTP 요청 메시지를 생성한다.

 

4. SOCKET 라이브러리를 통해서 TCP/IP로 IP와 PORT 정보를 찾은 것을 3 way handshake 방식으로 서버와 연결을 한다.

5. HTTP 요청 메시지는 OS에 있는 TCP/IP 계층으로 전달한다.

6. TCP/IP 계층에서 HTTP 요청 메시지에 패킷으로 감싼다.

7. 웹 브라우저가 만든 요청 패킷을 서버에서 도착하면 패킷을 열어서 HTTP 요청 메시지를 확인해서 서버가 해석한다.

 

8. 서버가 HTTP 응답 메시지를 만들어서 TCP/IP 패킷을 감싸서 클라이언트에게 도착하면 클라이언트는 패킷을 열어서 HTTP 응답 메시지를 확인해서 해석한다. 

 

9. 웹 브라우저가 HTML 렌더링을 해서 클라이언트가 HTML 결과를 볼 수 있다.

'네트워크 > HTTP' 카테고리의 다른 글

[HTTP] 상태코드  (1) 2024.02.10
[HTTP] HTTP 메서드 활용  (1) 2024.02.09
[HTTP] HTTP 메서드  (1) 2024.02.08
[HTTP] HTTP 기본  (1) 2024.02.07
[HTTP] 인터넷 네트워크  (1) 2024.02.05

이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.


인터넷 통신

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

클라이언트가 한국에 있고 서버가 먼 곳에 있다면 한국에 있는 클라이언트가 'Hello, world'라는 메시지를 보내야 하는데 데이터의 출발지와 도착지 사이에 수많은 중간 노드라고 하는 서버들을 걸쳐서 다른 곳에 있는 서버에게 안전하게 메시지가 도착해야 한다.

어떤 규칙으로 다른 곳에 있는 서버에게 안전하게 도착할 수 있는지 이해를 하려면 IP 프로토콜을 알아야 한다.

 

IP 인터넷 프로토콜

IP  주소 부여

IP(인터넷 프로토콜) 역할

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

클라이언트에게 IP 주소, 서버에게도 IP 주소가 있어야 하고 서버에게 'Hello, world!' 메시지를 보낼 때 최소한의 규칙이 있어야 보낼 수 있는데 패킷이라는 규칙으로 보내야 한다.

 

IP 패킷 정보

메시지에 패킷의 정보인 출발지 IP와 목적지 IP 등등을 넣고 보내는데 IP 프로토콜에 의해서 서버들이 규약을 따르고 있다. 

 

클라이언트 패킷 전달

인터넷망에서 내가 보낸 패킷을 서로 노드들끼리 출발지가 어디고 목적지가 어디인지 알고 서버 IP 주소인 200.200.200.2 까지 정확하게 도착한다.

 

서버 패킷 전달

 

서버도 마찬가지로 새로 메시지를 만들어서 메시지에 패킷의 정보인 출발지 IP와 목적지 IP 등등을 넣고 클라이언트에게 보내는데 클라이언트가 보낼 때랑 서버가 보낼 때랑 인터넷 망이 복잡하기 때문에 서로 다른 곳으로 전달 될 수 있다. 그래서 IP라는 패킷에 담는 방식으로는 한계가 있다. 

 

IP 프로토콜의 한계

비연결성

미국에 있는 서버가 PC가 꺼져 있는 것도 모르고 클라이언트는 계속 메시지를 보내게 된다.

 

그래서 패킷을 받을 대상이 없거나 서비스불능 상태여도 패킷은 계속 전송한다.

 

비신뢰성 

서버들이 전달하는 사이에서 한 서버가 문제가 생겨서 패킷이 유실 될 수 있다.

 

메시지를 한 번에 보낼 때 보통 1500byte가 넘어가게 되면 보통 나눠서 보낸다.


두 개의 패킷을 나눠서 보내는데 인터넷 망안에 있는 노드들을 통해서 패킷마다 노드를 각각 선택을 해서 따로 따로 보내게 되는 상황이 오다보니 클라이언트가 보낸 메시지 순서가 서버가 받은 메시지 순서와 상이하게 된다.

같은 IP 내에 프로그램 미 구분

  • 클라이언트에서 게임도 하고 음악도 듣고 여러가지 프로그램으로 같은 IP로 쓰고 있는데 어떤 프로그램에 필요한 데이터인지 구분되지 않아 한계가 있다.

 

TCP/ UDP

프로토콜 4계층

IP 프로토콜에서 중간에 패킷이 손실되고 순서가 상이한 문제들을 TCP 프로토콜이 해결해준다.

 

'Hello world!' 라는 메시지를 보낼 때 SOCKET 라이브러리를 통해서 OS계층에서 TCP 정보를 감싼다.

 

그 밑에 IP 패킷이 생성되서 IP와 관련된 정보도 있고 그 안에 TCP와 관련된 정보가 있다.

 

이 메시지를 랜카드를 통해서 나갈 때 Ethernet frame을 포함해서 나가게 된다. 

 

Ethernet frame : 램 카드에 등록된 맥주소의 물리적인 정보

 

TCP/IP 패킷 정보

TCP와 관련된 정보에는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등이 들어 간다.

 

IP 프로토콜에서 해결이 안된 순서 제어 문제들이 TCP 프로토콜이 해결이 되고 전송 데이터를 넣게 된다.

 

TCP(Transmission Control Protocol)의 특징

TCP 3 way handshake (가상 연결)

  • SYN(synchronize) : 접속 요청
  • ACK(acknowledge) : 요청 수락

 

  1. 클라이언트에서 먼저 SYN 메시지를 서버에게 접속을 허락해달라고 요청한다.
  2. 서버는 접속을 수락하고 ACK 메시지를 클라이언트 한테 보낼 때 서버도 접속을 허락해달라고 SYN 메시지와 함께 보낸다.
  3. 클라이언트가 접속을 수락하고 서버에서 ACK 메시지를 보낸다.
    참고로 요즘 최적화가 잘 되서 마지막 ACK를 보낼 때 데이터도 전송한다.

 

이렇게 3단계를 거쳐 연결이 되고나면 데이터를 전송한다.  

 

위에 TCP 연결이 되었다고 연결이 된 게 아니라 논리적으로 연결되어 있을 뿐이다.

 

인터넷 망에 있는 수 많은 서버들은 이 둘이 연결되어 있는 건지 알 수 없다. 

 

데이터 전달 보증

메시지에 TCP 프로토콜이 포함되어 있으면 메시지를 전송할 때 서버에서 잘 받았다고 다시 보내는데 클라이언트가 메시지를 잘 전달 됐는지 안됐는지 알 수 있다. 

 

순서보장

메시지가 1500byte가 넘어서 패킷을 1번, 2번, 3번 순서로 나눠서 보냈다.

 

서버에서 1번, 3번, 2번 순서로 도착을 하면 내부적으로 최적화하는 로직에 따라서 2번부터 다시 보내라고 클라이언트에게 요청할 수 있다. 그렇기 때문에 순서가 보장이 된다.

 

또는 서버측에서 내부적으로 순서를 올바르게 정렬할 수도 있다.

 

순서대로 보낼 수 있는 이유는 TCP 정보 안에는 전송 제어, 순서, 검증 정보가 있어서 TCP 프로토콜이 신뢰할 수 있는 프로토콜이라고 한다.

 

UDP(User Datagram Protocol)의 특징

  • TCP 3 way handshake X
  • 데이터 전달 보증 X
  • 순서 보장 X
  • PORT 정보 O
  • 체크섬 정보 O

TCP는 데이터 양도 많고 3 way hands 때문에 전송 속도가 느린 반면에 UDP는 아무것도 없기 때문에 상대적으로 전송 속도가 빠르다.

 

클라이언트 PC에서 IP가 한 개만 할당되어 있어 있는데 게임용, 음악용 등 구분하기위해 PORT를 사용하고 메시지에 대해서 맞는지 검증해 주는 체크섬 특징이 있다.

 

PORT

클라이언트에서 게임도 하고 화상통화도 하고 웹 브라우저도 하고 있으면 여러 개의 서버랑 통신 해야 된다.

 

PORT 번호를 모르면, 클라이언트 IP에서 패킷이 올텐데 어떤 프로그램에게 온 패킷인지 알 수가 없다.

 

즉, IP 주소를 통해 아파트 앞까지는 왔는데 몇호인지 알 수 없는 것이다.

 

PORT 정보를 알면 어떤 프로그램에게 온지 알 수 있다.

 

즉, 몇호인지 알 수 있는 것이다.

 

TCP/IP 패킷 정보

위에 봤던 TCP/IP 패킷 정보에 TCP와 UDP에서 출발지 PORT와 목적지 PORT가 있다.

 

IP는 목적지 서버를 찾는 용도이고 서버 안에서 돌아가는 애플리케이션들을 구분하는게 PORT이다. 

 

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

같은 IP 내에서 프로세스를 구분하는 게 PORT 이다. 

  • [클라이언트] 게임 : 8090 ↔ [서버] 게임 : 11200
  • [클라이언트] 화상통화 : 21000 ↔ [서버] 화상통화 : 32202
  • [클라이언트] 웹 브라우저 : 10010 ↔ [서버] 웹 브라우저 : 80

 

위와 같이 예시처럼 각각 클라이언트와 서버 안에 맞는 PORT 번호를 찾아서 연결하면 된다.

여기서 패킷을 보낼 때 IP와 PORT를 포함해서 보낸다.

PORT 번호

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

 

DNS

IP 주소의 문제점

IP를 가지고 서로 통신을 할 수 있지만 IP가 숫자로 되어 있어서 다 기억하기가 어렵다.

 

그리고 IP가 바뀌는 일이 많아져서 접속이 안되는 경우가 생긴다.

 

DNS (Domain Name System)

이러한 문제를 해결하기 위해 DNS 가 생겼다.

 

도메인을 사기 위해서 DNS 서버에 도메인을 등록을 할 수 있다.

 

클라이언트가 DNS 서버에다가 도메인에 맞는 IP를 달라고 요청을 하면 DNS 서버가 응답을 하고 클라이언트는 서버에 도메인으로 접속할 수 있다.

 

나중에 IP가 변경 되면 DNS 서버에 등록된 도메인에 IP를 변경을 할 수있다.

'네트워크 > HTTP' 카테고리의 다른 글

[HTTP] 상태코드  (1) 2024.02.10
[HTTP] HTTP 메서드 활용  (1) 2024.02.09
[HTTP] HTTP 메서드  (1) 2024.02.08
[HTTP] HTTP 기본  (1) 2024.02.07
[HTTP] URI와 웹 브라우저 요청 흐름  (1) 2024.02.06