HTTP 웹 기본 지식

[HTTP 웹 기본 지식] 섹션 1. 인터넷 네트워크

wlalsu_u 2023. 7. 1. 13:16

1.1  인터넷 통신

 

 

인터넷에서 두 대의 컴퓨터는 어떻게 통신할까?

 

만약 클라이언트와 서버가 가까이 있다면, 단순히 케이블을 연결하여 통신할 수 있을 것이다.

 

 

하지만 메시지를 전달해야하는 PC가 매우 멀리 있는 상황이라면,

 

인터넷 망을 통해서 'Hello, world!' 라는 메시지를 보내야 한다.

 

 

 

 

클라이언트가 보낸 메시지는 해저 광 케이블, 인공위성과 같은 수 많은 중간 노드들을 거쳐 서버로 전송된다. 

 

그렇다면 메시지는 복잡한 인터넷 망에서 어떻게 목적지까지 안전하게 도착할 수 있는 것일까?

 

 

 


 

1.2  IP (인터넷 프로토콜)

 

 

복잡한 인터넷 망에서 메시지를 안전하게 보내려면,

최소한의 규칙이 필요할 것이다. 

 

이는 IP 주소를 통해 가능해진다.

 

 

 

 

클라이언트가 서버에 메시지를 전송하는 상황이라고 가정해보자. 

 

1) 먼저 클라이언트가 IP 주소 (100.100.100.1) 를 부여받는다. 

2) 메시지를 보내야 하는 서버도 IP 주소 (200.200.200.2) 를 갖고 있어야 한다.

 

 

 

이때 IP 인터넷 프로토콜은

 

1) 지정한 IP 주소에 데이터를 전달한다.

2) 데이터는 패킷이라는 단위로 전송된다. 

 

 

 

IP 패킷의 구조를 보면 다음과 같다. 

 

 

IP 패킷은 마치 주소를 적듯이

현재 나의 IP와 목적지 IP를 적어 데이터를 전송한다.

 

 

 

 

출발지와 목적지 IP주소를 패킷에 넣고 인터넷에 던지면,

중간 노드들과 서버는 같은 규약을 따르고 있으므로,

전송된 데이터들이 수 많은 노드들을 거쳐 최종적으로 서버에 도착하게 된다. 

 

 

 

 

서버가 메시지를 받으면,

동일하게 출발지와 목적지 IP를 넣은 후, OK라는 메시지를 함께 담아서 보낸다.

서버와 클라이언트 사이의 노드들은 패킷을 적절하게 던져, 최종적으로 클라이언트에 도달할 수 있도로 한다.

 

 

 

이때, 클라이언트가 서버에 요청할 때와

서버가 클라이언트에게 응답할 때 서로 다른 망을 사용할 수 있다.

 

 

 

IP 프로토콜의 한계

 

1) 비연결성

 

: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송

즉 패킷을 받아야 하는 상대방의 PC 가 꺼져 있더라도 패킷을 보내게 된다.

 

대상이 서비스 불능, 패킷 전송

 

 

2) 비신뢰성

 

: 중간에 패킷이 사라지거나 순서대로 오지 않을 수 있다.

 

패킷 소실

 

패킷이 노드를 따라 이동하다가 소실되더라도, 패킷이 전송되었는지 확인할 수 없다.

 

 

패킷 전달 순서 문제 발생

 

패킷의 용량이 커지면, 일반적으로 한 패킷을 1500 바이트씩 끊어서 보내게 된다.

 

이때 각각의 패킷들이 서로 다른 노드로 갈 수 있으므로,

최종적으로 서버에 도착하는 패킷 순서가 바뀔 수 있다.

 

 

 

 

3) 프로그램 구분

 

: 만약 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 때 이를 구분할 수 없다.

 

예를 들어 한 PC에서 게임을 하면서 음악도 듣는 등 여러개의 프로세스를 돌릴 수 있다.

하지만 IP 프로토콜 만으로는 여러 개의 프로세스를 구분할 수 없다. 

 

 

 


 

1.3  TCP, UDP

 

 

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

인터넷 프로토콜 스택을 4개로 구분하면,

네트워크 계층, 인터넷 계층, 전송 계층, 애플리케이션 계층으로 나뉘어진다.

 

인터넷 계층인 IP 위에 TCP 를 추가하면

앞선 IP 프로토콜의 한계점을 보완할 수 있다. 

 

 

 

프로토콜 계층

 

 

채팅 프로그램으로 미국에 있는 친구에게 메시지를 전송한다고 가정해보자.

 

1) 소켓 라이브러리를 통해 OS 계층에 메시지를 보낸다.

2) 이때, 메시지에 TCP 정보를 (녹색) 을 추가하여 보낸다.

3) 앞선 데이터에 IP 데이터를 더해 IP 패킷을 생성한다.

    (IP 패킷은 IP, TCP, 메시지 정보를 모두 포함하고 있다.)

4) 이더넷 프레임을 포함하여 LAN 카드로 나가게 된다.

 

 

 

TCP/IP 패킷 정보

 

 

1) IP 패킷은 출발지 IP와 목적지 IP를 갖고 있다.

2) IP 패킷 안에 TCP 와 관련된 정보가 추가로 들어간다.

    출발지 PORT, 목적지 PORT, 전송 제서, 순서 등이 들어감 (뒤의 TCP 특징이 가능해짐)

 

 

 

 

TCP (Transmission Control Protocol) 특징

: 어떤 방식으로 전송할지 제어하는 프로토콜

 

 

 

1) 연결 지향 - TCP 3 way handshake (가상 연결)

 

 

TCP/IP 프로토콜은 메시지를 전송하기 전에, 먼저 연결하는 과정이 있기 때문에

상대 PC 가 꺼져있는 경우를 클라이언트가 확인할 수 있다.

 

1) 클라이언트에서 서버로 SYN 메시지를 보낸다.

2) 서버에서 메시지를 받으면 ACK와 SYN 을 보낸다.

3) 서버의 메시지가 도착하면, 클라이언트에서 ACK를 보낸다. (이때 함께 데이터 전송 가능)

4) 연결이 완료되었으므로, 데이터를 전송한다.

 

 

이와 같은 TCP 방식을 사용하면, 클라이언트도 서버를 신뢰할 수 있고,

서버도 클라이언트를 신뢰할 수 있게된다.

 

이러한 방식은 클라이언트와 서버가 개념적으로 연결된 것이고, 

물리적으로 연결된 것은 아니다.

 

 

 

 

2) 데이터 전달 보증

 

클라이언트가 데이터를 전송하면, 서버는 데이터를 잘 받았다는 것을 알려준다.

따라서 데이터 전송 여부를 클라이언트가 확인할 수 있다.

 

 

 

 

3) 순서 보장

클라이언트가 패킷을 1,2,3 순서대로 보냈지만, 서버에게 순서가 잘못 도착한 경우,

앞선 패킷들을 모두 버리고 패킷 2번부터 다시 보내라고 이야기한다.

(더 최적화 하는 방법은 있음)

 

 

4) 신뢰할 수 있는 프로토콜

 

5) 현재는 대부분 TCP 사용

 

 

 

 

UDP (User Datagram Protocol) 특징

 

1) 하얀 도화지에 비유 (기능이 거의 없음)

2) 연결지향 X - TCP 3 way handshake X

3) 데이터 전달 보증 X

4) 순서 보장 X

5) IP에 PORT가 추가됨

6) 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름

 

 

[UDP 정리]

1) IP와 거의 같지만 PORT와 checksum 정도만 추가
2) 애플리케이션에서 추가 작업 필요

 

 


 

1.4  PORT

 

 

만약 클라이언트가 한번에 두개 이상의 서버에 연결하는 경우는 어떨까?

 

PC가 게임, 화상통화를 하면서 동시에 웹 브라우저를 요청한다고 가정해보자.

IP 패킷을 전송받게 되지만, IP만으로는 어디서 오는 패킷인지 구분하기 어렵다.

 

 

 

패킷 정보

 

따라서 TCP/IP 패킷에는 IP 뿐만 아니라

출발지와 목적지의 PORT 번호가 추가된다.

 

 

 

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

 

 

PORT 번호는 같은 IP내에서 프로세스를 구분해주는 역할을 한다.

이를 위해 게임, 화상통화, 웹 브라우저 요청 프로세스마다 각각 다른 포트 번호를 할당한다.

 

즉 IP가 아파트면, port는 몇 동 몇 호인지를 알려주는 것과 유사하다. 

 

 

[port 번호는 0 ~ 65535 할당 가능]

0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
(FTP - 20, 21 TELNET - 23 HTTP - 80 HTTPS - 443)

 

 


 

1.5  DNS

 

 

IP의 문제점

 

1) IP는 기억하기 어렵다.

2) IP는 변경될 수 있다.

 

 

 

DNS (Domain Name System)

 

1) 전화번호부와 같은 서버 제공

2) 도메인 명을 IP 주소로 변환

 

 

DNS 사용

 

 

DNS 서버에 등록을 해놓으면,

먼저 도메인을 찾고 그에 따른 IP를 응답해준다.

이후 응답 IP 주소를 통해 클라이언트는 서버에 접속할 수 있다.