네트워크(TCP/UDP,IP,URI/URL)

앞서 해당글은 인프런에 있는 '모든 개발자를 위한 HTTP 웹 기본 지식' 강의를 기반으로 추가 보충하여 공부하고 정리한 내용들로 해당 강의 자료를 일부 사용하였습니다. 강의를 듣고자 하시는 분은 아래 링크로 가셔서 들으시면 되겠습니다. 

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., - 강의 소개 | 인프런

www.inflearn.com


IP 프로토콜

IP (Internet Protocol) 프로토콜은 인터넷에서 컴퓨터나 장치 간에 데이터를 주고받기 위해 사용되는 프로토콜 중 하나입니다. IP 프로토콜은 패킷 교환 네트워크에서 데이터 패킷의 전송을 담당합니다.

 

IP 패킷은 데이터를 주고 받을 때 사용되는 일종의 운반 수단이며, 데이터를 담아 출발지에서 목적지로 전송됩니다. 각각의 패킷은 출발지 IP 주소와 목적지 IP 주소가 있으며, 이를 기반으로 라우터 등의 중계 장치를 통해 목적지까지 전송됩니다.

IP 패킷은 일종의 우편물과 비슷한 역할을 합니다. 출발지에서 패킷을 보내면, 이는 중계 장치를 통해 목적지까지 도달하게 되며, 목적지에서는 해당 패킷을 받아 데이터를 추출하여 사용합니다. 이러한 방식으로 IP 프로토콜은 인터넷에서 컴퓨터나 장치 간의 통신을 가능케 합니다.

 

IP 프로토콜의 한계

IP 프로토콜은 인터넷에서 데이터를 전송하는 데 가장 기본적인 프로토콜 중 하나입니다. 그러나 IP 프로토콜은 몇 가지 한계가 있습니다.

  • 비신뢰성: IP 프로토콜은 데이터의 전송이 보장되지 않습니다. 패킷이 유실될 수 있고, 전송 순서가 바뀔 수 있습니다.
  • 비연결성: IP 프로토콜은 상대방의 상태를 보장하지 않습니다. 상대방이 받을 수 없는 상태여도 데이터가 전송됩니다.
  • 무결성: IP 프로토콜은 데이터의 무결성을 보장하지 않습니다. 데이터가 손상될 수 있고, 변경될 수 있습니다.
  • 보안성: IP 프로토콜은 보안성이 떨어집니다. 데이터가 제 3자에게 노출될 가능성이 있습니다.
  • 확장성: IP 주소의 한계로 인해 인터넷이 계속 성장함에 따라 IP 주소의 부족 문제가 발생할 수 있습니다.

TCP

TCP (Transmission Control Protocol)는 전송 계층 프로토콜 중 하나로, IP 프로토콜의 한계를 보완하여 안정적인 데이터 전송을 보장합니다.

 

TCP는 신뢰성이 높은 연결형 프로토콜로, 데이터 전송 과정에서 패킷의 손실 또는 오류가 발생하면 재전송을 수행하여 데이터 전송의 완전성을 보장합니다. 이를 위해 TCP는 각각의 패킷에 일련번호와 확인 응답 번호를 부여하여 손실된 패킷을 재전송하고, 수신측에서는 이를 확인하여 데이터 전송을 완료합니다.

 

TCP 3 way handshake

TCP 3-way handshake는 TCP 프로토콜을 사용하여 데이터 통신을 시작하기 전에 클라이언트와 서버 간에 필요한 초기화를 수행하는 과정입니다.

  • 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 전송합니다. 이 패킷에는 클라이언트가 사용할 임시 포트 번호와 초기 순서 번호가 포함되어 있습니다.
  • 서버는 클라이언트로부터 SYN 패킷을 받으면, 클라이언트로부터의 요청을 받아들이는 것으로 응답하기 위해 ACK와 SYN이 모두 설정된 패킷을 클라이언트로 전송합니다. 이 패킷에는 서버가 사용할 임시 포트 번호와 초기 순서 번호가 포함됩니다.
  • 클라이언트는 ACK 패킷을 서버로 전송하여 연결 설정을 확인합니다. 이후부터는 데이터가 실제로 주고받을 수 있는 연결이 설정됩니다.

 

이와 같은 3-way handshake 과정을 통해 클라이언트와 서버는 서로 통신할 준비가 된 것이며, 이후에는 데이터 전송이 가능해집니다.

 

TCP 4 way handshake

TCP 4-way handshake는 연결된 TCP 세션을 종료하는 방법입니다. 클라이언트와 서버 간에 연결된 TCP 세션을 종료할 때 사용됩니다.

  • 클라이언트는 서버에게 세션 종료 요청을 보내기 위해 FIN(Final) 패킷을 전송합니다.
  • 서버는 FIN 패킷을 받고, 세션을 종료하겠다는 ACK(Acknowledgement) 패킷을 보냅니다.
  • 서버는 더 이상 보낼 데이터가 없다면, 자신도 세션 종료를 위해 FIN 패킷을 전송합니다.
  • 클라이언트는 FIN 패킷을 받고, 세션을 종료하겠다는 ACK 패킷을 보내며, 이로써 세션 종료가 완료됩니다.

이렇게 4-way handshake를 통해 클라이언트와 서버는 안전하게 연결된 TCP 세션을 종료할 수 있습니다.


UDP

UDP는 (User Datagram Protocol) 의 약자로, 데이터 전송 프로토콜 중 하나입니다.

 

TCP와 달리 UDP는 연결 지향적인 프로토콜이 아니며, 패킷을 보내는 쪽과 받는 쪽에 대한 어떤 정보도 저장하지 않습니다. 또한 패킷 전송 시의 오류 검사나 복구 등의 기능을 제공하지 않기 때문에 신뢰성이 낮습니다. 이러한 특성으로 인해 TCP보다는 빠른 전송이 가능하며, 신뢰성보다는 속도가 중요한 경우에 많이 사용됩니다.


Port

인터넷에서 데이터가 오고 가는 과정에서 데이터를 식별하고 구분하기 위한 번호를 포트(port)라고 합니다. 각 포트는 16비트 숫자(0 ~ 65535)로 표현되며, 특정 애플리케이션이나 서비스가 특정 포트를 사용하도록 예약되어 있습니다.

 

포트는 크게 두 가지로 구분됩니다. 하나는 잘 알려진 포트(Welknown port)이고, 다른 하나는 등록된 포트(Registered port)입니다. 잘 알려진 포트는 0번부터 1023번까지의 포트이며, 주로 네트워크에서 널리 사용되는 프로토콜이나 서비스에 예약되어 있습니다. 예를 들어 80번 포트는 HTTP 서비스를 위해 예약되어 있습니다. 등록된 포트는 1024번부터 49151번까지의 포트로, 애플리케이션에서 사용되는 포트 중에서 고유한 포트 번호를 필요로 하는 경우에 사용됩니다.

포트 번호는 그 호스트 내에서 통신하는 프로세스를 구분하는데 사용됩니다. 따라서 같은 IP 주소를 사용하는 호스트에서 여러 개의 프로세스가 동작하고, 각각의 프로세스는 서로 다른 포트 번호를 할당받아 통신을 합니다. 예를 들어, 웹 브라우저는 80번 포트를 사용하여 HTTP 프로토콜을 사용하는 웹 서버와 통신을 하고, 동시에 같은 호스트에서 FTP 프로토콜을 사용하는 FTP 클라이언트가 21번 포트를 사용하여 FTP 서버와 통신을 할 수 있습니다.


DNS

DNS는 Domain Name System의 약자로, 인터넷에서 사용되는 호스트 이름과 IP 주소를 매핑하는 시스템입니다. 인터넷에 연결된 모든 기기는 IP 주소를 가지고 있습니다. 하지만 이러한 IP 주소는 숫자로 되어 있어서 사람이 외우기 어렵기 때문에 DNS를 사용하여 호스트 이름을 IP 주소로 변환합니다.


URI, URL, URN

URI (Uniform Resource Identifier)는 인터넷에 있는 정보 리소스를 나타내기 위한 식별자로서, 리소스를 유일하게 식별하기 위한 문자열의 집합입니다.

 

URL (Uniform Resource Locator)은 URI의 하위 집합으로, 인터넷 상에서 리소스의 위치를 나타내는 것입니다. 일반적으로 "http://www.example.com" 과 같은 형태로, 프로토콜, 호스트, 포트, 경로 등을 포함합니다. 즉, URL은 어떤 자원이 어디에 위치해 있는지를 알려주는 역할을 합니다.

 

URN (Uniform Resource Name)은 URI의 또 다른 하위 집합으로, 인터넷 상에서 리소스의 이름을 나타냅니다. 예를 들어, "urn:isbn:0451450523"과 같은 형태로, 리소스의 유형과 이름을 명시합니다. URN은 리소스의 위치가 아닌 이름을 사용하여 식별합니다.

 

요약하면, URI는 인터넷 상에서 유일하게 식별할 수 있는 자원을 나타내는 문자열의 집합이며, URL은 리소스의 위치를 나타내는 URI의 하위 집합입니다. URN은 리소스의 이름을 나타내는 URI의 하위 집합입니다.

 

URL의 구조

URL은 일반적으로 웹 주소로 알려져 있으며, 웹 브라우저에서 특정 웹 페이지를 요청할 때 사용됩니다. URL은 다음과 같은 구성 요소로 이루어져 있습니다.

프로토콜://사용자이름:비밀번호@호스트이름:포트번호/경로?쿼리스트링#프래그먼트
  • 프로토콜(Protocol): 요청하는 웹 페이지의 프로토콜을 나타냅니다. 예를 들어, HTTP, HTTPS, FTP 등이 있습니다.
  • 사용자이름(User name): 웹 페이지를 요청할 때 사용되는 사용자 이름을 나타냅니다. 보통은 생략됩니다.
  • 비밀번호(Password): 웹 페이지를 요청할 때 사용되는 비밀번호를 나타냅니다. 보통은 생략됩니다.
  • 호스트이름(Host name): 요청하는 서버의 호스트 이름이나 IP 주소를 나타냅니다.
  • 포트번호(Port number): 요청하는 서버의 포트 번호를 나타냅니다. 대부분의 경우, 생략됩니다.
  • 경로(Path): 요청하는 웹 페이지의 경로를 나타냅니다.
  • 쿼리스트링(Query string): 웹 페이지를 요청할 때 전달하는 매개변수를 포함한 문자열입니다.
  • 프래그먼트(Fragment): 웹 페이지에서 특정 부분을 나타내는 앵커를 포함한 문자열입니다.

 

예를 들어, 다음과 같은 URL은 "https://www.example.com:8080/products?id=12345#details"입니다.

  • 프로토콜: HTTPS
  • 호스트이름: www.example.com
  • 포트번호: 8080
  • 경로: /products
  • 쿼리스트링: id=12345
  • 프래그먼트: details

'CS 지식 > 네트워크' 카테고리의 다른 글

Http 프로토콜 구조  (0) 2023.05.08
HTTP 2xx, 3xx, 4xx, 5xx 상태코드  (0) 2023.05.06
HTTP 메소드 및 메소드의 속성  (0) 2023.05.06
HTTP  (0) 2023.05.04
REST, REST API, RESTful  (3) 2023.01.25