article thumbnail image
Published 2023. 5. 9. 15:43

컴퓨터의 네트워크 통신

  • 내 컴퓨터와 다른 곳에 존재하는 임의의 한 단말과 통신하기 위해서는 어떻게 해야 할 수 있는가?
  • 이 문제는 우리가 편지를 보낼 때와도 명확히 일치하는 문제이다.
    • 편지를 보내는 Alice는 어딘가에 살고 있는 Bob에게 편지를 보내려고 한다. 어떻게 해야할까?
    • 너무 당연하게도 편지의 내용을 적고, 편지에 Bob이 거주하는 주소(address)를 적어 우체국에 보내주면 우체국에서 Bob이 거주하는 집(Terminal)까지 이 우편물을 배송해준다.
    • Bob은 편지를 받고, 내용을 읽어 어떤 내용인지를 확인하고, 편지를 잘 받았다는 편지를 다시 적는다. 역시 Alice의 주소를 적고 우체국에 보내면 우체국에서 이 편지를 다시 Alice에게 배송해줄 것이다.
  • 컴퓨터의 통신 역시 동일하게 인터넷 상 어딘가에 존재하는 Bob에게 데이터를 보내기 위해서는 Bob의 인터넷 주소를 알고 있어야 한다. 이 주소를 알고 있다면 주소를 적고, 우체국의 역할을 하는 무언가에 보내면, 그것이 Bob에게 데이터를 전달해줄 것이다.
  • Bob은 이 데이터를 받고, 데이터를 잘 받았다는 응답(Response)를 Alice에게 다시 보낸다. 역시나 동일하게 Alice가 존재하는 인터넷상의 주소를 적고 우체국의 역할을 하는 무언가에 보내면 완료된다.

 

 

IP(Internet Protocol)

  • 위의 설명에서 조금씩 용어들을 정의하고 구체화시켜보자. 우선 우체국의 역할을 하는 무언가에 대해서 생각해보자.
  • 우체국의 역할을 하는 이 프로그램은 다음과 같은 역할을 해야 한다.
    • 먼저 도착 주소를 이용하여 도착지까지 해당 데이터를 전달한다.
    • 이때 이 데이터를 "패킷(packet)" 이라고 지칭한다.
  • 이 프로그램의 이름은 IP라고 하며 인터넷 프로토콜이라고 부른다.

  • 위 그림과 같이 패킷을 보내기 위해 Alice는 Bob의 주소인 200.200.200.2를 넣고, 동시에 자신의 주소인 100.100.100.1을 출발지 주소로 넣는다.
  • 그럼 이 IP는 인터넷 내부에 존재하는 많은 노드(라우터나, 스위치 등)를 거치면서 Bob의 주소로 패킷을 전달해준다.

  • Bob이 패킷을 수신한 후에 보내는 응답(Response)역시 동일하다. 잘 받았다는 의미의 200 코드(HTTP Response Code)를 넣고, Bob 에서 Alice에게 보내는 것이기 때문에 출발지 IP는 Bob의 것을, 도착지 IP는 Alice것을 사용하여 IP에 위임한다.
  • IP는 역시 아까와 같이 인터넷 내부에 존재하는 많은 노드들을 거쳐 Alice에게 응답 패킷을 전달한다.

 

 

 

IP 의 한계

  • IP 프로토콜은 패킷을 받아 "가장 빠른 경로"로 패킷을 목적지까지 가장 빠르게 전송하는데 모든 역량을 쏟는 프로토콜이다.
  • 문제점은 "빠르게"만 전송하지 "정확하게"나 "안정적으로" 전송하는 것은 IP가 담당하는 기능이 아니라는 점이다.
  • 그래서 IP프로토콜은 비연결성이면서 비신뢰성 프로토콜이라고 한다.
    • 비연결성은 이 패킷을 받을 대상이 존재하지 않거나, 패킷을 받지 못하는 상태여도 패킷을 전송한다.
    • 또한 IP 프로토콜은 패킷이 중간에 손실(lose)되거나, 순서의 변경이 일어나는 것에 대해 책임을 지지 않는다. 즉 IP프로토콜은 해당 문제를 생각하지 않는다.
  • 이러한 문제점으로 인해 IP를 사용하여 패킷을 전송하기 이전에, 먼저 확실하게 두 단말(Alice, Bob)이 연결되어 있는지를 확인하는 체크가 필요하며 이는 IP가 존재하는 계층보다 더 상위에서 먼저 체크를 수행한다.

 

 

인터넷 프로토콜 4계층

  • 어떠한 데이터를 전송하기 위해서는 여러 계층이 존재한다.
  • 크게 4가지로 나뉘어져 있으며 현재는 OSI 7계층으로 세분화되어있다. 지금은 4계층 버전에 대해 알아보도록 한다.
  • 인터넷 프로토콜은 크게 애플리케이션 계층, 전송 계층, 인터넷 계층, 네트워크 인터페이스 계층으로 나눌 수 있다.
    • 네트워크 인터페이스 계층은 패킷을 물리적으로 전송하기 직전 하드웨어에 대하여 다룬다. 보통 LAN 카드 또는 LAN 장비등이 이 계층에 소속된다.
    • 인터넷 계층은 IP, ARP 등 데이터를 어떻게 전송(라우팅)할 것인가에 대해 담당하며 흐름 제어(Flow Controll)나 최단 경로 지정을 수행한다.
    • 전송 계층은 각 호스트 간 어떻게 연결을 설립할 것인가에 대해 담당한다. 해당 계층에서 TCP/UDP가 위치하고 있다. 또한 연결을 수행하는 곳이기도 하다.(OSI에서는 Session 계층에서 담당)
    • 애플리케이션 계층에서는 데이터를 받아 소캣에 보내는 등의 사용자와 인터페이스를 담당한다.
  • IP까진 알아보았으며 이제 TCP/UDP에 대해 알아본다.

 

 

 

TCP/UDP

TCP

  • TCP는 전송 제어 프로토콜이라고 하며 다음과 같은 특성을 가진다.
    • 연결 지향적 프로토콜이다.
    • 데이터의 순서가 보장된다.
    • 데이터가 도착지 호스트까지 도착하는것이 보장된다.
  • 이러한 이유로 인하여 TCP 프로토콜은 신뢰할 수 있는 프로토콜이라고 한다.

TCP의 연결지향성

  • TCP는 3-way-handshake라는 기법을 사용하여 두 호스트를 연결시킨다. 3-way-handshake는 다음과 같이 이루어진다.
    • 클라이언트 호스트는 서버 호스트에게 SYN이라는 데이터가 담긴 패킷을 전송한다. 이 SYN은 동기화를 위해 보내는 패킷이다.
    • 서버에서는 해당 패킷을 받고 클라이언트에게 해당 패킷을 수신받았다는 ACK 패킷과 자신 역시 클라이언트와 동기화하기 위한 SYN 패킷을 전송한다.
    • 클라이언트 역시 해당 패킷을 받고, 다시 서버에게 ACK를 전송하면서 이후에 연결이 이루어지고 데이터가 전송되게 된다.
  • 이 3-way-handshake를 통하여 TCP는 데이터의 순서보장과 도착보장을 이루어낼 수 있다.
    • 먼저 모든 패킷에 대해 수신을 한 경우, 서버는 ACK를 전송한다.(ACK와 함께 여러 데이터를 포함하여 보낸다.) 클라이언트는 해당 ACK를 통해 전송한 데이터가 서버로 잘 수신되었다는것을 검증할 수 있다.
    • 또한 데이터의 순서가 보장된다. 위에서 ACK와 함께 여러 데이터를 포함하여 보내는 것 중 하나가 다음 패킷의 순서번호(seqNo)이다. 즉 서버가 2번 패킷을 수신받았다면 클라이언트에게 다음 패킷인 3번 패킷을 원한다고 전송한다.
    • 만약 4번이 수신되었다면 해당 패킷을 버리고(discard), 다시 3번 패킷을 원한다고 패킷을 전송한다. 클라이언트는 이것을 통해 3번 패킷부터 다시 재전송(Resend)하게 된다. 이를 통해 순서를 보장할 수 있다.
  • TCP는 이러한 신뢰성 보장 이외에도 흐름 제어 및 혼잡 제어 기능들이 존재하고 있다.

UDP

  • UDP는 TCP와는 다르게 비연결성인 프로토콜이다. 기능이 거의 존재하지 않으며 IP와 거의 유사한 동작을 수행하는데 차이점은 포트(Port)의 유무가 차이점이다.
  • UDP는 비신뢰적인 프로토콜이지만 TCP의 신뢰성을 위한 여러 밑작업들을 하지 않기 때문에 이러한 밑작업에 걸리는 시간만큼 더 빠른 전송이 가능하다는 특징이 있다.

 

 

 

Port의 개념

  • 지금까지는 하나의 애플리케이션(또는 프로세스)가 통신하는 상황만을 가정하였다. 문제는 몇개의 애플리케이션이 서로 다른 통신을 수행하고 있는 상황이다.
  • 이 경우 IP 주소만으로는 어떤 프로세스가 어떤 통신을 하는 중인지에 대해 전혀 알 수 없다. 무언가 추가적인 데이터가 있어야 인지할 수 있어 보인다.
  • 이때 이 추가적인 데이터가 포트 번호이다. 포트는 동일한 IP 내부에서 통신하는 각 프로세스들을 구분하는데 사용된다. 만약 A프로세스가 1055포트, B 프로세스가 2014포트라면 이 포트 번호를 통해 동일한 IP에 들어오는 패킷이라도, 포트 번호를 통해 구분해놓을 수 있다.
  • 아파트로 비유하자면 IP주소는 아파트의 동 단위의 주소이고, 포트가 각 호수에 대한 정보라고 할 수 있겠다.

 

 

 

DNS(Domain Name Service)

  • IP주소와 포트를 사용하여 통신하는 것은 좋다. 하지만 우리가 일일히 서버에 통신을 수행할 때 마다 IP 주소와 포트를 알고 있어야 한다는 것은 피곤한 일이다.
  • 따라서 IP 주소를 어떠한 이름으로 매핑하여 기억하는 것이 더 효과적이다. 이때 매핑되는 이름을 도메인 이름(Domain Name)이라고 하며 DNS는 이 도메인 이름을 받아 해당 도메인 이름에 매칭되는 IP 주소를 반환하는 서버이다.
  • 예를 들어 google.com의 IP 주소가 100.100.100.1이라면 우리가 google.com으로 통신을 진행할 시 DNS서버에서 해당 도메인 이름 google.com을 찾은 뒤 해당되는 IP 주소인 100.100.100.1을 응답으로 보내주는 것이다.
  • 이렇게 되면 자동으로 ip 주소를 받아 통신할 수 있으므로 도메인 이름으로 통신을 수행할 수 있다.

'CS > HTTP' 카테고리의 다른 글

HTTP - HTTP 메서드  (0) 2023.05.17
HTTP - HTTP API 설계와 HTTP메서드  (0) 2023.05.15
HTTP - HTTP 메시지 구조  (0) 2023.05.15
HTTP - HTTP의 뜻과 특성  (0) 2023.05.13
HTTP - URI의 개념  (0) 2023.05.11
복사했습니다!