Spring boot

[HTTP] 인터넷 네트워크

인터넷 통신

 

클라이언트와 서버는 인터넷을 매개체로 통신한다.

인터넷 망은 매우 복잡하다.

어떻게 클라이언트의 메세지가 올바르게 서버로 전달되는지 알아보자


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