공부/네트워크

1. 인터넷 네트워크

샤샤샤샤 2023. 8. 25. 15:51

출처: 인프런 김영한님

 

IP(Internet Protocol)

인터넷 프로토콜

패킷을 통해 데이터를 주고받기 위한 통신 규약

통신자들 간의 일종의 주소역할을 하는 IP주소를 부여한 뒤, 패킷을 통해 데이터를 감싼다. 그리고 보내고자 하는 ip주소로 패킷을 전송하는데, 패킷은 곧바로 해당 ip를 찾아가는 것이 아닌, 노드를 떠돌아다니며 자신이 현재 있는 노드에서 관리하는 ip주소 중 수신자 ip가 존재하는지 확인하고, 없다면 다른 노드로 옮겨가기를 반복한다.

세상 사람들이 모두 히키코모리여서 집밖으로 나오지 않고 집안에 틀어박혀 모든 물품을 택배로 주문해서 살아간다고 상상하면 앞으로 나올 개념들을 이해하기 쉽다. 택배는 패킷, 노드는 택배 집하장, ip주소는 집 주소, 받는 사람은 서버, 보내는 사람은 클라이언트에 대응된다.

 

그럼 ip통신의 문제가 다음과 같다는 것을 이해할수 있다.

 

1. 물건을 받을 주소가 존재하지 않음. 즉, 송장에 기입된 주소가 잘못됨.

2. 패킷이 방황하는 와중에 노드가 꺼짐. 즉, 집하장에 갑자기 산사태같은 재난이 일어나 물건이 모두 사라짐.

3. 정보량이 커서 패킷을 a,b로 나눠 보냈는데, b,a순으로 받음. 즉, 먼저 받아야하는 물건이 더 늦게옴 (통신은 그때그때마다 다른 경로를 이용하며, 나눠 보낼경우 서로 다른 경로로 전송될수 있다. 이 때문에 시간차가 발생한다).

 

이와 같은 문제를 해결하기 위해 등장한 것이 바로 TCP다.

 

패킷: 패키지 + 버킷

 

TCP (Transmission Control Protocol)

전송 제어 프로토콜.

IP통신의 문제점을 해결하기 위해 나온 통신 규약으로, 기존의 ip통신에 출발지 port, 목적지 port, 패킷 순서, 검증 정보 등을 추가한 통신이다. 다음과 같은 특징이 존재한다.

 

1. 3-way handshake

2. 데이터 전송 보장

3. 패킷 순서 보장

 

앞서 ip통신의 문제 1, 송장 주소가 잘못 기입되는 문제를 해결하기 위해서는 어떻게 해야할까? 택배 기사가 배달전 미리 전화나 문자를 통해 해당 주소가 맞는지, 물건을 받을수 있는 상태인지 확인하면 된다. TCP에서는 이를 위한 기능으로 3-way handshake를 지원한다.

3 way handshake 는 패킷을 전송하기 전, 미리 통신을 연결해 서버측이 데이터를 받을수 있는지 확인하는 방법으로, 그 과정은 아래와 같다.

 

(1) 서버로 syn을 전송.

(2) 이를 받은 서버는 답장으로 syn과 ack를 클라이언트에게 전송.

(3) 답장을 받은 클라이언트는 서버에게 ack를 전송

 

일련의 과정을 통해 클라이언트는 데이터를 발송하기 전 서버가 정상 작동하고 있는지 알수 있다.

 

또한 TCP통신은 마치 물건을 받은 사람이 보낸 사람에게 잘 받았다는 문자를 남기듯이, 서버측에서 정상적으로 데이터를 받았다면 다시 클라이언트측에 데이터를 잘 받았다는 통신을 전송한다. 이를 통해 전송 도중 노드에서 문제가 생겨 데이터가 소실되더라도 클라이언트는 답장이 안오는것을 보고 데이터가 제대로 전송되지 않았음을 알 수 있다. 이 기능을 통해 데이터 전송이 보장할수 있다.

 

마지막으로 TCP통신은 패킷 순서에 대한 정보를 가지고 있다. 따라서 1,2,3 순서로 와야할 패킷이 1,3,2 순으로 왔다면, 서버측에서는 3번이 잘못왔으니 3번을 다시 전송하라는 답장을 클라이언트 측에 날리고, 클라이언트는 이를 수행한다. 이를 통해 패킷 순서의 문제까지 모두 해결할수 있다.

 

UDP (User Datagram Protocol)

유저 데이터그램 프로토콜.

TCP는 본격적인 통신 전 3-way handshake를 진행해야하기때문에 느리다는 단점이 존재한다. 따라서 이를 해결하고자 나온 것이 UDP다. UDP 는 데이터 무결성을 보장하지 않을 뿐 아니라, 패킷 순서에 대한 보장 역시 없다. 최근 들어 각광받고 있으나 여전히 대세는 TCP통신이다.

 

PORT 

포트.

사람들이 모두 집안에 틀어박혀 택배로만 살아간다면, 개개인은 물, 밥, 쌀, 고기, 컴퓨터, 티비 등 엄청난 양의 택배를 주문할 것이다. 하루에도 수백개의 택배가 밀려들어오게 되는데, 뭐가 뭔지 전부 까봐야만 알수 있다는 문제가 존재한다. 당장 배가 고픈데 밥이 뭔지, 물이 뭔지 하루종일 찾고 있어야 하는 것이다.

그런데 만약 집 앞에 구획을 나눠두고

 

<식료품은 a구역에, 가전제품은 b구역에, 잡화는 c구역에 놔주세요!>

 

하는 식으로 집 입구마다 표지판이 존재한다, 사람들은 빠르게 자신이 필요한 물건을 찾을수 있다.

컴퓨터도 마찬가지다. 컴퓨터에는 각 구역에 해당하는 포트라는 것이 있어, 음악 데이터는 10001번 보트, 동영상 데이터는 10002번 포트 하는 식으로 구분해서 받을수 있다.

TCP통신에는 목적지 port에 대한 정보는 이를 위함이며, 답장을 받기위해 출발지 port정보도 같이 보낸다.

http 처럼 유명한 통신들은 자기들만의 정해진 포트번호가 존재한다.

 

DNS(Domain Name System)

도메인 네임 시스템.

이 히키코모리 나라는 큰 문제가 하나 더 존재한다. 바로 매일같이 주소지가 바뀐다는 것이다.

때문에 택배를 보낼때마다 바뀐 주소를 일일이 상대방에게 물어봐야 하며, 만약 택배가 가는 도중 주소가 바뀌면 다른 사람이 데이터를 받게 된다.

이를 해결하기 위해 직접적으로 주소로 상대방을 특정하는 대신, 철수나 영희처럼 이름으로 상대방을 특정하기로 약속한 것이 바로 도메인 네임 시스템이다.

클라이언트는 100.100.100.1 과 같은 ip주소로 전송하는 대신 server1.com 이라는 도메인 주소로 데이터를 전송하고, DNS서버에서 server1.com이라는 이름을 가진 ip주소를 찾아 전송하는 방식이다.

'공부 > 네트워크' 카테고리의 다른 글

HTTP 헤더와 캐시  (2) 2023.09.07
HTTP 메서드  (0) 2023.09.05
URI와 HTTP의 기본  (0) 2023.09.01