-
[네트워크] IP, TCP/UDP, URI 인터넷 프로토콜 살펴보기IT/네트워크 2022. 10. 6. 15:41
컴퓨터는 어떻게 통신하는걸까? 클라이언트가 요청을 하면 복잡한 망을 통해 서버로 전송되는데 IP, TCP/UDP, PORT, DNS, URI 등 관련 용어에 대해 정리해보려고 한다. 정리 내용은 인프런의 김영한 강시님 강의를 토대로 작성된다.
📑 IP 란?
IP는 Internet Protocol의 약자로 osi 7계층 중, 3계층인 네트워크 계층에서 사용하는 프로토콜이다. IP는 서로 다른 운영체제 등을 쓰는 다양한 컴퓨터들이 서로 통신할 때 사용하는 약속된 데이터 이동 간의 규약이다.
IP 주소를 통해 컴퓨터(서버)간 데이터 전송이 이뤄지게 되는데 100.100.100.1 이렇 식으로 컴퓨터의 고유 주소를 의미한다. 즉) 메시지가 목표로 하는 컴퓨터에 잘 도착하도록 해주는 역할로 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.
패킷은 pack과 bucket이 합쳐진 단어로 소포로 비유할 수 있다. IP 패킷은 우체국 송장처럼 전송 데이터를 무사히 전송하기 위해 출발지 IP, 목적지 IP와 같은 정보가 포함되어 있다.
하지만 IP를 사용하면 여러 단점이 있다. 단점들을 살펴보자.
📌 1. 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다. 즉) 클라이언트는 내가 보낸 데이터가 잘 전달되었는지 알 수 없다.
📌 2. 비신뢰성 : 에러제어와 흐름제어를 하지 않기 때문에, 중간에 패킷 소실 또는 패킷 전달 순서에 문제가 생겨도 이런 부분들을 조절해주는 작업을 하지 않는다.
📑 프로토콜 (Protocol)
프로토콜은 네트워크에서 데이터를 주고받는 규칙이나 표준을 의미한다. 프로토콜은 네트워크 통신에서 사용하는 언어와 같으며, 각 프로토콜은 특정한 용도를 가지고 있다. 즉) 통신하는 둘 이상의 원격 개체가 포함된 인터넷 사이 모든 활동은 프로토콜이 제어한다. 어떻게 통신할지 약속한 규칙
📑 TCP
전송계층의 주요 프로토콜인 TCP/UDP에 대해 알아보자.
예를들어 채팅 프로그램을 생각해보자. 먼저 HTTP 메시지가 생성되면 SOCKET 라이브러리를 통해 전달된다. 프로그램이 네트워크에서 데이터를 전송할 수 있도록, 네트워크 환에 연결할 수 있게 만들어진 연결부가 바로 네트워크 소켓이다. 그리고 IP 패킷을 생성하기 전 TCP 세그먼트를 생성한다.!
TCP는 (Transmission Control Protocol)의 약자로 전송 제어 프로토콜이다. TCP의 특징은 다음과 같다.
📌 1. 연결지향
: 3-way handshake를 사용하는 연결지향형 프로토콜이다. 3-way handshake란, 클라이언트는 먼저 서버에 접속을 요청하는 SYN 패킷을 보낸다. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK(Acknowledgment)와 SYN(Syncronize)가 설정된 패킷을 발송하고 클라이언트가 다시 ACK로 응답하기를 기다린다. 만약 클라이언트가 SYN을 보냈는데 서버에서 연락이 없다면 꺼져있다는 판단으로 데이터를 보내지 않는다.
📌 2. 데이터 전달 보증과 순서 보장
: 메시지가 중간에 누락되면 알 수 있다. 데이터를 전송하고, 수신호스트가 데이터를 잘 받았다고 응답해준다. 또한, 순서가 잘못되어 도착한 경우 수신호스트가 송신 호스트에게 여기서부터 다시 전달해!! 라고 알려주기 때문이다.
📌 3. 신뢰할 수 있는 프로토콜
📑 UDP
TCP는 양방향 연결, 가상회선 연결로 신뢰성 있는 경로가 확립된다.
UDP는 비연결형 서비스, 단순한 헤더 구조로 전송 속도가 빠르다. 실시간 전송에 유리하다. 정보처리기사 공부하면서 이렇게 외웠었다. 😃
UDP는 (User Datagram Protocol) 즉 사용자 데이터그램 프로토콜로 데이터 제어에 관한 어떤 기능도 없다. IP와 거의 비슷하지만 여기에 PORT가 추가되었다고 보면 되겠다.
대부분의 전송 방식으로 TCP를 사용하지만 UDP도 요즘 뜨고 있는 추세라고 한다.
📑 PORT
PORT는 논리적인 접속장소를 의미한다. IP는 목적지 서버를 찾는다면, PORT는 그 서버 안에서 돌아가는 애플리케이션을 구분하는 것이라고 할 수 있다. 즉) 같은 IP내에서 프로세스를 구분하는 것이 포트 번호이다.
IP는 00아파트라고 생각한다면 PORT는 동호수를 의미한다고 생각하면 이해하기 빠르다.
데이터를 TCP로 한 번 감싼 다음에 IP로 다시 감쌀 때 TCP에 PROT 번호를 같이 전송했다. 그렇기 때문에 서버에서 클라이언트의 포트 번호를 찾아 알맞은 응답을 해주는 것이다.
사용 예시를 살펴보자
🔖 웹 서버(HTTP)
: 웹 서버는 기본적으로 80번 포트에서 HTTP 요청을 수신한다. 예를 들어, 사용자가 브라우저에서 'http://example.com'에 접속하면, 요청이 서버의 80번 포트로 전달된다.
🔖 보안 웹 서버(HTTPS)
: 보안 연결을 위해서는 443번 포트가 사용된다. 예를 들어, 'https://example.com'으로 접속하면 ,HTTPS 요청이 서버의 443번 포트로 전달된다.
🔖이메일 서버(SMTP)
: 이메인 전송 프로토콜인 SMTP는 일반적으로 25번 포트를 사용한다.
📑 HTTP/HTTPS
🔖 HTTP (Hypertext Transfer Protocol)
: 웹에서 하이퍼텍스트 문서를 주고받기 위한 프로토콜이다. 데이터를 암호화하지 않고 전송하므로, 중간에서 누군가 데이터를 가로챌 수 있다. "http://example.com'에 접속하면, 브라우저와 웹 서버 간 주고받는 데이터가 암호화 되지 않은 상태로 전송된다.
🔖 HTTPS (Hypertext Transfer Protocol Secure)
: HTTP에 보안 계층(SSL/TLS)을 추가하여 데이터를 암호화하고, 전송 중에 보호한다. 보안이 중요한 웹 페이지에서 주로 사용된다. "https://example.com"에 접속하면 브라우저와 웹 서버 간에 주고받는 데이터가 SSL/TLS로 암호화되어 전송된다. 이 방식은 비밀번호 입력 페이지나 온라인 쇼핑 사이트에서 매우 중요하다.
📑 DNS
IP는 기억하기 어려우며 변경될 가능성이 있다. 그럴때마다 새로운 IP가 뭐였지? 요청하거나 알아보기엔 너무 번거롭다. 따라서 www . google . com 같은 도메인 명을 사용하게 되는데 이런 도메인명은 컴퓨터가 알아듣지 못한다.
이런 도메인 명을 IP 주소로 변환하는 게 바로 DNS (Domain Name System)이다.
이렇게 도메인 명으로 지정해두면 사용자는 google.com 을 검색하면 IP 주소는 DNS가 알아서 찾아준다. 사용자가 일일이 사이트의 IP를 알 필요가 없는 것이다.
📑 URL과 URI
📌 URI (Uniform Resource Identifier)의 약자로 리소스 식별하는 통일된 방식, 자원은 URI로 식별할 수 있는 모든 것을 의미, 식별은 다른 항목과 구분하는데 필요한 정보를 의미한다. 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스이다.
📌 URL (Uniform Resource Locator)의 약자로 흔히 웹 주소라고 하며, 리소스가 있는 위치를 지정한다.
예를 들어보면
https:// wonisdaily.tistory.com /index.htmld 는 URI이면서 URL이지만
https:// wonisdaily.tistory.com /index는 URI이지만 URL은 아니다.
두 주소는 모두 index.html을 가리키고 있지만 첫번째 주소는 웹서버의 실제 파일 위치를 나타내는 주소이므로 URI면서 URL이지만 두 번째 주소는 실제로 Index라는 파일이 웹서버에 존재하지 않으므로 URL은 아니다. 하지만 서버 내부에서 이를 처리하여 결국 index.html을 가리키기 때문에 URL라고 볼 수 있다.
📑 웹 브라우저의 요청과 흐름
만약 웹 브라우저에서 구글 서버에 https: www. google. com/ search?q=hello & hi=ko 라는 요청을 했다고 가정하자. 위의 URL을 가지고 DNS 조회 HTTPS PROT 생략 등 작업을 처리한 후 HTTP 요청 메시지를 생성한다.
HTTP -> TCP/IP에 의해 감싸진 패킷을 생성해서 구글 서버로 요청한다. 그럼 구글 서버에서는 TCP/IP는 까서 버리고 요청 메시지 HTTP를 확인한다.
메시지를 확인한 후 HTTP 응답 메시지 ( 상태코드, Content-Type, Length, <html></html> )를 웹 브라우저에 전송해서 원하는 페이지를 띄운다던가, 작업을 실행한다던가 응답을 통해 요청을 처리해준다.
이거 바로 웹 브라우저의 요청과 흐름이다.
📑 예시 상황 - 웹 사이트 접속 예시 (HTTP/HTTPS, IP 주소, 포트, 프로토콜 모두 연관)
▶️ 사용자가 'https://www.example.com'에 접속한다.
▶️ DNS 조회 : 브라우저가 'www.example.com'의 IP 주소를 DNS 서버에서 조회한다. 예를 들어 IP 주소가 '203.0.113.1'이라고 가정한다.
▶️ TCP 연결 : 브라우저는 TCP 프로토콜을 사용하여 서버의 IP 주소 '203.0.113.1'에 연결한다.
▶️ 포트 연결 : HTTPS 요청이므로,브라우저는 자동으로 443번 포트에 연결한다.
▶️ SSL/TLS : 서버와 브러우저 간에 SSL/TLS 암호화가 설정하고, HTTPS 프로토콜을 통해 안전하게 데이터를 주고받는다.
📑 예시 상황 - 이메일 전송 예시(포트, 프로토콜)
▶️ 사용자가 이메일 클라이언트 (ex. Outlook)에서 이미엘일 보낸다.
▶️ 클라이언트는 SMTP 프로토콜을 사용하여 메일 서버에 이메일을 전송한다.
▶️ 이때, 기본적으로 25번 포트가 사용된다. 보안이 강화된 경우 SSL/TLS를 통해 암호화된 연결을 설정하며 465포트나 587포트를 사용할 수 있다.
[참고]
반응형'IT > 네트워크' 카테고리의 다른 글
[네트워크] 1. 네트워크와 케이블 (LAN, 이더넷, MAC, 캐스트, OSI 7 Layer) - 후니의 쉽게쓴 시스코 네트워킹 (0) 2024.08.22 [네트워크] 쿠키, 세션, 캐시 정의와 차이점 알아보기 (0) 2022.10.09 [네트워크] HTTP 상태코드 정리 (0) 2022.10.07 [네트워크] HTTP 메소드 (GET, POST, PUT, PATCH, DELETE) (1) 2022.10.07 [네트워크] HTTP란? (특징, 구조, 상태, 메시지) (0) 2022.10.06