만약 내가 미국에 있는 친구에게 메세지를 보낸다면 인터넷을 사이에 두고 어떻게 연락을 주고 받을 수 있을까?
이렇게 노드들을 사이로 연락을 주고 받아야하는데 그러면 어떻게..할까?
이걸 이해하기 위해선 IP(인터넷 프로토콜)이라고 하는 녀석을 알아야한다!!
인터넷으로 연락을 하기 위해선 먼저 우리는 IP라는 주소를 가지고 있어야한다.
: 인터넷 프로토콜 역할
먼저 전송할 데이터를 출발지IP, 목적지IP 같은 배송 할 때 보내는 주소 송장을 붙여서 보내버린다. 그러면 노드들을 상대의 IP주소인 200.200.200.2 목적지까지 전달하면서 타고 타고 결국 서버까지 전달한다.
그러면 친구도 메세지를 받았고 전달을 해야한다면?
인터넷망은 복잡하기 때문에 같은 노드를 타지 않고 다른 방식으로 전달 된다.
🍄 IP 프로토콜의 한계가 존재
그러면 이 IP 프로토콜의 단점을 어떻게 해결 할 수 있을까?
수 많은 IP 프로토콜의 단점을 해결 해주는 것은 TCP이다.!!
먼저 인터넷 프로토콜 스택의 4계층을 알아보자!!
TCP는 IP 위에서 IP를 좀 더 보완 해준다고 생각하자.
만약 내가 미국에 사는 친구랑 1:1 채팅을 한다면 Socket을 이용하는데..
🎯 이 그림을 주목하자
해당 데이터에 TCP/IP 패킷으로 만듦 여기서 패킷 이란? Package(수하물)과 Bucket(덩어리, 한 양동이의 양?)의 합성어다. 택배 박스 느낌이다..
전송 제어 프로토콜(Transmission Control Protocol)
클라이언트에서 서버로 1.Syn(Synchronized) 동기화 메세지를 전달 여기서 Syn은 접속 요청 메세지이다. 그러면 서버에서 Syn + ACK를 클라이언트에게 보낸다. syn은 똑같고, Ack는 요청 수락이다. 즉, 요청 수락을 하고 나도 접속 요청 받아줘 라고 다시 보내는 것. 클라이언트는 다시 요청 수락을 하면 ACK를 보낸다. 이것이 바로 쓰리 웨이 핸드쉐이크으으!!!!!!
물론 3.ACK를 보낼 때 데이터와 함께 전송이 가능하다.(이게 편하긴 할 거 같다ㅋ)
하지만 개념적으로 연결이 된 것이지, 실제로 연결이 된 것이 아니다.(뭔솔?) Syn, ACK를 보내고 받았으니까 수많은 노드를 거쳐서 정말 제대로 노드를 타고 연결이 됐는지 확인하기 어렵다 그렇기 때문에 그냥 일단 요청 수락 및 접속 요청 메세지를 받았으니 그냥 우린 연결 됐구나 생각한다 :)
1, 2, 3이 와야하는데 잘못 오면 서버가 클라이언트에게 다시 요청을 한다.
신뢰할 수 있는 프로토콜
현재는 대부분 TCP 사용
🎯 이것들이 가능한 이유는 TCP 세그먼트를 잘 보면 전송 제어, 순서, 검증 정보 등이 있기 때문이다.
UDP 특징
사용자 데이터그램 프로토콜(User Datagram Protocol)
🧐 IP랑 뭐가 다른가? 그냥 PORT, 체크섬만 추가 되었다.
: 하나의 아이피에서 여러 애플리케이션을 사용하고 있다면, 뭐 예를 들어 게임도 하고, 음악도 듣고, 검색도 하고 있다. 그러면 내 아이피로 여러 패킷이 온다. 여기서 음악용 패킷인지 게임용 패킷인지 구분을 어떻게 할 수 있을까? 라고 할 때 쓰는 게 바로 PORT다. 체크섬은 이 메세지에 대해서 맞는지 검증해주는 것. 이 두 개가 추가 되었다.
요즘은 UDP가 뜨는 추새라고..
간단하게 TCP/IP를 묶어서 TCP/IP 패킷이라고 하고, 여기에는 PORT가 담겨있다.
그림과 같이 만약 게임을 하는 중이라면, 클라이언트에서 서버 IP인 200.200.200.2의 PORT번호 11220포트로 게임 서버 연결을 하면 서버에서 그걸 받고 다시 클라이언트인 100.100.100.1의 8090포트로 연결해준다. 이 때 서버에선 어떻게 클라이언트의 포트를 알 수 있을까? 그것은 TCP/IP 패킷에 자신의 포트도 넘겨줬기 때문이다.
생각해보면 IP를 기억하는 건 쉽지 않다. 그리고 더 문제는 아이피가 바뀔 수 있다. 이런 경우가 많다.
DNS란 도메인 네임 시스템(Domain Name System)
우리가 google.com이나 naver.com를 들어가면 IP를 반환해준다. 우리는 그걸 받고 접속한다.