HTTP

1. 인터넷 네트워크

zuun 2022. 7. 26. 20:17

인터넷에서 컴퓨터간의 통신은 어떻게 이루어지는 것일까 ?

초등학교에서 종이 컵과 실을 가지고 전화기를 만들어본 경험을 떠올려보자.

이 전화기를 통해, 조금 떨어져있더라도 의사소통이 가능했다. 

이를 인터넷 통신에 비유해보면, 종이컵은 컴퓨터이고, 실은 인터넷 망이 된다.

이렇게 두루뭉실하게는 이해가 되지만, 정확히 어떠한 방식으로 통신이 이루어지는지 알 수 없다.

이를 이해하기 위해서는 인터넷의 기초부터 공부할 필요가 있다.


IP(Internet Protocol)

노드로 이루어진 복잡한 인터넷 망에서, 컴퓨터간 통신을 하기 위해 필요한 통신 규약을 말한다.

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

패킷은 내 IP주소, 상대방 IP주소, 데이터 등으로 구성되어 있다.

간단히 설명하자면, 패킷이 인터넷 망에 올라가면 패킷 내에 존재하는 상대방 IP주소를 찾아 데이터가 전달되는 것이다.

 

IP의 한계

 비연결성

상대방이 데이터를 전달받을 수 없는 상태일지라도, 패킷을 전송한다.

ex) IP주소가 올바르지 않거나, 해당 IP가 인터넷에 연결되어있지 않는 상태

비신뢰성

1. 인터넷 망에서 패킷이 전송되던 중, 유실될 수 있다. 

A만 도착할 수 도있고, B만 도착할 수 도있다. 혹은 둘 다 도착하지 않을 수 있다.

2. 패킷의 전달 순서가 보장되지 않는다. (순서가 뒤바뀔 수 있다)

즉, 데이터 A와 B를 순서대로 전송한다고 해서, 데이터가 순서대로 도착한다는 것은 아니다.

 프로그램 구분

하나의 컴퓨터에서 실시간 음악 스트리밍과 온라인 게임을 하고 있다고 가정해보자.

컴퓨터의 IP주소는 동일하기 때문에, 두 애플리케이션에서는 해당 IP주소로 데이터를 전송한다.

패킷으로 수신된 데이터를 어떤 프로그램에 사용해야되는지 구분할 방법이 없다 !

 

이러한 단점들을 TCP를 통해 해결할 수 있다 !


TCP(Transmission Control Protocol)

TCP를 설명하기에 앞서, 전체적인 흐름을 이해하기 위해서는 인터넷 프로토콜 스택의 4계층을 알 필요가 있다.

애플리케이션 계층 - HTTPS, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층

애플리케이션에서 데이터가 전송되는 순서는 다음과 같다.

1. 애플리케이션 계층에서 데이터를 생성하여, Socket 라이브러리를 통해 전송 계층으로 전달한다.

2. 해당 데이터를 포함하여, TCP 정보(PORT, 전송 제어, 순서, 검증 등)를 생성한다.

3. 전송 계층에서 만들어진 데이터 + TCP 정보를 포함하여, 앞서 배운 IP 패킷을 생성한다.

4. 애플리케이션의 데이터 + TCP 정보 + IP 패킷을 네트워크 인터페이스 계층(LAN 장비)를 통해 전송된다.

 

TCP의 특징

● 연결지향

상대방과의 연결이 되었는지(데이터를 주고 받을 수 있는 상태) 확인 후, 데이터를 전송한다.

A와 B 컴퓨터가 존재하고, A에서 B 컴퓨터로 데이터를 전송하고자 할 때, 아래의 절차(3 way handshake)로 이루어진다.

1. A가 B에게 접속 요청(SYN)

2. B가 A의 요청 수락(ACK) 및 접속 요청(SYN)

3. A가 B의 요청 수락(ACK)

4. 데이터 전송

  ※ 3단계에서 A가 B의 요청을 수락하면서, 데이터를 전송하기도 한다.

 

위의 1~3 절차가 성공적으로 이루어지지 않았을 경우, 데이터 전송을 보류한다.

 

IP의 비연결성 문제 해결 !

● 데이터 전달 보증 및 순서 보장

데이터를 전송하여, 상대방이 해당 데이터를 정상적으로 수신하였는지 알 수 있다.

*데이터를 수신한 컴퓨터에서 메세지 전송

패킷의 순서를 검증하여, 순서가 올바르지 않은 경우 데이터 재전송을 요청한다.

*설계 로직에 따라 다르지만, 일반적으로 순서가 꼬인 패킷부터 전송 요청

 

TCP 정보 내에 검증, 순서 정보 등이 존재하기 때문에 가능한 것이다.

 

IP의 비신뢰성 문제 해결 ! (신뢰할 수 있는 프로토콜)


UDP(User Datagram Protocol)

사용자 데이터그램 프로토콜로써, 일반적으로 하얀 도화지에 비유할 수 있다.

즉, 기능이 거의 없다는 뜻이다. 이러한 UDP가 왜 나오게 되었는지를 알아보기 전에, 특징을 알 필요가 있다.

UDP의 특징

● 연결 지향 X
● 데이터 전달 보증 및 순서 보장 X
● 단순하고 빠름 (3 way handshake가 없기 때문에)

기존의 IP 기능에서 PORT와 체크섬이 추가된 UDP는 IP와 거의 동일하다고 볼 수 있다.

그렇다면, 이러한 UDP는 왜 사용하는 것일까 ?

TCP는 이미 3 way handshake 등 여러 기능이 구축되어있기 떄문에 전송 속도를 높이고자 할 때 방법이 없다.

하지만, UDP는 하얀 도화지와도 같기 때문에, 개발자가 필요한 기능을 추가하여 사용하면 된다.


PORT

앞서, IP의 경우 프로그램 구분에 있어서 문제가 있었다. 

이를 해결할 수 있는 것이 PORT이다.

동일한 IP 주소의 프로세스를 PORT를 이용하여 구분하는 것이다. 

PORT는 0 ~ 65535까지 할당 가능하며, 0 ~ 1023은 잘 알려진 포트로써, 사용하지 않는 것이 좋다.


DNS (Domain Name System)

IP의 주소는 기억하기 어렵고, 변경될 수 있다.

도메인 명을 IP 주소로 변경해주는 것이 DNS이다.

우리가 인터넷 주소 창에 도메인 명을 입력하면, DNS 서버에서 이에 할당된 IP를 반환해준다.

이러한 방식으로 IP 주소를 외우고 있지 않아도, 특정 서버에 접속하여 통신할 수 있는 것이다.