본문 바로가기
CS

인터넷 네트워크

by 토니짱 2022. 9. 4.

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

통신하려는 두 개의 컴퓨터는 클라이언트와 서버로 나뉜다.

클라이언트는 정보를 요청하는 컴퓨터

서버는 정보를 요청에 응답하는 컴퓨터이다.

 

통신을 하기 위해서는 어떤 컴퓨터가 요청했고 응답했는지 제대로 알아야 하기 때문에

모든 컴퓨터에 IP주소를 부여한다.

IP는 인터넷 프로토콜이라는 인터넷 세상에서의 규칙이다.

택배를 배송할 때 보내는 이와 받는 이의 주소가 명확해야 택배를 전달할 수 있듯이,

인터넷에서도 통신을 위해서는 서로의 IP를 알고 요청/응답을 해야 한다.

 

IP의 역할

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

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

 

패킷이란?

IP가 택배 배송에서의 주소로 예를 들었을 때, 패킷은 택배 상자라고 보면 편하다.

클라이언트는 IP 패킷이라는 택배를 잘 포장하여 서버에 요청을 던진다.

서버는 클라이언트에게 받은 패킷을 열어보고 클라이언트가 어떤 것을 요청했는지 뜯어서 하나하나 살펴본 후

다시 패킷을 잘 만들어 클라이언트에게 보내주어 응답한다.

 

IP 패킷 정보

데이터는 IP 패킷이라는 규칙에 따라 보내야 한다.

마구잡이로 보내면 클라이언트와 서버가 서로 무엇을 보냈는지 알 수 없기 때문이다.

-출발지 IP

-목적지 IP

-보낼 데이터

-기타 필요한 데이터

규칙에 맞춰 보내면 노드끼리 서로 패킷을 주고받으며 도착지에 도착하게 된다.

데이터를 받은 상대방도 같은 방식으로 잘 받았다는 내용을 전달한다.

 

IP 프로토콜의 한계

-비연결성

  패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷은 전송된다.
  상대방의 상황이 되지 않더라도 무작정 보내버린다.

 

-비신뢰성

  패킷이 중간에 사라지거나 여러 개의 패킷이 순서대로 도착하지 않을 때가 있다.

 

-프로그램 구분

  같은 IP에서 여러 프로그램을 돌리고 있을 때 어떤 곳에 전송해야 하는지 모른다.

 

이러한 문제를 보완하기 위해 존재하는 계층이 있다.

 

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

TCP는 IP에 살짝 TCP를 보완해준다고 생각하면 된다.

만약 채팅 애플리케이션을 만들었다고 예를 들어보자.

먼저 SOCKET 라이브러리를 통하여 OS계층에 'Hello, world!'라는 메시지를 전달한다.

그럼 OS계층에서 전달받은 메시지에 TCP정보를 씌운 후, IP 쪽에 전달하여 IP 정보를 한번 더 씌운다.

이렇게 IP 패킷이 완성되는 것이다. 이렇게 완성된 데이터는 LAN 카드를 통하여 Ethernet Frame을 포함하여 실제 물리 정보까지 포함하여 나가게 된다.

 

TCP/IP에는 무엇이 들어있을까?

TCP 계층에서는 출발지와 목적지의 PORT, 전송 제어, 순서, 검증에 대한 정보가 저장된다.

 

TCP의 특징

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

-신뢰할 수 있는 프로토콜이며 현재 대부분이 사용하고 있다.

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

-데이터 전달 보증

-순서 보장

 

TCP 3 way handshake

상대방과 연결이 됐는지 확인을 한 후에 메시지를 전달한다.

하지만 이건 진짜 연결이 아니라 개념적 연결이 된 상태이다.

(옛날엔 실제로 케이블을 통하여 연결되었는데, 이제는 SYN과 ACK을 주고받은 걸로 연결이 됐다고 가정한다.)

실제로 클라이언트와 서버 사이에 수많은 노드가 있는데 그 많은 노드들이 모두 연결이 됐는지는 모르기 때문에 개념적 연결이라 한다.

연결 과정을 살펴보면 이렇다.

1. 클라이언트에서 서버에게 연결해달라는 의미로 SYN이라는 메시지를 보낸다. (SYN : 우리 통신을 시작하자!)

2. 서버는 잘 받았다는 의미로 ACK와 자기도 연결해달라고 SYN을 보낸다. (SYN+ACK : 오케이! 통신하자!)

3. 클라이언트도 다시 ACK를 보내 받았다는 메시지를 보낸다. (SYN : 알겠어)

4. 연결이 다 된 후에 데이터를 전송한다.

요즘은 최적화가 잘되어있어서 3번 ACK를 보낼 때 데이터를 같이 전송한다.

(SYN은 synchronize sequence numbers의 약자이고 ACK는 acknowledgment의 약자이다.)

3 way handshake를 통하여 메시지를 보낼 때 서로 확인을 통해 패킷이 중간에 누락되었는지 알 수 있다. 

그리고 TCP/IP 패킷 정보에 순서도 함께 보내기 때문에 패킷 순서가 바뀌어서 도착하면 서버가 클라이언트에게 그 직전 패킷부터 다시 보내달라고 요청한다.

 

UDP 특징

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

-TCP의 연결 지향, 데이터 전달 보증, 순서 보장 기능이 없다.

-즉, IP와 거의 같고 PORT와 체크섬(메시지 검증해주는 데이터) 정도만 추가되었다.

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

-애플리케이션에서 추가적인 작업을 필요로 함.

  :최적화가 필요하다면 UDP위에 애플리케이션 레벨에서 뭔가를 만들어내면 된다. 최근 handshake를 하는 과정을 줄여보자는 목적으로       UDP가 각광받고 있다.

 

PORT

IP만으로는 하나의 클라이언트에 여러 서버에서 오는 패킷이 어떤 애플리케이션의 응답인지 알 수 없다.

위의 TCP/IP 패킷 정보 그림을 보면 출발지 PORT와 도착지 PORT를 확인할 수 있다.

PORT는 같은 IP 내에서 프로세스 구분을 위하여 사용된다.

IP는 목적지 서버를 찾는 데 사용되고, 그 안에서 돌아가는 애플리케이션은 포트가 찾아준다고 생각하면 쉽다.

 

PORT 번호

- 0~65535 할당 가능

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

- FTP : 20, 21

- TELNET : 23

- HTTP : 80

-HTTPS : 443

 

DNS(Domain Name System)

컴퓨터끼리 통신을 할 때, 일단 IP를 알아야 한다.

만약 내가 구글에 뭔가 검색을 했을 때, 구글 서버의 IP를 알아야 요청을 보낼 것이다.

그런데 IP는 기억하기 어렵고 변경될 수도 있다.

그래서 중간에 DNS라는 전화번호부 같은 서버를 두고 도메인명을 등록하여 IP주소로 변환할 수 있게 한다.

DNS 서버에 도메인을 구매하여 등록해둔다. 그러면 클라이언트가 도메인 명으로 요청하면 DNS 서버에서 알맞은 IP주소로 응답을 보내주고, 응답받은 IP 주소로 접근하게 된다. 서버의 IP가 추후에 바뀌더라도 DNS 서버는 도메인을 통해 연결해 줄 수 있다.

 

 

반응형

'CS' 카테고리의 다른 글

HTTP 상태 코드  (2) 2022.10.02
HTTP 메서드 활용  (0) 2022.09.25
HTTP 메서드  (0) 2022.09.08
HTTP 기본  (0) 2022.09.05
URI와 웹 브라우저 요청 흐름  (1) 2022.09.04