Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

봄디의 개발일지

[HTTP] 인터넷 네트워크 (IP, TCP/UDP, DNS) 본문

HTTP

[HTTP] 인터넷 네트워크 (IP, TCP/UDP, DNS)

bomdy 2024. 9. 15. 21:29

1️⃣ IP (Internet Protocol)

IP란 ? 인터넷에 연결되어 있는 모든 장치들을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소입니다. 

IP 인터넷 프로토콜의 역할은 지정한 IP 주소에 데이터를 전달하고, 패킷 통신 단위로 데이터를 전달합니다. 

IP 패킷 정보 그림

 

IP 패킷에는 위의 그림과 같이 출발지 IP, 목적지 IP 와 전송할 데이터가 담겨있습니다. 

 

클라이언트서 자신의 출발 IP 주소와,  목적지 IP 주소와 전송할 데이터를 담아서 보내면 , 서버에서 데이터를 확인해 다시 클라이언트로 잘 받았다는 응답 메시지를 담은 패킷을 생성하여 클라이언트로 전송합니다. 

 

위와 같은 IP 프로토콜이 가지고 있는 한계점이 있습니다. 

  • 비연결성 (패킷을 받은 대상이 없거나 서비스 불능 상태여도 패킷을 전송합니다. )
  • 비신뢰성 (중간에 패킷이 사라지거나, 패킷이 순서대로 오지 않을 가능성이 있습니다.)
  • 프로그램 구분 (같은 IP 주소를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면 문제가 발생할 수 있습니다. )

이런 IP 프로토콜이 가지고 있는 단점을 해결하기 위해 나온 것이 바로 TCP 입니다. 


 

2️⃣ TCP (Transmission Control Protocol) - 전송 제어 프로토콜

인터넷 프로토콜 스택을 4계층으로 나눈다면 아래와 같이 나눌 수 있습니다.

애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층

 

프로토콜 계층

 

Hello, world! 라는 메시지를 보내고 싶을 때, 보통 소켓 라이브러리를 사용합니다. 소켓 라이브러리를 통해서 OS 계층에 메시지를 넘깁니다. TCP 정보를 생성하고, 한 칸 더 내려가서 IP 와 관련된 데이터를 씌워서 IP 패킷을 만들게 됩니다. 결국 IP 패킷에는 IP와 관련된 정보와 더불어 TCP와 관련된 정보를 가지고 있고, 그 안에 메시지를 포함하고 있습니다. 

마지막에는 네트워크 인터페이스 계층에서 이더넷 프레임이 포함되게 되고, 서버로 전송되게 됩니다. 

 

TCP/IP 패킷 정보

 

위에서 말했듯이 IP 패킷에는 출발지 IP, 목적지 IP, 보낼 데이터를 가지고 있는데, TCP/IP 패킷에는 추가로 출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보 등등의 정보들을 더 포함하고 있습니다. 

여기서 PORT (포트) 란 ?

평소에 포트번호라고 많이 들어보셨을 것 같은데요, IP 주소만으로는 한계점이 존재합니다. 같은 IP 주소를 사용하고 있는 프로세스가 게임 서버, 화상통신, 웹 브라우저 요청 등등 여러 개 존재할 수 있기 때문에 이를 구분할 수 있는 PORT(포트)가 필요합니다.  

PORT 그림

 

위의 그림처럼 동일한 IP 주소를 사용하더라도 포트번호를 통해 프로세스들을 구분할 수 있습니다. 

포트번호는 0~65535 까지 할당이 가능하며, 0~1023 포트는 잘 알려진 포트로, 사용하지 않는 것이 좋습니다. 

대표적으로 잘 알려진 포트는 FTP -20,21, TELNET - 23, HTTP - 80, HTTPS - 443 포트입니다. 

 

TCP/IP 패킷은 IP 패킷에는 없던 이러한 포트번호를 추가하고 있습니다.

 

🌟 TCP 특징

  • 연결지향 - TCP 3 way handshake (가상 연결)
  • 데이터 전달 보증
  • 순서 보장
  • 신뢰할 수 있는 프로토콜이며, 현재 대부분 TCP 를 사용하고 있습니다.

✔ TCP 3 way handshake 란 ?

TCP 3 way handshake

 

클라이언트와 서버가 받을 수 있는 상태인지 가상으로 연결하는 것을 의미합니다.

클라이언트에서 SYN 으로 접속을 요청하고, 서버에서 요청을 받았다는 의미로 SYN + ACK 를 다시 클라이언트로 전송합니다. 클라이언트에서 다시 요청 수락의 의미로 ACK 를 전송하고, 최근에는 ACK와 함께 데이터를 함께 보내고 있습니다. 

즉, 이를 통해 서버가 받을 수 있는 상태인지를 검증할 수 있습니다. 따라서 데이터의 전달이 보증됩니다. 

 

✔ 순서 보장 ?

TCP 순서 보장

 

클라이언트에서 패킷1, 패킷2, 패킷3 순서로 전송하는데, 중간에 복잡한 인터넷 망을 거쳐 서버로 전송되는 것이기 때문에 패킷의 순서가 보장되지 않을 수 있습니다. 서버에서 만약 패킷1, 패킷3, 패킷2 순서로 순서가 제대로 오지 않았다면, 클라이언트에게 다시 패킷2부터 다시 보내라고 전달을 하므로써 패킷들의 순서를 보장할 수 있습니다. 


3️⃣ UDP (User Datagram Protocol) - 사용자 데이터그램 프로토콜

UDP 는 IP 와 거의 동일한 특징을 가지고 있습니다. 

연결 지향 X , 데이터 전달 보증 X, 순서 보장 X 이므로, TCP 가 가지고 있는 특징은 가지고 있지 않습니다.

그러나, TCP 는 연결을 보장하고 데이터를 전달하므로 속도가 느리다는 단점이 존재하는데 UDP 는 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠르다는 특징을 가지고 있습니다.

정리하자면, UDP 는 IP 와 거의 동일하고, IP 에 PORT 와 체크섬 정도만 추가된 것이라고 이해하면 될 것 같습니다. 


4️⃣ DNS (Domain Name System) - 도메인 네임 시스템

지금까지 TCP/IP 패킷에는 출발지와 목적지의 IP 주소를 필요로 했습니다. 그러나, IP 주소는 기억하기 어려울 뿐더러 IP 주소는 변경될 수 있습니다. DNS 는 도메인 명을 등록해서 사용할 수 있도록 도와줍니다. 

DNS 는 전화번호부라고 생각하면 편하고, 도메인 명을 IP 주소로 변환해주는 시스템입니다. 

 

DNS

 

위의 그림과 같이 200.200.200.2 번의 IP 주소를 가진 도메인 이름을 google.com 이라고 가정하겠습니다. 

클라이언트에서 google.com 이라는 도메인 명을 DNS 에서 찾으면 도메인 명에 해당하는 IP 주소를 응답합니다.

해당 IP 주소를 가지고 클라이언트는 서버와 통신을 하게 됩니다. 

IP 주소는 외우기도 어렵고 변경될 수 있으므로 DNS 를 사용합니다. 


 

🔍 참고글

인프런 김영한 강사님의  [모든 개발자를 위한 HTTP 웹 기본 지식] 섹션 1. 인터넷 네트워크 강의를 참고하여 작성했습니다.