

IP (Internet Protocol)
IP란 Internet Protocol 의 약자이다.
그러면 IP (인터넷 프로토콜)의 역할은 뭐일까?
- 지정한 IP 주소 (ip address) 에 데이터 전달
- 패킷 (packet) 이라는 통신 단위로 데이터 전달
IP 패킷 이란?
=> 인터넷 프로토콜(IP)을 통해 데이터를 전송할 때 사용되는 데이터 단위 이다.
패킷에는 주로 두 부분이 포함돼있다.
- 헤더(header)
- 데이터(payload)
헤더에는 패킷을 올바르게 전송하고, 조립하며, 처리하기 위해 필요한 제어 정보가 담겨져있고,
데이터에는 실제로 전송하려는 사용자 데이터 (예: 이메일 메시지, 웹 페이지 등)가 포함돼있다.
그렇다면 IP 헤더의 콘텐츠로는 뭐가 있을까?
- 버전 (IPv4 인지? IPv6인지?)
- 헤더길이 (헤더의 끝과 데이터의 시작부분을 알 수 있음)
- 프로토콜 유형
- 출발지 IP 주소
- 목적지 IP 주소
전달 되는 과정을 짧게 보자면,
클라이언트에서 서버까지 패킷을 전달하고
서버에서 패킷 전달 결과를 클라이언트에 보내준다.
하지만 이 방식만으로는 한계가 존재한다.
IP 프로토콜의 한계
- 비연결성 => 서비스 불능 상태여도 패킷을 전송함;
- 비신뢰성 => 중간에 패킷이 소실되면? 혹은 패킷의 순서가 보장이 안된다면?
- 여러 애플리케이션을 구분하기 어려움 => 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 두개 이상이면 ?
- 보안취약성 => 암호화나 인증 메커니즘을 기본적으로 포함하지 않아서 취약함.
이런 IP 프로토콜의 한계를 해결하기위해 나온게 TCP 라는 프로토콜이다.

일단 위 그림을 참조해보면,
http 사용자 데이터 를 서버 측으로 보낼 때
http 사용자 데이터를 TCP 데이터가 감싸게 되고,
TCP 데이터를 IP와 관련된 데이터들이 감싸게 된다.
이렇게 해서 IP 패킷이 생성이 되는데
결국 IP 패킷은 IP와 관련된 데이터가 있고,
그 안에는 또 TCP와 관련된 데이터가 있으며
또 그 안쪽에는 실제 사용자가 만든 데이터나 메시지가 존재하는 것이다.
그리고 이 IP 패킷이 네트워크 인터페이스(Data Link Layer)를 통해서 (LAN카드를 통해서) 나갈 때
이더넷 프레임이라는게 포함돼서 나간다.
- 이더넷 프레임 => 랜카드에 등록된 MAC 주소나 물리적인 정보들이 포함돼있음.

위에서 사용자가 전송할 데이터에 TCP 정보가 감싸진다고 했다.
이 TCP 정보에는
출발지 port (Source Port),
목적지 port (Destination Port),
전송제어,
순서,
검증 정보 등이 있다.
그래서 IP 만으로 해결이 안 됐던 순서 제어문제 등이 해결되는 것이다.
TCP(Transmission Control Protocol)
인터넷에서 데이터를 안정적으로, 순서대로, 에러 없이 전송하기 위해 설계된 핵심 프로토콜 중 하나이다.
TCP는 인터넷 프로토콜 스택의 전송 계층에 위치하며,
응용 프로그램 간의 데이터 스트림 전송을 관리한다.
1. 연결 지향성(Connection-oriented)
- TCP는 통신을 시작하기 전에 먼저 연결 설정 과정을 거친다. 이 과정은 "3-way handshake"로 알려져 있으며, 통신하는 두 장치 간에 연결이 성공적으로 수립되었는지 확인한다.
잠깐, 3-way handshake 란?

3-way handshake는 친구와 악수를 하듯이
컴퓨터가 인터넷에서 서로 '안녕하세요' 하고 대화를 시작하기 전에 인사를 나누는 것과 같다.
이 과정을 통해 두 컴퓨터는 서로 대화할 준비가 되었다고 확인한다.
쉽게 말해서,
컴퓨터 A와 컴퓨터 B가 서로 통신을 시작하기 전에 세 번의 특별한 메시지를 주고받는 건데,
이렇게 세 단계로 이루어진 과정을 "3-way handshake"라고 한다.
- 첫 번째 단계: 컴퓨터 A가 컴퓨터 B에게 "안녕, 너와 이야기하고 싶어!"라고 말한다. 이걸 SYN(Synchronize) 신호라고 일컫는다.
- 두 번째 단계: 컴퓨터 B가 컴퓨터 A의 인사를 받고, "안녕, 나도 너와 이야기하고 싶어! 너의 인사를 들었어." 라고 대답해준다. 컴퓨터 B는 여기서 SYN 신호와ACK(Acknowledgment) 신호를 함께 보내는데, ACK 신호는 컴퓨터 A의 인사를 잘 받았다는 의미이다.
- 세 번째 단계: 마지막으로, 컴퓨터 A가 컴퓨터 B에게 "좋아, 네 인사도 잘 받았어. 이제 우리 대화 시작할까?"라고 마지막으로 인사를 한다. 이때는 ACK 신호를 보내서 컴퓨터 B에게 인사를 잘 받았다고 알려준다.
이 세 단계를 모두 마치면,
컴퓨터 A와 B는 서로 준비가 되었다는 것을 확인하고,
이제 안정적으로 데이터를 주고받을 수 있게 된다.
이런 방식으로 컴퓨터들은 대화를 시작하기 전에 서로를 확인하고,
안전하게 정보를 주고받을 수 있는 준비를 하는거다.
이어서 TCP의 두번째 특징부터 나열하겠다.
2. 신뢰성 있는 전송(Reliable Transmission)
- TCP는 패킷 손실, 순서 변경, 중복 전송 등의 문제를 처리하여 데이터가 목적지에 정확하고 안전하게 도달하도록 보장한다.
- 이를 위해 송신 측은 수신 측으로부터 데이터 패킷의 수신 확인(acknowledgement)을 받게 되며, 확인되지 않은 패킷은 재전송된다.
3. 데이터 순서 보장(Data Sequencing)
- TCP는 전송된 각 데이터 패킷에 순서 번호를 할당하여, 목적지에서 데이터가 원본 순서대로 재조립될 수 있도록 한다. 이는 데이터의 순서가 뒤바뀌거나 중복되는 것을 방지해준다.
4. 흐름 제어(Flow Control)
- TCP는 송신자와 수신자 사이의 데이터 처리 속도 차이를 관리하기 위해 흐름 제어 기능을 제공한다.
- 이를 통해 수신자의 버퍼가 넘치지 않도록 송신 속도를 조절해준다.
5. 혼잡 제어(Congestion Control)
- 네트워크 혼잡 상황을 감지하고 대응하여, 네트워크 내의 데이터 트래픽이 과도하게 증가하는 것을 방지한다.
- TCP는 패킷 손실이 혼잡의 신호로 간주될 수 있음을 인식하고, 이에 따라 데이터 전송 속도를 조절하여 혼잡을 완화해준다.
6. 전이중(Full-duplex), 점대점(Point-to-point) 통신
전이중(Full-Duplex)은 전송이 양방향으로 동시에 일어날 수 있다는 것이고
점대점(Point to Point)는 각 연결이 정확히 2개의 종단점을 가지고 있다는 것이다
- TCP는 전이중 통신을 지원하여, 두 통신 장치가 동시에 데이터를 송수신할 수 있다.
- 점대점 통신을 통해 특정 송신자와 수신자 간에 직접적인 연결을 제공한다.
TCP의 이러한 특징들은 웹 브라우징, 이메일 전송, 파일 전송 등
대부분의 인터넷 응용 프로그램에서 필요로 하는 신뢰성 높은 데이터 전송을 가능하게 해준다.
TCP는 UDP(User Datagram Protocol)와 대비되는데,
UDP는 연결 지향성, 신뢰성 있는 전송, 데이터 순서 보장 같은 기능을 제공하지 않아
속도가 더 빠르지만 신뢰성이 부족한 통신을 제공한다.
UDP 는 IP 프로토콜 + 포트 라고 생각하면된다.
UDP는 직접 수정해서 최적화 할 수도 있는데 반해 TCP 는 애초에 수정 못한다.
현재는 대부분 TCP 를 사용한다.
포트 (Port)
TCP와 UDP 에는 포트가 있다고 했다.
기본적으로 클라이언트 자신이 할당 받은 하나의 IP 가 있을거다.
IP는 목적지 서버를 찾는거고,
그 서버 안에서 돌아가는 애플리케이션들을 구분하는게 Port(포트)라고 이해하면 된다.
DNS (Domain Name System)
DNS는
인터넷의 전화번호부와 같은 역할을 하는 중요한 시스템 이다
인터넷이 등장하고 네트워크 상의 컴퓨터들이 점점 늘어나기 시작하면서,
각 컴퓨터를 구분하기 위해 IP 주소라는 고유한 숫자의 나열을 사용하게 되었다고 한다.
근데 이러한 숫자들은 사람이 기억하기 어려워서,
보다 쉽게 컴퓨터를 식별하고 접근할 수 있는 방법이 필요해졌다.
이 문제를 해결하기 위해 1983년에 DNS가 탄생하게 됐다.
DNS의 자세한 탄생 배경 :
초기 인터넷에서는 호스트 파일 (HOSTS.TXT) 을 사용해서
컴퓨터 이름과 해당 IP 주소의 매핑을 관리했는데,
이 파일은 인터넷에 연결된 모든 컴퓨터에 수동으로 업데이트되어야 했고,
네트워크의 크기가 커짐에 따라 이 방식은 점점 비효율적이고 관리하기 어려워졌다.
따라서, 더 크고 동적인 인터넷 환경에서
호스트 이름과 IP 주소의 매핑을 자동으로 관리할 수 있는 새로운 시스템이 필요해졌는데,
이때 연구자들에 의해 DNS가 개발되었다.
DNS는 계층적이고 분산된 데이터베이스 시스템을 사용해서
인터넷 상의 도메인 이름과 IP 주소의 매핑 정보를 관리한다.
DNS의 역할 :
DNS의 기본적인 역할은
사람이 읽을 수 있는 도메인 이름(예: www.naver.com)을
컴퓨터가 이해할 수 있는 IP 주소(예: 192.0.2.1)로 변환하는 것이다.
이 과정을 "이름 해석(Name Resolution)"이라고 한다.
DNS는 다음과 같은 역할을 수행한다.
- 이름 해석: 사용자가 웹 브라우저에 도메인 이름을 입력하면, DNS 서버는 해당 도메인 이름에 매핑된 IP 주소를 찾아 사용자를 올바른 서버로 안내해준다.
- 분산 데이터베이스: DNS 정보는 전 세계에 분산된 수많은 DNS 서버에 저장되어 있는데, 이 분산 구조는 시스템의 신뢰성과 확장성을 높여준다.
- 도메인 관리 : DNS는 도메인 이름을 구조화하고 관리하는 계층적 시스템을 제공해주는데, 이를 통해 도메인 이름의 등록, 이전, 삭제 등을 쉽게 해준다.
DNS는 인터넷 사용의 핵심 부분으로,
사용자가 웹 사이트에 접근하거나 이메일을 주고받는 과정에서 투명하게 작동한다.
DNS 덕분에 우리가 복잡한 IP 주소를 기억할 필요 없이, 쉽게 인터넷 상의 자원에 접근할 수 있는 것이다.
'개발 > CS' 카테고리의 다른 글
HTTP 와 HTTPS 그리고 SSL (0) | 2023.07.20 |
---|---|
Rendering (렌더링) 이란? (0) | 2023.03.08 |
논리회로 간단하게 훑어보기? (0) | 2023.03.06 |
개발 블로그
포스팅이 좋았다면 "좋아요❤️" 누르기 !