3. TCP/IP
TCP/IP란?
네트워크 아키텍처란, 하나의 언어이자 약속의 집합이다. 이러한 언어 중에서도 통용되는 언어가 있는데 그게 바로 TCP/IP다.
TCP/IP의 계층구조 (OSI 4계층)
네트워크 아키텍처는 프로토콜들(규약)의 집합이다.
효율적 통신을 위해 이러한 프로토콜들을 계층화 하는데, 가장 널리 쓰이는 계층화 구조는 4계층 구조이다. (물론 OSI 7계층도 존재한다)
네트워크 인터페이스층
⇒ 같은 네트워크 안에서의 데이터를 전송하는 역할
인터넷층
⇒ 서로 다른 네트워크 간에 데이터를 전송하는 역할 (중개자)
트랜스포트층
⇒ TCP or UDP를 통한 데이터의 배분 (to 특정한 복수의 애플리케이션)
애플리케이션층
⇒ 애플리케이션의 기능을 실행하기 위해, 그에 맞는 데이터의 형식과 처리 방법 등을 결정하는 역할
(HTTP, SMTP, POP3, DHCP, DNS 등의 프로토콜이 존재)
데이터의 송수신 규칙 (feat. 헤더)
위에서 설명했듯이, 프로토콜들은 계층화 되어 있다.
따라서 애플리케이션이 정상적으로 데이터를 주고받기 위해선 이러한 프로토콜들을 조합해야 한다.
캡슐화와 역캡슐화
헤더에는 데이터의 출발지 주소, 그리고 목적지 주소가 담긴다. 그리고 이러한 헤더는 다음 프로토콜에 송신되어, 또 다시 새로운 헤더로 포장된다. 즉, 계층별 출발지와 목적지 정보가 차근차근 입력되며 쌓이는 것이다.
클라이언트(브라우저)에서 서버로 데이터를 전송하는 과정
위의 그림과 같이 브라우저~이더넷을 거치며 각 헤더들이 캡슐화되어 쌓인다.
그리고 마지막으로 이더넷에서 물리적 신호로 변환하여 전송 매체로 데이터를 보낸다.데이터를 수신하는 입장인 서버는 이러한 헤더를 받아 이더넷에서 쌓인 FCS와 이더넷 헤더를 읽고 자신한테 전달된 데이터가 맞는지 확인한다. 이후 역순으로 IP - TCP - HTTP 헤더들을 차례대로 벗겨내며 읽어나간다.
데이터별 명칭
HTTP(애플리케이션층) : HTTP메시지
TCP(트랜스포트층) : TCP 세그먼트
IP(인터넷층) : IP 패킷
이더넷(네트워크 인터페이스층) : 이더넷 프레임
IP (Internet Protocol)
IP의 역할은 ‘엔드투엔드 통신’을 하는 것이다.
즉, 특정 PC에서 다른 PC로 데이터를 전송하는 것이다.
보내고자 하는 데이터를 IP 패킷으로 포장한다.
IP헤더에는 출발지 IP주소와 목적지 IP주소가 담긴다. 이를 참조하여 데이터는 다른 목적지 IP를 가진 컴퓨터로 전송되는 것이다. 하지만 만약 해당 목적지 주소가 다른 네트워크에 존재한다면, 라우터를 통해 다른 네트워크로 데이터가 전송된다. 이를 라우팅이라 한다.
IP는 어떻게 구성될까
도트형으로 10진 표기된다. (ex. 192.168.0.1)
위에서는 컴퓨터(호스트) 자체의 주소를 IP라고 설명했다. 하지만 사실 IP는 호스트의 인터페이스를 식별하는 것이다. 따라서, 한 호스트가 여러 인터페이스를 보유하고 있을 경우 (유선 인터페이스, 무선LAN 인터페이스 등등) 인터페이스마다 IP주소를 설정할 수 있다.
IP의 목적지
유니캐스트, 브로드캐스트, 멀티캐스트
유니캐스트 : 단 하나의 주소로 데이터를 전송 할 때(가장 일반적)
브로드캐스트 : 같은 네트워크 안에 있는 모든 호스트에게 똑같은 데이터를 전송할 때
멀티캐스트 : 특정 그룹을 지정하여 똑같은 데이터를 전송할 때
IP주소의 구성
IP주소는 네트워크부 + 호스트부로 구성된다. (고정되지 않고 가변적임)
네트워크부는 말 그대로 네트워크 자체를 식별한다 (이 네트워크로 보내줘!)
⇒ 서브넷 마스크를 통해 IP주소 안에서 어디까지가 네트워크부인지 식별할 수 있다.호스트부는 네트워크 안에서의 호스트를 식별한다. (이 호스트에게 보내줘!)
네트워크 접속
네트워크 접속에는 두 단계가 존재한다.
물리적 접속 → 논리적 접속
물리적 접속
네트워크 인터페이스 층에서 이루어지며, 말 그대로 물리적인 신호를 주고받을 수 있도록 하는 것이다. 예를 들어 LAN선을 기기에 연결시키거나, 와이파이 연결을 위해 무선LAN 엑세스 포인트에 접속하는 것이다.
논리적 접속
위에서 설명했던 것 처럼, 네트워크 연결을 위해서는 인터페이스에 IP주소가 반드시 필요하다. 이러한 IP를 설정하는 것이 논리적 접속의 단계다. 물론 IP주소를 직접 설정하는 것은 전문가가 아니라면 어렵기 때문에 DHCP라는 기술을 통해 자동으로 IP주소를 설정할 수 있다.
IP의 역할과 활동
공인 IP주소 : 인터넷에서 사용!
사설 IP주소 : 특정 네트워크 안에서만 사용! (다른 네트워크에서의 사설 IP와 중복 가능)
그럼 사설 IP주소로 인터넷에 접속하면 어떻게 될까?
우선.. 전송 자체는 상관 없는데… 결국 IP패킷이 폐기되어 아무 것도 전달되지 않는다.
따라서 NAT을 통해 사설 IP를 공인 IP로 변환하여 인터넷과 통신해야 한다.근데 그러면… IP에 담긴 데이터가 잘 전달 됐는지 어떻게 확인할까?
**ICMP(Internet Control Message Protocol)**를 사용하면 된다.
ICMP의 주요기능
에러 리포트 : 우선, ICMP를 통해 IP패킷이 폐기되면
도달불능 메시지
가 메아리 처럼 다시 출발지로 전달된다.
진단기능(Ping) : ping커맨드를 통해 지정한 IP주소와 통신할 수 있는지 확인할 수 있다.
MAC주소
로의 변환 : ARP
위에서는 IP를 통해 네트워크 간 데이터를 전송한다고 했었다.
근데… 갑자기 MAC주소로 데이터가 전송된다고 하니 참 헷갈린다…
IP주소는 결국 MAC주소를 포함한다고 볼 수 있다.
IP주소가 MAC주소 (컴퓨터의 물리적 주소)로 변환되어 해당 목적지까지 전달될 수 있는 것이다. 따라서 IP통신 내부에 MAC주소 통신이 포함되어 있는 것이고, 쉽게 말하면 IP통신은 MAC통신의 연속적 과정의 합이라고 볼 수 있다.
IP주소가 MAC주소로 변환되는 것 :
ARP
ARP는 쉽게 말하면 번역가다.
ARP를 통해 우리는 목적지 IP에 대응하는 목적지 MAC주소를 얻어내고(주소 해석
), 이를 ARP 캐시에 저장한다.알맞은 목적지 기기에 데이터가 도달했다면 ?
포트번호(PORT)
를 통해 애플리케이션을 식별하고 → 알맞은 애플리케이션으로 데이터를 전송한다.
포트번호는 TCP 또는 UDP 헤더에 저장된다.
TCP
와 UDP
TCP
: 신뢰성이 보장된 애플리케이션 간의 데이터 송수신을 위한 프로토콜(수신확인 가능)UDP
: 서버에 도착한 데이터를 애플리케이션에 “배분”만 해주는 프로토콜
TCP의 작동 프로세스
-우선, 애플리케이션 간에 신뢰성 보장을 위해
TCP커넥션
을 맺는다.-그리고 데이터를 서로 주고받은 뒤 (TCP헤더와 애플리케이션 데이터 헤더가 추가됨)
ACK
(수신확인)를 한다. (시퀀스번호
를 통해 전송하는 데이터의 순서를 담기도 한다)-마지막으로 TCP커넥션을 끊는다.
UDP
UDP는 위에서도 설명했듯이, 데이터의 배분만을 담당한다. 따라서 데이터가 올바르게 도착했는지에 대한 확인이나, 데이터의 분할 등의 기능은 하지 못한다. 주로 IP음성통화 등에 활용되고. 여분처리 과정이 없기 때문에 데이터 전송 효율이 상대적으로 좋다는 장점도 있다.
DNS
근데 생각해보니 IP도 알겠고, MAC도 알겠는데….
우리는 어떻게 상대방의 IP를 알아서 이를 MAC주소로 변환시키고 네트워크 통신을 하는걸까?
사실 우리는
호스트명
만 알고 있을 뿐, IP주소는DNS
에 담겨있다.우리가 www.naver.com(호스트명)을 입력하면 자동으로 네트워크의 전화번호부라고 할 수 있는 DNS서버에 IP주소 질의를 한다 (
DNS 리졸버
). 그러면 DNS에서 해당 호스트명에 대응하는 IP주소를 반환해준다(이름해석
). 그러면 이를 통해 우리는 해당 IP주소를 통해 네트워크 통신을 하는 것이다.그렇다면 나의 IP주소는 어떻게 설정되는걸까…?
위에서 잠깐 언급했던
DHCP
를 통해 자동으로 우리의 IP가 설정된다.우선 우리의 컴퓨터는 대개 DHCP클라이언트로 설정되어 있다. 이 설정이 되어있다면 DHCP클라이언트(내 컴퓨터)는 DHCP서버에 사용할 수 있는 TCP/IP 설정정보를 질의하고, 응답을 받은 뒤 해당 IP주소를 점유한다. 이렇게 우리의 IP주소는 자동으로 설정되는 것이다.