인터넷은 우리 시대에 전 세계를 이어주는 휼륭한 통로이다.
아시아든, 유럽이든, 아메리카든, 아프리카든.....
그런데 이 인터넷은 어떻게 작동하는걸까?
두 컴퓨터가 서로 붙어있다면 서로 케이블을 통해 연결하면 되겠지만 만약 미국에 있는 친구에게 메시지를 전송해야 한다면?
물리적으로 연결하는 것은 불가능할 것이다.
그렇기 때문에 우린 IP(인터넷 프로토콜)을 사용한다. 인터넷 프로토콜이란 컴퓨터끼리 통신하는데 필요한 최소한의 규약? 이라고 보면 되는데 모든 인터넷 네트워크의 기초가 된다.
우선 일상생활에서 IP주소에 대해 들어본 적이 있을 것이다. 우린 바로 그 IP주소로 통신하게 되는데,
예를 들어 192.100.100.100가 당신의 IP주소이고, 미국에 있는 친구의 IP주소가 192.200.200.200라고 하면
IP패킷에는 당신의 IP주소와 친구의 IP주소 등을 포함한 IP패킷에 당신의 메시지를 함께 넣어서 인터넷 세상에 보내게 되는데, 이렇게 보내진 패킷들은 인터넷에 있는 노드들을 통해 미국에 있는 친구에게 보내지는 것이다.
그렇게 되면 미국에 있는 친구의 컴퓨터에서도 나에게 알겠다는 메시지를 담은 패킷이 또다시 수많은 인터넷 노드들을 통해 나에게 전달되게 된다. 이것이 IP 프로토콜이다.
그런데 이런 IP 프로토콜의 방식만으로는 한계가 있는데
1. 비연결성
- 패킷을 받을 대상이 없거나 서비스가 불가능한 상태여도 패킷을 전송하게 된다. 때문에 나는 패킷을 전달했음에도 상대는 패킷을 받지 못하거나 패킷이 소실되는 일이 발생할 수 있다.
2. 비신뢰성
- 패킷이 전송 도중 사라지게 될 수 있다. 이것이 무슨 말이냐면 인터넷이라고 무슨 신이 구축한 세계를 잇는 통로도 아니고 중간에 패킷을 전달하면 노드가 고장 나면? 꺼진다면?........ 답이 없게 된다.
- 패킷을 전달할 때 우리는 보내고 싶은 메시지를 한 패킷에 다 담지 못할 수도 있다. 그렇게 된다면 우린 패킷을 여러 개에 걸쳐 보내게 되는데 (보통 대충 1500byte 정도 씩 끊어서 보낸다.)
이렇게 되면 내가 보낸 패킷이 무슨 병아리가 엄마 따라다니는 것처럼 줄지어서 가는 것도 아니고 각자 다 알아서 목적지로만 어떻게든 가도록 설계되어있기에 1, 2, 3번 패킷을 보냈음에도 친구의 컴퓨터에는 1, 3, 2번 순으로 도착할 수도 있다. 하지만 IP 프로토콜에서는 이렇게 된다 해도 어떻게 할 수가 없다.
3. 프로그램을 구분하지 못한다.
- 우린 보통 컴퓨터로 하나의 작업만 하진 않는다. 예를 들어, 컴퓨터로 게임을 하면서 노래를 틀게 되면 인터넷으로는 노래도 전송받아야 하고, 온라인 정보도 계속해서 받아야 한다. 하지만 ip프로토콜에서는 한 IP 내 프로그램을 구분하지 못하기 때문에 이러한 작업을 할 수 없다.
그리하여 이런 IP를 보충하는 것이 TCP이다. +UDP도......?
위의 그림을 보면 잘 나타나 있는데 IP는 방금 배웠던 것이고 밑에 있는 네트워크 인터페이스 계층은 정말 물리적인 lan카드나 mac주소 등인데.... 오늘은 설명하지 않을 것이다.
어쨌든 위의 그림을 따라서 가장 기본에는 네트워크 인터페이스 계층이 있고, 그 위에 있는 것들이 하나씩 덮어가면서 완성되는 것이다. 따라서 지금 말할 TCP, UDP는 IP 프로토콜 위에 씌워서 보충한다는 개념이라 보면 된다.
자. IP 패킷에는 보내는 곳의 IP주소와 목적지의 IP주소만 있었다면 TCP에는 보내는 곳과 받는 곳의 포트뿐만 아니라 전송 제어, 순서, 검증 정보 등이 들어가게 된다.
TCP의 특징은?
- 연결형 서비스이다. (TCP 3 way handshake라고 부른다.)
3way handshake 방식은 서로의 포트를 확인하고 연결하기 위하여 3번의 요청/응답 후에 연결이 되는 것을 말한다.
예를 들자면 친구의 컴퓨터한테 신호(syn)를 보냈는데 확인 메시지(ack)가 오지 않는다? ==> 연결 X
- 데이터 전달을 보증한다.
TCP에서는 만약 데이터가 전달되지 않았다면 전달되지 않았다고 클라이언트에게 메시지를 보낸다. 이를 통해 데이터가 전달되었는지 아닌지 알 수 있다.
- 데이터 전달의 순서를 보장한다.
만약 1, 2, 3 번순으로 보냈는데 서버에서 1, 3, 2 번순으로 데이터를 받았다? 이렇게 된다면 여러 로직에 따라 다르겠지만 기본적으로는 2번부터 다시 보내라고 서버에서 클라이언트 측으로 요청하게 된다.
- 일대일 전송
일대일 전송(unicast)을 한다.
- 데이터 흐름을 제어할 수 있다.
window size(마소 윈도 아니다) 말 그대로 통과할 수 있는 창문의 크기이다. 무슨 말이냐 하면 데이터를 받을 수 있는 크기인데, 이것은 아무래도 수신자 측이 더 중요하다 보니 window size는 수신자 측에서 보낸 사이즈에 송신자 측의 상황을 고려하여 정해진다.
- 데이터의 혼잡을 제어할 수 있다.
이것도 window size를 통해 제어하는 것인데 그냥 제어할 수 있다는 것만 알고 있자. 입문자 입장에선 더 알라면 머리 빠진다.
UDP의 특징은?
- 일대다 전송(multi, broadcast)이 가능하다.
- 비연결 지향이다.
TCP에서는 3 way handshake방식을 통해 서버와 클라이언트의 상태를 확인하고 전송을 시작하지만 UDP는 그딴 거 없다.
그냥 바로 보내버리고 안되면 끝.
- 데이터 전달을 보장하지 않는다.
- 순서 제어를 못한다.
- 하지만 빠르다
UDP는 이것만 알면 된다. 빠르다
IP에서 거의 안 변했다고 보면 된다. 변한 게 있다면 포트번호가 들어가고 마지막에 데이터가 제대로 왔는지 확인하기 위해 데이터 크기를 싹 다 더한 checksum 정도만 추가되었다.
사실 TCP는 3 way handshake 방식을 사용해 많은 시간을 잡아먹는데 반해 UDP는 그딴 거 안 한다.
그래서 속도가 TCP에 비해 빠르지만 데이터 전송 중 패킷 손실의 위험이 있어 동영상이나, 데이터 몇 개 정도 없어도 되는 것들을 전송하는 데에 사용된다...... 고는 하지만 TCP가 90% 이상을 차지하기도 했다..... 물론 지금은 HTTP/3가 UDP를 사용하면서 또다시 높아지는 중이다.
PORT란?
드디어 끝이 보인다. 일단 port라고 들으면 무슨 생각이 드는가? 영어 사전을 찾아보면
항구라고 나온다!
사실 포트 == 항구라고 이해해도 상관없다.
좀 더 정확한 예를 들자면 포도 전용 항구, TV 전용 항구, 잡것들 전용 항구 등이 따로 있다고 생각하면 된다.
- 20~21번 포트 : FTP
- 23번 : TELNET
- 80번 : HTTP
- 443번 : HTTPS
- 0 ~ 1023번 : 잘 알려진 포트.
- 0~ 65535번 : 할당 가능한 포트.
이 정도가 대표적인 포트 번호이다.
DNS란?
- Domain Name Service의 약자인 DNS는 이름부터 무엇을 하는지 예상해 볼 수 있다.
우리가 여태 말할 때 IP주소를 통해 인터넷이 연결된다고 하지 않았는가? 그렇다면 우리가 크롬에서 google.com을 쳐서 구글에 들어갔던 것은 무엇일까? 설마 IP 주소가 문자로 있을 리는 없고...... google.com을 ASCII code 2진수로 바꾼 건가?
사실 우리가 쓰는 naver.com은 DNS를 통해 서버의 IP주소로 변경된다. 여기서 DNS가 무엇인지 유추해볼 수 있는데, DNS란 도메인의 이름(google.com)을 IP주소로 변환시키는 서비스이다.
대략 아이피 전화번호부라고 생각하면 된다. DNS에는 엄청난 수의 도메인 네임이 저장되어있으며, 이 DNS 서버에는 하나의 DNS만 존재하는 것이 아니며, DNS를 통해 찾기를 시도했음에도 안 나올 시 또 다른 DNS 서버로 넘어가서 찾게 된다.
여기까지가 인터넷 네트워크의 기초이다. 이 정도만 알고 있으면 네트워크 기초는 정복한 것이다!
'Network' 카테고리의 다른 글
[네트워크 기초] OSI 7계층에 대해 (0) | 2021.05.16 |
---|