인터넷 통신
클라이언트에서 다른 클라이언트(컴퓨터)로 데이터를 보낼 경우, 위치에 따라 위성, 해저광케이블, 기타 통신 서버와 같은 노드들을 거쳐 상대 클라이언트에 도달한다.
IP(인터넷 프로토콜)
송신/수신 클라이언트에서 정보를 주고받을 때 사용하는 정보 위주의 프로토콜
방대한 네트워크 속 특정 호스트에 데이터를 보내기 위해서는 주소가 필요한데 이를 IP라 부른다.
역할
- 지정한 IP주소에 데이터 전달
- 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.
IP 패킷 정보
- 패킷은 전송하고자 하는 데이터의 한 블록(payload)과 주소지 정보(발신지 주소, 목적지 주소), 관리 정보(Header, IPv6와 같이 망이 패킷을 목적지까지 전달하는데 필요한)로 구성된다.
- 상대에게 클라이언트 패킷 전달을 진행할 수 있으며, 상대 클라이언트에서도 응답 패킷을 전달할 수 있다.
IP 프로토콜의 한계
1. 비연결성
패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 그냥 전송한다.
2. 비신뢰성
패킷이 중간에 소실될 경우 문제가 생긴다.
패킷이 순서가 보장되지 않는다.
3. 프로그램 구분
같은 IP를 사용하는 서버에서 통신하는 어플리케이션이 여러개일 경우 어떻게 구분하는가?
TCP, UDP
인터넷 프로토콜 스택의 4 계층
애플리케이션 계층 - HTTP, FTP
무엇인가 비즈니스로직 혹은 특정 제품을 만들어내는 지에 따라 탄생하는 데이터 전송에 대한 규칙 계층
전송 계층 - TCP, UDP
물리적으로 연결하고, 경로를 지정했으면 이제 데이터를 전송해야하는데, 데이터를 전송하는 방법을 정의하는 계층
인터넷 계층 - IP
방대한 인터넷 계층에서 어디로 보낼지 경로를 선택하는 것
네트워크 인터페이스 계층
물리적인 영역을 표준화 하느 계층으로 실제로 랜선을 꼽는 랜카드나 랜카드 드라이버 등이 이에 속한다.
프로토콜 계층
- 프로그램에서 Payload 작성
- Socket 라이브러리를 통해 전달한다.
- TCP 정보 생성, 메세지 데이터(Payload) 포함
- IP 패킷 생성, TCP 데이터 포함
TCP/IP패킷 정보
: 기존 IP 패킷정보의 한계인 비신뢰성과 비연결성을 TCP 정보를 추가함으로써 한계를 극복한다.
TCP 특징
전송 제어 프로토콜(Transmission Control Protocol)
- 연결지향 - TCP 3way handshake(가상 연결)
1. SYN(Synchronizer) 접속 요청 메세지 전송
2. SYN + ACK 요청 수락
3. ACK (with 데이터 전송 가능) → 데이터 전송
이 상태에서는 개념적으로 연결된 것으로 그 사이의 수많은 노드들과의 연결이 되었는지는 알 수 없다.
- 데이터 전달 보증
클라이언트에서 데이터를 전송하면 서버에서 데이터가 잘 왔는지에 대한 응답을 해줘서 데이터 전달을 보증한다.
- 순서 보장
만약 패킷의 순서가 잘못 도착했을 경우 처리 방법에 따라 다르지만 기본적으로는 잘못 전송된 패킷을 기준으로 다시 보내라고 요청을 해서 다시 패킷을 받는다. 그럼으로써 순서가 중요한 패킷 데이터에 대해서 순서를 보장할 수 있다.
TCP 정보에 PORT부터 순서와 같은 정보들이 포함되어 있기에 가능하다.
- 신뢰할 수 있는 프토로콜
- 현재 대부분이 TCP를 사용
UDP 특징
사용자 데이터그램 프로토콜(User Datagram Protocol)
- TCP에 비교해서 기능이 거의 없다.
- 연결지향도 아니고, 데이터 전달 보증도 안되고, 순서도 보장되지 않는다.
- 하지만, 몹시 단순하기에 속도가 빠르다.
- IP와 거의 유사하지만 PORT정보가 포함되어있고 체크섬 정도가 추가되어있다.
- 애플리케이션에서 추가적인 작업이 필요하다.
PORT
IP를 방대한 인터넷 세계의 노드들을 거쳐 상대 서버(혹은 클라이언트)로 도착하기위한 경로라 한다면 이런 이슈에 대해 생각해볼 필요가 있다.
내가 해당 IP에 도착하여 해당 서버를 만났을때 이 서버에서 돌아가고 있는 애플리케이션이 2개 이상이라면 이 중 어떤 애플리케이션에 데이터를 전송해야 할까?
좀 더 실생활에 비유하자면, 쇼핑몰에서 제로콜라 한박스를 주문했는데, 집 주소를 푸르지오 아파트 106동 이라고만 작성하면, 택배기사는 해당 푸르지오 아파트 106동 건물까진 올 수있겠지만, 그 안에있는 수십, 수백개의 호수 중에서 어디다가 택배를 배달해야할까?
포트는 아파트의 호수와 같고 애플리케이션별 구분과 같다.
TCP(혹은 UDP)라면 출발지와 목적지의 IP뿐 아니라 PORT정보도 담겨있는걸 볼 수 있다.
DNS
인터넷 통신을 위해 IP(with PORT)가 필요하다고 했는데, 이 IP에는 몇가지 단점이 있다.
1. 가독성이 떨어지고 외우기 힘들다.
: 200.200.200.1 , 혹은 174.254.162.74 이런식의 아이피를 모두 외울 수 있을까? 그리고 저런 아이피를 듣고 이게 뭐하는 곳인지 가독성이 떨어진다.
2. IP는 변경될 수 있다.
: 나는 200.200.200.1 로 주소를 기억하고 있는데, 이게 변경되서 200.200.200.3이 된다면 대응하는게 까다롭다.
DNS란?
도메인 네임 시스템(Domain Name System)
일종의 전화번호부와 같으며 도메인 명을 IP 주소로 변환한다.
1. 도메인명을 DNS에서 검색한다.
2. DNS 서버에서는 해당 도메인명의 IP를 응답한다.
3. 해당 IP로 접속한다.
기술 면접 예제
- TCP와 UDP의 차이는 무엇인가요?
- 어느 서비스에서 UDP 기반의 프로토콜을 사용하는 것이 좋을까요?
- 3 Way Handshake와 4 Way Handshake는 무엇인가요?
- 3 Way Handshake는 왜 3번 요청을 주고 받는 것인가요?
- TCP Flow Control은 무엇을 해결하기 위한 기능의 집합인가요?
- Sliding Window 라는 개념에 대해서 알고 계시나요?
- TCP Congestion Control은 무엇을 해결하기 위한 기능의 집합인가요?
- Buffer와 Stream 방식은 각각 무엇인가요?
실시간으로 처리할 필요가 없는 대량의 데이터에 대해서 어떤 방식을 사용하는 것이 효율적일까요?