IP, TCP 프로토콜과 URI

EUNJI LEE·2024년 1월 7일
0

웹 지식

목록 보기
1/3
post-custom-banner

IP(인터넷 프로토콜 : Internet Protocol)

멀리있는 컴퓨터와 통신할 때 기본적으로 IP 주소를 가지고 통신하게 된다. 인터넷 프로토콜은 지정한 IP 주소(IP Address)에 데이터를 전달하고 패킷(Packet)이라는 통신 단위로 데이터를 전달하는 역할을 한다.

IP 패킷은 규칙이 존재하는데 IP 패킷을 만들 때 데이터를 보내는 전송 IP 주소와 받는 수신 IP 주소, 전송할 데이터 등을 넣는다. 이렇게 만들어진 패킷을 서로 주고 받아서 통신하게 된다.

💡 Packet?
Package(포장)와 bucket(양동이)의 합성어로 네트워크를 통해 전송되는 형식화된 데이터 덩어리를 말한다.

IP 프로토콜의 한계

하지만 이렇게 IP 프로토콜을 가지고 통신하는 것은 한계가 있다. 우선 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송하기 때문에 비연결성이라는 한계가 존재한다. 그리고 패킷이 중간에 사라지거나 여러 개의 패킷을 넘겼을 때, 순서대로 오지 않을 경우가 발생할 수 있기 때문에 비신뢰성이 존재하고, 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면 프로그램을 구분할 수 없다.

TCP

TCP/IP 패킷 정보

IP 패킷의 경우 출발지 IP, 목적지 IP, 기타 정보를 담고 있다면 TCP 패킷은 출발지 Port, 목적지 Port, 전송 제어, 순서, 검증 정보 등을 담고 있다. 때문에 IP만으로 해결이 안 됐던 순서 제어나 검증에 대한 문제가 해결이 된다.

TCP 특징

전송 제어 프로토콜(Transmission Control Protocol)인 TCP는 연결지향(TCP 3 way handshake)이다. 전송하는 곳과 받는 곳이 연결이 됐는지 안 됐는지 확인하기 때문이다. 또한, 상대가 데이터를 받았는지 안 받았는지 데이터 전달과 순서에 대한 보증이 된다. 때문에 신뢰할 수 있는 프로토콜이다. 현재 대부분 TCP 프로토콜을 사용한다.

TCP 3 way handshake(가상 연결)

클라이언트가 먼저 SYN(접속 요청)을 보내고 서버가 SYN(접속 요청)과 ACK(요청 수락)을 보낸다. 그러고 나서 클라이언트가 다시 ACK(요청 수락)을 보낸다. 그 후에 데이터를 전송하게 된다.

단, TCP 3 way handshake는 실제로 연결이 된 것은 아니고 SYN, ACK를 주고 받으면서 논리적으로 연결이 됐다고 가정하는 것이다. 전용 랜선이 보장되지는 않는다.

UDP

사용자 데이터그램 프로토콜(User Datagram Protocol)인 UDP는 TCP와 같은 계층에 있는 프로토콜이다. UDP는 TCP와 다르게 기능이 거의 없다. IP와 거의 비슷한 수준이지만, UDP에는 Port를 함께 담는다. 이 메시지가 맞는지에 대한 체크섬 정도만 추가되어있다.

💡 체크섬(Checksum)?
네트워크를 통해서 전송된 데이터의 값이 변경되었는지 무결성을 검사하는 값으로 무결성을 이용해서 네트워크를 통해 수신된 데이터의 오류 여부를 확인한다.

UDP는 검증이 확실하지 않지만 기능이 단순한 만큼 속도가 빠르다. TCP 프로토콜이 많은 범위를 차지하고 있지만, HTTP 통신을 할 때 handshake가 일어날 때 걸리는 시간을 줄이기 위해서 UDP의 사용이 조금씩 늘고 있다.

PORT

하나의 IP에 두 개 이상을 연결하려고 했을 때 구분을 하기 위해 포트를 사용한다. 같은 IP 내에서 프로세스를 구분하는 역할을 하는 것이 포트로 예를 들어 하나의 IP 주소에서 게임 프로세스에는 port가 8000이고 웹 브라우저는 10010일 때 게임 프로세스에 접근하려고 하면 해당 포트가 8000인 곳에 데이터를 보내면 된다.

IP가 하나의 아파트라고 생각하면 Port는 호수라고 생각하면 편하다.

💡 포트는 0~65535 사이에 할당이 가능하다.
0~1023 : 잘 알려진 포트로 사용하지 않는 것이 좋다.
* 기본 포트

  • FTP : 20, 21
  • TELNET : 23
  • HTTP : 80
  • HTTPS : 443

DNS(Domain Name System)

IP는 길고 숫자로 되어있어 기억하기 어렵고, 변경될 수 있기 때문에 DNS라는 도메인 네임 시스템을 이용한다. 우리가 흔하게 접속하는 네이버의 아이피 주소는 실제로는 숫자로 되어있겠지만 www.naver.com만 작성하더라도 네이버 웹 사이트에 접속할 수 있는 것처럼 사용 편의를 위해 도메인 네임을 이용한다.

URI(Uniform Resource Identifier)

Uniform은 리소스를 식별하는 통일된 방식, Resource는 URI로 식별할 수 있는 모든 자원, Identifier은 식별하기 위해 필요한 정보를 뜻한다.

URI와 URL/URN

URI라는 리소스를 식별하는 가장 큰 개념이 존재하고 그 안에서 URL과 URN이 존재한다. URL은 Resource Locator로 리소스의 위치를 가르키고 URN은 Resource Name으로 리소스의 이름을 가르킨다.

위치는 변할 수 있지만 이름은 변하지 않는다. 하지만 URN 이름만으로 실제 리소스를 찾을 수 있는 방법은 보편화 되지 않다.

URL 분석하기

https://www.google.com:443/search/q=hello&hl=ko

위 URL에서 맨 앞에 https는 프로토콜 방식, 그 뒤에 나오는 www.google.com은 호스트명, : 뒤에 붙는 숫자가 포트를 의미한다. /search는 패스(경로), 물음표 뒤에 붙는 것은 쿼리 파라미터라고 한다.

scheme 위치에 오는 프로토콜은 어떤 방식으로 자원에 접근할 것인가 하는 약속 규칙을 나타낸다. 호스트명에는 도메인명이나 IP주소를 작성하고, 포트는 생략 가능하다. 패스는 리소스가 있는 경로를 말하는데 보통 계층적 구조( ex) /home/file )로 간다. 쿼리는 key=value 형태로 데이터가 들어가며 물음표(?)로 시작한다. 데이터가 여러 개인 경우 &을 이용해서 추가한다. 쿼리를 보통 웹에서 넘기는 데이터라고 해서 쿼리 파라미터나 전부 문자열로 넘어가기 때문에 쿼리 스트링이라고 많이 부른다.

강의 : 모든 개발자를 위한 HTTP 웹 기본지식 - 김영한님

profile
천천히 기록해보는 비비로그
post-custom-banner

0개의 댓글