본문 바로가기

Server

[Server] 인터넷 통신 | 인터넷에서 컴퓨터는 어떻게 통신할까? | 패킷, IP프로토콜

728x90

 

컴퓨터는 어떻게 인터넷으로 통신을 하는 걸까?

 

만약 내 컴퓨터와 미국에 있는 컴퓨터가 통신을 해야한다면, 어떻게 멀리있는 컴퓨터와 통신을 하는걸까?

 

중간에 복잡한 인터넷 망을 통해서 통신을 한다. 인터넷 망은 단순하지 않다. 중간에 해저 광케이블이 있을 수도 있고, 중간에 노드라고 하는 수많은 서버들을 거쳐서 멀리있는 컴퓨터와 통신을 하게 된다. 대체 멀리 있는 곳까지 어떻게 안전하게, 어떠한 규칙으로 넘어가는 것일까?

 

패킷과 IP 프로토콜

 

패킷이라는 것에 출발지 ip주소, 목적지 ip주소, 전달하고자하는 정보를 넣어서 보내게 된다. 이렇게 ip주소로 데이터를 전달하고, 이런식으로 패킷에 담아 보내는 규칙을 ip프로토콜이라고 한다.

 

 

그럼 패킷은 어떻게 보내지는가? 패킷은 인터넷망 안에 노드들을 거쳐서 전달된다. 패킷은 ip프로토콜(ip로 데이터 보내는 규칙)을 지키고 있는데, 중간에 있는 노드들도 다 IP프로토콜을 지키고 있기 때문에 노드들도 패킷을 다 이해한다. 그래서 노드들이 패킷에 있는 목적지 IP주소를 찾을 때까지 서로 서로 보내준다. 

 

그러면 드디어 미국에 있는 컴퓨터(서버)에서 메시지(Hello world!)를 받았다. 그러면 서버는 내 컴퓨터(클라이언트)로 잘 받았다고 메시지를 보내주는데 같은 방식으로 패킷을 만들어서 보내준다. 예를들어, ok 메시지를 담아서 보낸다고 하면 패킷에 출발ip(서버 ip), 목적지ip(클라이언트 ip), 메시지(ok)를 담아서 던진다. 그러면 또 노드를 타고 목적지를 찾아서 클라이언트로 전해진다. 

 

노드를 타고 ok를 전달할 때, Hello world를 받을 때와 똑같이 동일한 노드를 거치지는 않는다. 인터넷망은 매우 방대하고 보낼 때마다 다른 노드로 거쳐올 수 있기 때문이다. 

 

이렇게 내가 원하는 데이터(메시지)를 IP프로토콜에 따라 잘 전송하고 있지만, 한계가 있다.

 

IP프로토콜의 한계는 무엇인가?

1. 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송. 대상 서버가 패킷을 받을 수 있는 상태인지 모름.

상대방 컴퓨터(서버)가 꺼져있어도 그냥 보낸다. 인터넷망에서 열심히 거쳐서 보내도 마지막에서 받을 수 없다. 그러면 나는 잘 보냈는 줄 알았는데 알고보면 상대방은 못 받은 것이다. 보내는 게 실패했어도 나는 모르게 된다.

 

2. 비신뢰성 : 패킷 소실. 중간에 패킷이 사라질 수도 있음, 패킷이 순서대로 오지 않을 수 있음.

노드끼리 던지는 중에 어떤 한 노드가 꺼지면, 패킷이 날아간다. 예를들어 갑자기 광케이블을 누가 긁어먹어서 끊긴다면 소실 될 수 밖에 없다. 

메시지가 약 1500바이트가 넘으면 패킷을 끊어서 보낸다. 예를들어 Hello, world!가 3000바이트라면, 1. Hello, 2. world! 를 쪼개서 보내게 된다. 만약 이렇게 따로 보낼 때, 1과 2가 무조건 같은 노드를 탈거라는 보장이 없다. 그래서 만약 2가 노드를 빨리타서 빨리 도착하게 된다면, 나는 Hello, world!라고 보냈지만 상대방은 world! Hello, 라고 받을 수 있다는 문제가 있다.

 

3. 프로그램 구분 : 한 pc에서 여러 어플리케이션을 쓴다면? 한 PC에서는 하나의 IP만 사용하고 어플리케이션들도 다 같은 IP이다. 만약 내 IP로 패킷이 온다면, 이 패킷이 어느 어플리케이션에 온 건지 어떻게 구분할까? 

 

이를 해결하기 위해서 등장한 것이 바로 TCP, UDP이다.

 

 

 

 

 

 

 

모든 개발자를 위한 HTTP 웹 기본지식 을 토대로 이해한 내용을 정리한 글입니다 🙂

 

참고 자료

모든 개발자를 위한 HTTP 웹 기본지식 https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

HTTP 웹 기본지식 https://intrepidgeeks.com/tutorial/for-all-developers-basic-knowledge-of-http-web-internet 

HTTP 웹 기본지식 https://jihyee.tistory.com/10

728x90