Home [CS] TCP/IP: 인터넷에서 컴퓨터들이 정보를 주고 받을 때 쓰이는 프로토콜들에 대해 알아보자
포스트
취소

[CS] TCP/IP: 인터넷에서 컴퓨터들이 정보를 주고 받을 때 쓰이는 프로토콜들에 대해 알아보자

개요

사람들과 마찬가지로, 컴퓨터들도 서로 의사소통 하기 위해 공통된 규칙이 있어야 한다. 컴퓨터가 사용하는 규칙을 프로토콜이라고 하며, 용도에 따라 나뉘면서 많은 프로토콜이 존재한다. 이런 많은 프로토콜에 대한 합의된 표준이 필요하게 되어 나오게 된게 TCP/IP 이다. TCP/IP는 보통 컴퓨터에 내장되어있고 대부분 알아서 동작하긴 하지만, 그 동작 원리는 알아 둘 필요가 있다.

TCP/IP

TCP/IP를 한마디로 설명하자면, 데이터가 의도된 목적지에 닿을 수 있도록 보장해주는 통신 규약의 모음이다. 데이터의 흐름에 따라 4개의 계층 구조로 나누며, 규칙이나 프로토콜이 적용되는 특정한 조건들을 규정하고 있다.

계층구조

TCP/IP의 4개의 계층 구조는 OSI 7계층과 비교 된다.

TCP/IP는 애플리케이션 계층, 전송 계층, 인터넷 계층, 링크 계층으로 나뉜다.

TCP/IP 계층과 달리, OSI 계층은 애플리케이션 계층을 세 개로 쪼개고 링크 계층을 데이터 링크 계층, 물리 계층으로 나눠서 표현하는 것이 다르고, 인터넷 계층을 네트워크 계층으로 부른다는 것이 다르다.

애플리케이션 계층

애플리케이션 계층은 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 데 사용되는 프로토콜에 대한 계층이다. 대표적으로 다음과 같은 프로토콜들이 있다.

  • FTP: 장치와 장치 간 파일 전송
  • HTTP: WWW를 위한 데이터 통신
  • SMTP: 전자 메일 전송
  • DNS: 도메인과 IP 주소를 매핑

전송 계층

전송 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하고, 애플리케이션과 인터넷 계층 사이 데이터를 전달할 때 사용되는 프로토콜에 대한 계층이다. 연결 지향 데이터 스트림을 지원하고, 신뢰성과 흐름 제어를 제공하기도 한다. 대표적으로 TCP와 UDP가 있다.

  • TCP: 연결 지향적 프로토콜로, 안정적으로, 순서대로, 에러 없이 교환할 수 있도록 ‘가상회선 패킷 교환 방식’을 사용해 데이터를 전달하는 프로토콜이다.

TCP는 신뢰성을 확보하기 위해 연결할 때 ‘3 웨이 핸드셰이크’라는 작업을 진행한다.

  1. 클라이언트는 서버에 접속을 요청하는 SYN을 보낸다. 이 때 패킷의 순서를 알기 위해 패킷에 임의의 숫자로 ISN를 보낸다.
  2. 서버는 SYN을 받고 ISN에 1을 더해 SYN+ACK에 담아 보낸다.
  3. 클라이언트는 다시 ISN에 1을 더해 서버에게 ACK을 보낸다.

TCP는 이렇게 신뢰성이 구축된 상태에서 데이터 전송을 시작한다.

연결을 해제할 때에는 ‘4 웨이 핸드셰이크’를 진행한다.

  1. 클라이언트는 FIN을 보낸다. (클라이언트는 FIN_WAIT_1 상태)
  2. 서버는 ACK를 클라이언트에게 보낸다. (서버는 CLOSE_WAIT 상태, 클라이언트는 수신 후 FIN_WAIT_2로 전환)
  3. 서버는 일정 시간 후 클라이언트에게 FIN을 보낸다.(서버는 LAST_ACK 상태)
  4. 클라이언트는 서버에게 ACK를 보낸다.(클라이언트는 TIME-WAIT 상태, 서버는 수신 후 CLOSED로 전환, 클라이언트도 일정 시간 후 CLOSED로 전환)
  • UDP: 비연결형 프로토콜로, 안정적이진 않아도 빠르게 교환할 수 있도록 ‘데이터그램 패킷 교환 방식’을 사용해 데이터를 전달하는 프로토콜이다.

인터넷 계층

인터넷 계층은 장치로부터 받은 패킷을 지정된 목적지로 전송할 때 사용되는 프로토콜에 대한 계층이다. 상대방이 제대로 받았는지에 대해 보장하지 않는 비연결형적인 특징을 가지고 있다. 대표적으로 IP, ARP, ICMP 등의 프로토콜이 있다.

링크 계층

장치 간에 신호를 주고받는 규칙을 정하는 프로토콜에 대한 계층이다. 유선 LAN 혹은 무선 LAN을 통해 0과 1로 이루어진 데이터를 보내며, ‘이더넷 프레임’을 통해 에러 확인, 흐름 제어, 접근 제어를 담당한다. 대표적인 프로토콜로 이더넷이 있다.

  • 유선 LAN을 이루는 이더넷은 IEEE802.3이라는 프로토콜을 따르고, 전이중화 통신(통신의 양쪽 장치가 동시에 송수신할 수 있는 방식)을 쓴다.

  • 무선 LAN을 이루는 이더넷은 IEEE802.11이라는 프로토콜을 따르고, 송수신이 같은 채널을 사용하기 때문에 반이중화 통신(한 번에 한 방향만 통신할 수 있는 방식)을 쓴다.

  • 이더넷이란, 원칙적으로 하나의 인터넷 회선에 공유기 등의 통신장비를 설치해 다수의 시스템이 LAN으로 연결되어 통신이 가능한 네트워크 구조이다.

  • 이더넷 프레임

    전달받은 데이터의 에러를 검출하고 캡슐화한다.

    • Preamable: 이더넷 프레임 시작
    • SFD: 다음 바이트부터 MAC
    • DMAC, SMAC: 수신 송신 MAC
    • EtherType: IP 프로토콜 정의, IPv4, IPv6
    • Payload: 데이터
    • CRC: 에러 확인 비트

PDU

PDU(Protocol Data Unit)란, 네트워크의 계층 간 데이터가 전달될 때, 한 덩어리의 단위를 말한다. 제어 관련 정보들이 포함된 헤더, 데이터를 의미하는 페이로드로 구성되어 있다. 각 계층마다 캡슐화 되는 데이터와 추가되는 헤더가 다르기에, 명칭도 달라진다.

  • 애플리케이션 계층 : 메시지
  • 전송 계층 : 세그먼트(TCP), 데이터그램(UDP)
  • 인터넷 계층 : 패킷
  • 링크 계층 : 프레임(데이터 링크 계층), 비트(물리 계층)

  • 캡슐화란, 상위 계층의 데이터와 헤더를 하위 계층의 데이터로 포함시키고 헤더를 삽입하는 과정을 말한다.

예상 질문

  • TCP/IP 에 대해 설명해주세요.
답변 1. TCP/IP는 프로토콜이라는, 컴퓨터끼리 서로 의사소통하기 위해 정해놓은 규칙들의 모음입니다. 2. 데이터의 흐름에 따라 4계층으로 나뉘는데, 각각 애플리케이션 계층, 전송 계층, 인터넷 계층, 링크 계층으로 나뉩니다. * 애플리케이션 계층은 서비스를 실질적으로 사람들에게 제공하는 데 사용되는 프로토콜에 대한 계층이며, HTTP, SMTP 같은 프로토콜이 여기에 속합니다. * 전송 계층은 신뢰성 있는 데이터 전송을 보장하는 프로토콜에 대한 계층이며, TCP, UDP 등이 여기에 속합니다. * 인터넷 계층은 데이터의 목적지를 설정하는 프로토콜에 대한 계층이며, IP, ARP 등이 여기에 속합니다. * 링크 계층은 데이터를 전기 신호로 변환해 MAC 주소로 알맞은 기기까지 데이터를 전송하는 프로토콜에 대한 계층입니다. 이더넷, WIFI가 여기에 속합니다.

  • TCP/IP 모델에서 계층을 나누는 이유에 대해 설명해주세요.
답변 1. 각 계층별 처리 역할이 다르기 때문에, 계층별 간섭을 최소화할 수 있습니다. 2. 특정 계층에서 문제가 생기더라도 해당 계층만 살펴보면 되기 때문에, 유지 보수가 편리합니다. 3. 다른 계층끼리는 데이터의 전달 과정을 구체적으로 알 필요가 없기 때문에, 데이터의 캡슐화와 은닉이 가능합니다.

  • www.google.com 을 웹 브라우저에 입력하면 무슨 일이 일어나나요?
답변 1. HTTP 헤더는 HTTP Request를 통해 채워 진 상태입니다. 2. IP 헤더를 채우기 위해 DNS 서버에 접속해 구글 도메인의 IP 주소를 받습니다. 3. TCP 헤더를 채우기 위해 구글과 3-웨이 핸드셰이크로 TCP 연결을 합니다. 4. 패킷을 보내 구글로부터 HTML 응답을 받습니다. 5. 응답 받은 HTML을 브라우저에 띄우고 4-웨이 핸드셰이크로 TCP 연결을 종료합니다.

  • TCP와 UDP의 차이점에 대해 설명해주세요.
답변 1. 둘 모두 TCP/IP 네트워크 모델의 4계층 중 전송 계층에서 사용되는 프로토콜입니다. 2. TCP는 연결 지향적 프로토콜로, 안정적으로, 순서대로, 에러 없이 교환할 수 있도록 가상 회선을 만들어 데이터를 전달합니다. 데이터를 제대로 수신했는지 확인하는 과정이 있어 속도는 느립니다. 3. UDP는 비연결형 프로토콜로, 안정적이진 않아도 빠르게 교환할 수 있도록, 데이터의 수신 여부를 상관하지 않고 데이터를 전달하는 프로토콜입니다.

  • 3-웨이 핸드셰이크와 4-웨이 핸드셰이크는 무엇인가요?
  1. 3-웨이 핸드셰이크는 클라이언트가 서버에 TCP 프로토콜로 연결할 때, 데이터의 신뢰성을 보장하기 위해 하는 작업입니다.
    • 클라이언트는 ISN으로 사용할 임의의 숫자를 담아 SYN을 보냅니다.
    • 서버는 클라이언트에게 ISN에 1을 더해 SYN + ACK(씬애크)를 보냅니다.
    • 클라이언트는 다시 1을 더해 ACK를 보낸 뒤, 데이터 전송을 시작합니다.
  2. 4-웨이 핸드셰이크는 연결을 종료할 때 진행하는 작업입니다.
    • 클라이언트는 FIN 을 보내고 FIN_WAIT_1 상태로 변합니다.
    • 서버는 응답으로 ACK를 보내고 CLOSE_WAIT 상태로 변하고, 응답을 받은 클라이언트는 FIN_WAIT_2 상태로 변합니다.
    • 서버는 일정 시간 후에 FIN을 보내고 LAST_ACK 상태로 변합니다.
    • 클라이언트는 마지막으로 ACK를 보내고 혹시라도 늦게 도착하는 패킷이 있는지 기다리기 위해 TIME_WAIT으로 들어갔다가 CLOSED로 끝냅니다. ACK를 받은 서버도 CLOSED로 끝내며 연결을 해제합니다.

참고 자료


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

[CS] 네트워크의 기초

[CS] IP & MAC: 컴퓨터에서 보낸 메시지는 길을 어떻게 찾아가지?