네트워크의 탄생 배경을 살펴보고, 패킷교환 방식을 이용한 IP
통신과 이를 보완하기 위한 TCP/UDP
에 대해 알아본다.
현재 사용하는 인터넷 프로토콜인 IP 기반의 네트워크는 1969년 진행했던 아르파넷(ARPANET) 프로젝트에서 시작되었다.
이 프로젝트는 그때 당시의 냉전시대에서 핵전쟁을 대비하기 위한 통신망 구축을 위해 추진되었고, 기존에 사용되었던 회선교환 방식이 아닌 패킷교환 방식으로 네트워크를 구축하게 되는데 이를 토대로 인터넷 통신 방식의 기반이 세워졌다.
회선교환 방식
은 발신자와 수신자 사이에 데이터를 전송할 전용선을 미리 할당하고 둘을 연결하는 방법이다.
이러한 문제점으로 현재는 회선교환 방식의 단점을 보완한 패킷교환 방식을 사용하고 있다.
패킷교환 방식
은 패킷이라는 단위로 데이터를 잘게 나누어 전송하는 방법이다.
그래서 인터넷 프로코콜, 줄여서 IP는 출발지와 목적지의 정보를 IP라는 주소라는 특정한 숫자값으로 표기하고 패킷단위로 데이터를 전송하게 되었다.
IP Packet
에서 패킷은 Pack과 bucket이 합쳐진 단어로 소포로 비유할 수 있다.
서버에서 무사히 데이터를 전송받는 다면 서버도 이에 대한 응답을 돌려줘야 한다. 서버 역시 IP 패킷을 이용해 클라이언트에 응답을 전달한다.
정확한 출발지와 목적지를 파악할 수 있다는 점에서 인터넷 프로토콜은 적절한 통신 방법으로 보이지만 IP에는 한계가 존재한다.
1. 비연결성
2. 비신뢰성
앞에서 말한 IP 패킷에는 한계들이 존재한다. 이 부분을 네트워크 계층 구조를 통해 어떻게 보완할 수 있는 지 알아본다.
네트워크 프로토콜 계층은 OSI 7계층 과 TCP/IP 4 계층 으로 나눌 수 있다.
IP 프로토콜 보다 더 높은 계층에 TCP 프로토콜이 존재하기 때문에 앞서 다룬 IP 프로토콜의 한계를 보완할 수 있다.
TCP/IP 4 계층은 OSI 7 계층보다 먼저 개발되었으며, TCP/IP 프로토콜의 계층은 OSI 모델의 계층과 정확하게 일치하지는 않는다. 실제 네트워크 표준은 업계표준을 따르는 TCP/IP 4 계층에 가깝다.
ex) 채팅 프로그램에서 메시지를 보낼 때
소켓(Socket)
: 프로그램이 네트워크에서 데이터를 송수신할 수 있도록, “네트워크 환경에 연결할 수 있게 만들어진 연결부“
TCP (Transmission Control Protocol)
는 장치들 사이에 논리적인 접속을 성립하기 위하여 3 way handshake를 사용하는 연결지향형 프로토콜이다.
클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보낸다.
서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN가 설정된 패킷을 발송하고 클라이언트가 다시 ACK으로 응답하기를 기다린다.
클라이언트가 서버에게 ACK을 보내면 이 이후로부터 연결이 성립되어 데이터를 전송할 수 있다.
TCP는 데이터 전송이 성공적으로 이루어진다면 이에 대한 응답을 돌려주기 때문에 IP 패킷의 한계인 비연결성을 보완할 수 있다.
패킷이 순서대로 도착하지 않는다면 TCP 세그먼트에 있는 정보를 토대로 다시 패킷 전송을 요청할 수 있어, IP 패킷의 한계인 비신뢰성(순서를 보장하지 않음)을 보완할 수 있다.
UDP (User Datagram Protocol)
는 IP에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜이다.
Reference