공부/HTTP

인터넷 네트워크

Stair 2025. 1. 14. 12:36
반응형

- 인터넷 통신

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

클라이언트PC와 서버의 PC가 아주 먼 곳에 떨어져 있다고 생각해보자,

서울에서 뉴욕으로 통신을 해야하는 상황이다.

이런 상황에서는 인터넷 망을 통해 통신을 해야 한다. 그런데 이 인터넷 망은 단순하지 않다.

 

중간에 해저 광케이블이 있을수도 있고, 인공위성을 통해 송수신 할 수 도 있으며, 수많은 중간 노드들을 거쳐 뉴욕에 도착할 수 있다.

그럼 대체 어떠한 규칙으로 어떻게 넘어갈까?

이걸 이해하려면 IP에 대해 알아야 한다.

 

 

- IP(Internet Protocol)

이런 복잡한 인터넷 망에서 뉴욕에 있는 사람에서 Hello, world를 보내야 할때 최소한의 규칙이 있어야 한다. 이건 IP 주소를 통해서 가능해진다.

 

클라이언트인 나와 상대방이 IP 주소를 부여받았다.

 

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

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

- 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.

 

메세지를 보낼 때 그냥 보내는 것이 아닌 IP 패킷이라는 규칙에 메시지를 담아 전송하게 된다.

 

이 상태로 인터넷 망에 메시지를 던지게 되면

프로토콜 규약을 따르고 있는 노드(서버)들이 목적지를 찾아가게끔 노드들이 서로 던지며 뉴욕에 있는 친구에게 도달하게 된다.

반대의 상황 또한 마찬가지이다.

* 참고 : 인터넷 망은 복잡하기 때문에 송수신 시 항상 같은 노드를 거치진 않는다.(인터넷 망이 복잡하기 때문에)

 

IP 프로토콜의 한계

- 비연결성

  - 패킷을 받을 대상이 없거나, 서비스 불능 상태여도 패킷을 전송한다.

- 비신뢰성

  - 중간에 패킷이 사라지면?

  - 패킷이 순서대로 오지 않으면?

- 프로그램 구분

  - 같은 IP를 사용하는 서버에 통신하는 애플리케이션이 둘 이상이면?

 

- TCP, UDP

TCP : IP 프로토콜의 한계(패킷 소실, 패킷 순서, 비연결성) 등을 TCP 프로토콜을 통해서 해결할 수 있다.

인터넷 프로토콜 스택의 4계층은 위와 같다.

실제 사용시엔 이렇게 볼 수 있다.

 

내가 만약 채팅 프로그램으로 뉴욕에 있는 친구에게 hello world라는 메시지를 보내고 싶다고 가정해보자. 

 

보내지는 순서는 다음과 같다.

1. 소켓 라이브러리를 통해 OS 계층에 Hello 메시지를 넘긴다.

2. 그럼 이 OS 계층에서 TCP가 Hello라는 메시지에 TCP 정보를 하나 감싸고, IP계층으로 내린다.

3. IP계층에서는 IP에 관련된 데이터를 한겹 더 감싼다. -> 이렇게 IP 패킷이 생성되게 된다.

4. 이 IP 패킷이 네트워크 인터페이스의 LAN 장비를 통해 나갈때 이더넷 프레임이라는게 포함되서 나간다.

 

* Ethernet frame(이더넷 프레임) : 랜 카드에 등록된 MAC주소와 같은 물리적인 정보들이 포함되어 있다.

 

 

IP 패킷 : 출발지의 IP, 목적지의 IP, 기타 정보들이 포함되어 있다

TCP 패킷 : 출발지의 PORT, 목적지의 PORT, 전송 제어, 순서, 검증 정보 등이 들어있다.

 

위와 같은 형태의 패킷이 전송되게 되는 것이다.

 

TCP 특징

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

- 연결 지향 - TCP 3way handshake

- 데이터 전달 보증

- 순서 보장

- 신뢰할 수 있는 프로토콜

- 현재는 대부분 TCP 사용

 

 

현결 지향(TCP 3 way handshake)

TCP 프로토콜로 연결을 하게 되면 다음과 같은 과정을 거친다. 이것을 TCP 3way handshake라고 한다.

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

2. 서버가 메시지를 받게 되면 ACK라는 응답에 SYN을 포함하여 보낸다

3. 클라이언트가 ACK로 응답하게 된다.

 

-- 3way handshake는 개념적으로 연결이 된 것이다. 중간에 수 많은 서버들은 모른다.

**참고

SYN : 연결 요청

ACK : 요청 수락

 

 

데이터 전달 보증

또한 TCP 프로토콜은 데이터 전달을 보증해준다. 데이터를 전송하면, 서버에서 데이터를 잘 받았다고 응답을 해준다.

 

 

순서 보장

TCP 프로토콜은 패킷을 보낸 순서를 보장해준다.

만약 1, 2, 3 순서로 보냈을 때 만약 서버에 1, 3, 2 순서로 도착을 하게 된다면, 순서가 잘못된 패킷을 다 버리고 패킷 2부터 보내라는 요청을 하게 된다. 클라이언트는 이걸 받고 다시 순서대로 패킷을 전송한다.

 

 

이런 여러 기능을 할 수 있는 이유가 무엇일까?

앞서 보았듯이 TCP 패킷 속엔 출발지의 PORT, 목적지의 PORT, 전송 제어, 순서, 검증 정보 등이 들어있기 때문에 신뢰성 있는 프로토콜이다.

 

 

UDP 특징

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

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

- TCP 3way handshake X

- 데이터 전달 보증 X

- 순서 보장 X

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

- 정리

  - IP와 거의 같다. + PORT + 체크섬 정도만 추가된다.

  - 애플리케이션에서 추가 작업이 필요하다.

 

* PORT : PORT를 통해 하나의 IP에서 여러 애플리케이션이 동작할 수 있도록 해준다.

 

 

- PORT

만약 클라이언트 하나에 두개 이상을 연결하고 싶을 땐 어떻게 해야할까?

게임도 하면서, 웹도 보고, 음악도 듣고 여러가지 일을 병렬적으로 수행하는 것이다.

만약 이 상태면 여러개의 패킷이 동시에 송수신되고 있다.

 

이전에 봤던 TCP/IP 패킷 정보에는 출발지 PORT, 목적지 PORT가 있다.

 

IP는 목적지의 서버를 찾는 것이고,

PORT는 목적지 서버 안에서 돌아가는 애플리케이션을 구분하기 위해 사용한다.

 

위의 그림을 보면 게임은 8090포트를 화상통화는 21000포트를, 웹 브라우저는 10010포트를 사용한다.

내가 만약 웹브라우저를 사용 한다면 IP 200.200.200.3의 80포트를 사용할거야 라고 패킷을 쏘게 된다. 반대로 웹브라우저 서버에서는 HTML을 만들어서 나한테 응답을 하는데 100.100.100.1의 포트 10010번에 보내게 된다.(처음 패킷을 보낼 때 출발지 IP와 출발지 PORT의 값까지 포함하여 보내기 때문에 응답할 때 이걸 사용한다.)

 

IP가 아파트이면 PORT는 ~동~호 이다.

 

포트는 다음과 같다

0 ~ 65535 : 할당 가능

0 ~ 1023 : 잘 알려진 포트, 사용하지 않는것이 좋음

  - FTP : 20, 21

  - TELNET : 23

  - HTTP : 80

  - HTTPS : 443

 

 

- DNS

사실 IP는 기억하기 어렵다. 또한 IP는 변경될 수 있다. IP는 수동으로 할당받을 수 있기 때문이다.

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

- 전화번호부와 비슷

- 도메인 명을 IP 주소로 변환한다.

 

DNS 서버에 도메인을 등록할 수 있다.

여기에 도메인 명을 등록하여 사용할 수 있다.

 

도메인 명을 검색하면 DNS 서버가 그 도메인 명에 맞는 IP를 응답한다. 그럼 클라이언트는 그 IP에 맞는 서버에 접속하면 되는 것이다.

반응형

'공부 > HTTP' 카테고리의 다른 글

HTTP 상태 코드  (0) 2025.01.20
HTTP 메서드 활용  (0) 2025.01.17
HTTP 메서드  (0) 2025.01.16
HTTP 기본  (1) 2025.01.15
URI와 웹 브라우저 요청 흐름  (0) 2025.01.14