인터넷 네트워크
기본적으로 인터넷 네트워크가 어떻게 작용하는지에 대해 알아보겠다.
1. 인터넷 통신
"인터넷에서 컴퓨터 둘은 어떻게 통신할까?"
클라이언트와 서버는 인터넷을 통해 통신하는데, 그 인터넷은 복잡한 망으로 구성되어 있다.
그 복잡한 인터넷 망을 거쳐 요청과 응답이 원활히 이루어지기 위해서는 IP(인터넷 프로토콜)이 필요하다.
2. IP (인터넷 프로토콜)
IP는 Internet Protocol의 약자이다. 네트워크 호스트는 IP에서 정의된 규약(Protocol)을 이용해 네트워크 상에서 정보를 주고 받으며, 이 정보는 패킷(Packet) 단위로 전달된다.
네트워크 호스트(Network Host)
네트워크 호스트는 컴퓨터 네트워크에 연결된 장치이다.
네트워크 호스트의 역할은 네트워크 상에서 정보를 주고 받는 것으로, 우리는 네트워크 호스트를 네트워크의 노드라고도 부른다.
간단하게 생각하면 개인 컴퓨터가 네트워크 호스트가 될 수 있다.
IP 프로토콜은 클라이언트에 IP 주소를 부여한다. 그리고 이를 통해
- 지정한 IP 주소에 데이터를 전달하고
- 패킷(Packet)이라는 통신 단위로 데이터를 전달한다. (클라이언트와 서버 사이에 패킷을 주고 받는다.)
IP 주소 : IP Protocol을 사용하는 호스트의 주소 정보
네트워크는 네트워크 호스트들도 구성이 되는데 호스트들 간에는 통신이 가능하다. 통신에 사용하는 프로토콜이 바로 IP이다. IP를 이용한 통신을 하기 위해서(하나의 호스트에서 다른 호스트로 전송하기 위해서)는 호스트의 주소 정보가 필요하다. 주소가 있어야 패킷을 보낼 목적지를 설정할 수 있다. 이러한 주소 값이 바로 IP Address이다.
패킷(Packet)
Package(소포(정보)) + Bucket(덩어리) 의 합성어로, 정보의 덩어리를 의미한다. 통신 시 컴퓨터는 정보를 덩어리 단위로 만들어서 다른 컴퓨터에 전달하는데 이를 Packet이라 부른다.
[IP 패킷]
출발지 IP, 목적지 IP, 기타 ...
전송 데이터
[IP 프로토콜의 한계]
- 비연결성
- 대상 서버가 패킷을 받을 수 있는 상태인지 모르는 상태에서 전송하기 때문에, 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다.
- 비신뢰성
- IP는 프로토콜일 뿐이고 보낸 데이터의 흐름에 관여하지 않기 때문에 보낸 패킷이 제대로 갔는지 보장하지 않는다.
- 패킷 소실 문제 : 중간에 패킷이 사라지면?
- 패킷 전달 순서 문제 : 패킷이 순서대로 안 오면?
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면? (ex: 음악 들으면서 게임)
IP를 이용한 통신을 인터넷 계층의 통신이라고 한다. 이러한 한계점 극복을 위해 전송 계층에서 TCP, UDP라 불리는 프로토콜을 추가로 정의함으로써 IP의 한계점을 극복한다.
3. TCP, UDP
1) 인터넷 프로토콜 스택의 4계층
인터넷 프로토콜 스택 4계층이란 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜의 모음이다. 이러한 프로토콜은 용도에 따라 4개의 계층으로 이루어져 있다.
- 애플리케이션 계층 : 프로세스 간 통신을 위해 설계된 계층. ex) HTTP, FTP, TLS/SSL
- 전송 계층 : 송신자와 수신자를 연결하는 서비스에 대한 정보를 담는 계층. ex) TCP, UDP
- 인터넷 계층 : 패킷을 목적지로 전송하기 위한 정보를 담는 계층. ex) IP
- 네트워크 인터페이스 계층 : LAN 드라이버, LAN 장비 등 물리적 전송을 위한 계층
개발자인 우리는 어플리케이션 계층, 전송 계층, 인터넷 계층 3개의 계층에서 어떤 일이 일어나는지 아는 것이 중요하다.
- 애플리케이션 계층에서는 서버로 전달할 데이터를 생성한다.
- 패킷에 필요한 추가적인 정보를 추가하기 위해 전송 계층은 애플리케이션으로부터 패킷을 전달받는다. (SOCKET 라이브러리를 통해 전달)
- 전송 계층에서는 전송을 위해 필요한 추가적인 정보를 패킷에 추가한다.
(순서 보장을 위한 순서값, 중복 제어를 위한 고유값 등의 정보 추가) - 인터넷 계층으로 패킷이 전달되면, 인터넷 계층에서는 패킷의 출발지와 목적지에 대한 정보를 패킷에 추가한다.
이로써 패킷이 어떤 노드(목적지)로 가야하는지 설정한다. - 이제 전송하려는 패킷(Packet)을 위한 모든 정보가 완성되었다.
이 이후에는 네트워크 인터페이스 계층에서 해당 패킷을 네트워크를 이용해 목적지로 전송한다.
[정리]
애플리케이션 계층에서는 보내야 하는 정보를 생성하고,
전송 계층에서는 전송을 위한 정보를 추가해주고,
인터넷 계층에서는 출발지와 목적지에 대한 정보를 설정해준다. 이 과정을 통해 패킷이 어디로 가야하는지에 대한 정보가 완성된다.
2) TCP/IP 패킷 정보
출발지 IP, 목적지 IP, 기타 ...
출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 ...
전송 데이터
3) TCP 특징
TCP(Transmission Control Protocol) : 전송 제어 프로토콜
- 연결 지향 : TCP 3 way handshake(가상 연결)
- 데이터 전달 보증 : 누락이 되면 알 수 있다.
- 클라이언트에서 서버로 전송하면, 서버에서 클라이언트로 잘 받았다고 메시지를 보낸다.
- 순서 보장
- 예를 들어 클라이언트에서 패킷 1, 2, 3 순서로 전송했는데 서버에서 1, 3, 2 순서로 도착하면 패킷2부터 다시 보내게 한다.
TCP는 신뢰할 수 있는 프로토콜로, 현재는 대부분 TCP를 사용한다.
TCP 3 Way Handshake을 통한 연결 수립
받을 대상 노드(호스트)가 서비스 가능 상태인지 확인하기 위해서는 해당 노드가 활성 상태인지 확인하기 위해 통신을 해야 한다. TCP에서는 3 Way Handshake라는 방식으로 해당 노드와 통신을 수행하게 된다.
SYN 단계 : 애플리케이션이 서버에 통신을 위한 연결을 요청하는 단계
SYN-ACK 단계: 서버가 애플리케이션에 자신이 활성 상태임을 알리고 애플리케이션에서도 포트를 열어 연결을 활성화하라는 요청 메시지를 전송
ACK 단계: 애플리케이션이 서버의 요청 메시지를 수락하여 연결이 수립
4) UDP 특징
UDP(User Datagram Protocol) : 사용자 데이터그램 프로토콜
UDP는 최근에 각광받고 있는 프로토콜로, 하얀 도화지에 비유할 수 있다. (기능이 거의 없음)
- 연결 지향- TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다.
IP와 거의 같지만 +PORT + 체크섬 정도만 추가한 것이라고 볼 수 있다.
또한 애플리케이션에서 추가 작업이 필요하다.
참고)
https://kotlinworld.tistory.com/91
https://kotlinworld.com/92