인터넷 통신
클라이언트와 서버는 인터넷을 매개체로 통신한다.
인터넷 망은 매우 복잡하다.
어떻게 클라이언트의 메세지가 올바르게 서버로 전달되는지 알아보자
IP (Internet Protocol)
각 클라이언트와 서버는 IP주소를 가지고 있다.
메세지를 전송할 때 IP주소를 지정하면, 패킷(Packet)단위로 데이터를 쪼개 전달한다.
그러나 IP프로토콜만으로는 아래와 같은 문제가 발생할 수 있다.
- 전송상대가 서비스 불능상태일때도 패킷을 전송한다.
- 전송 중 패킷을 잃어버릴 수 있다.
- 전송 중 패킷의 순서가 바뀔 수 있다.
- 같은 IP를 사용하는 애플리케이션이 복수이다. (어느 애플리케이션에 전달해야 하는지 모른다.)
TCP, UDP
TCP와 UDP는 인터넷 프로토콜 스택의 4단계 중 전송 계층에 해당된다.
전송 계층은 애플리케이션 계층에서 소캣을 통해 메세지를 전달받으면 TCP 또는 UDP 정보를 헤더에 추가하여 아래 IP 계층으로 보낸다.
IP계층에서는 IP 정보를 추가하여 다음 계층을 거친 뒤 전송이 시작된다.
IP패킷엔 출발지와 목적지의 IP주소가 추가된다.
TCP 헤더에는 출발지와 목적지의 PORT, 전송 제어, 순서, 검증 정보를 추가된다.
TCP(Transmission Control Protocol)의 특징
- 연결지향(3-way handshake)
- 데이터 무결성 (순서를 포함하여 보장)
- 신뢰할 수 있다.
- 주로 사용된다.
3-way handshake는 클라이언트와 서버가 세 단계로 사전에 연결 상태를 확인하는 것이다.
1. 클라이언트가 접속 요청(SYN)을 보내면
2. 서버에서는 요청 수락(ACK)과 서버쪽의 요청을 보낸다.
3. 클라이언트는 요청을 수락한다.
UDP(User DatagramProtocol)의 특징
- 하얀 도화지에 비유될 정도로 기능이 거의 없다.
- 데이터의 전달과 순서를 보장하지 않는다.
- 부가 기능이 없어 단순하고 빠르다.
- IP에 PORT + 체크섬 기능을 추가한 정도이다.
- 애플리케이션에서 추가 작업이 필요하다.
- 최근에 최적화를 위해 주목받고 있다.
PORT
같은 서버로 두 프로세스의 데이터를 전송해야 한다.
어떻게 알맞은 애플리케이션으로 데이터를 전달할 수 있을까?
이렇게 프로세스를 구분하기 위해 사용되는 정보가 PORT 이다.
PORT는 0~65535 내에서 할당 가능하나 0~1023까지는 주로 잘 알려진 포트로, 임의로 사용하지 않는 것이 좋다.
DNS (Domain Name System)
IP는 변경될 수 있다.
서버의 IP가 바뀐 경우, 클라이언트는 데이터를 전송할 수 없다.
이를 해결하기 위해 DNS가 도메인 명과 IP를 저장하고 있다.
클라이언트에서는 도메인 명으로 DNS에서 IP를 찾은 후에 그 IP로 접속을 시도할 수 있다.
'Spring boot' 카테고리의 다른 글
[HTTP] http 기본 (0) | 2021.10.06 |
---|---|
[HTTP] URI와 웹브라우저 요청 흐름 (0) | 2021.09.29 |
[기본] 빈 스코프 (0) | 2021.08.24 |
[기본] 빈 생명주기 콜백 (0) | 2021.08.24 |
[기본] 의존관계 자동 주입 (2) | 2021.08.17 |