가까이 있는 컴퓨터끼리는 직접 선을 연결해서 USB로 파일을 넘기듯이 파일을 전송하고 받을 수 있지만 멀리 있는 컴퓨터들끼리의 통신은 어떻게 이뤄질까요?
우리는 과거 해킹송에서 IP
라는 단어를 들어보았습니다. 바로 이 IP
를 통해 멀리 있는 컴퓨터들과의 통신을 수행합니다. 정확히는 IP 주소
를 통해서 이뤄지는것이죠.
IP
란 Internet Protocol
의 앞 글자들만 따온것으로, 지정한 IP 주소에 패킷이라는 통신 단위로 데이터를 전달합니다.
패킷의 정보는 간단하게 보면 이러한데 보내고자 하는 전송 데이터를 IP 주소
와 기타 정보의 껍질로 쌓여 패킷이 되고, 이 패킷을 인터넷 상에다 보내는 것 입니다.
인터넷에는 수만은 노드(다른 서버)
들이 있어서 매번 다른 노드들을 경유해가면서 최종 목적지 IP주소로 패킷을 전달하게 됩니다. 이렇게 목적지 IP주소를 통해 다른 컴퓨터와의 통신이 가능하게 됩니다.
한계점은 크게 3가지가 있습니다.
유실
되어 버립니다.순서대로
도착하지 않을 수 있습니다.위와 같이 3가지의 큰 문제점들을 해결하기 위해 TCP/UDP 프로토콜이 등장하게 됩니다. 이 프로토콜들은 IP 프로토콜을 대체하는 것이 아니라 같이 쓰면서 한계점을 보완해주는 방식으로 사용됩니다.
TCP는 연결지향적
이면서, 데이터 전달을 보증
하고, 순서를 보장
하는 등 벌써 IP프로토콜의 한계 1,2
를 극복할 수 있어보입니다. 그럼 하나씩 어떤것인지 살펴보겠습니다.
그림과 같이 TCP는 통신을 하기 전에 두 컴퓨터끼리 서로의 존재를 확인하고 서로 통신을 하겠냐는 동의를 구합니다. 서로 요청과 수락을 하는 3번의 과정을 3 way handshake
라고 부릅니다. 이 과정을 통해 비연결성
을 해결할 수 있습니다.
클라이언트
가 어떤 요청을 보내게 되면 서버
는 그 요청을 받았다는 응답을 내려주면서 그 응답을 받고 "잘 전달이 됐구나"
알 수 있습니다.
비신뢰성의 두번째 문제인 패킷이 순서대로 전달되지 않는 문제는 서버
가 패킷들을 받고, 순서대로 왔는지 검증을 한 뒤 순서대로 오지 않은 자리서부터 다시 보내달라는 응답을 내려주게 됩니다. 그림에서는 패킷2부터 3
까지 다시 보내게 되겠습니다.
이는 바로 IP패킷을 만들기 전에
출발지 PORT
, 도착지 PORT
, 전송제어, 순서
, 검증정보
등등을 먼저 감싼 TCP세그먼트를 추가해줌으로써 가능해집니다.
그러면 목적지IP
에 도착한 뒤 서버에서 데이터를 까보기 전에 미리 순서나 검증 정보를 통해 해당 패킷이 옳바르게 왔는지 확인이 가능해지는 것 입니다.
그렇다면 여기서 PORT
는 뭘까요? 바로 프로그램의 고유한 번호
라고 생각하시면 될 것 입니다. 이를 현실세계에서 비유를 하자면 아파트가 바로 IP주소
가 되고, 동/호수가 바로 PORT번호
라고 비유하십니다. 이렇게 TCP세그먼트 정보들을 사용해서 IP 프로토콜의 한계를 극복하는 과정을 살펴보았습니다.
UDP는 IP 프로토콜과 거의 유사하기때문에 하얀 도화지
라고 설명하셨습니다. 다른점은 프로그램을 구분하는 PORT번호
와 받은 메시지가 정확한것인가를 확인하는 체크섬
정보를 추가한것 뿐이라고 합니다. 때문에 TCP 방식에서 필요한 3 way handshake
이나 데이터 전달 보증, 손상된 세그먼트 수신에 대한 재전송 요청처리 등을 하지 않기때문에 TCP 방식보다 속도면에서 우수
하다고 합니다. (그리고 TCP 자체를 최적화해서 사용하기엔 이미 너무 많은곳에 적용되어있어서 TCP를 변경하기 보다 UDP를 손봐서 최적화하기 좋다고 합니다.)