[Network] TCP/IP Protocol Suite

뚜비·2023년 4월 11일
0

Network

목록 보기
2/6

TCP/IP Protocol Suite(Stack)

  • Internet protocol suite
    : 인터넷에서 컴퓨터들이 서로 정보를 주고받는 데 쓰이는 프로토콜(통신규약)의 집합
    : Internet protocol 기반 socket의 경우 데이터 전송 방법에 따라 TCP socket과 UDP socket으로 나누어진다.
    : Internet protocol suite 중 TCP/IP가 가장 많이 쓰이기 때문에 TCP/IP protocol suite라고 불린다.

  • TCP/IP(Transmission Control Protocol/Internet Protocol) suite
    : 네트워크에서 사용되는 통신 프로토콜의 집합
    : Layer들은 프로토콜의 네트워킹 범위에 따라 네 개의 추상화 Layer로 구성
    (Physical Layer로 구분하면 5 Layer)

TCP/IP protocl의 탄생?
인터넷을 통해 데이터를 효율적으로 주고 받기 위해 아주 많은 문제들이 존재한다 (Ex. 하드웨어적인 시스템 구축 문제, 소프트웨어적인 알고리즘)
따라서 이러한 문제를 하나의 프로토콜의 설계로 해결하는 것이 아닌 작은 문제들로 나누어서 해결해야 효율적이고 체계적인 개발이 가능할 것이다.
문제를 영역별로 나누어서 해결하다 보니, 프로토콜이 여러 개 만들어졌지만 하나의 문제 해결을 위해 나누어진 것 뿐이므로 하나의 프로토콜이라 할 수 있다.
TCP/IP 프로토콜은 인터넷 기반의 데이터 전송이라는 하나의 문제를 해결하기 위해 만들어진 프로토콜로서 총 4단계(5단계)의 프로토콜로 나뉘어 세분화하였다.


  • TCP/IP protocol model은 4개의 Layer을 가지고 있으며 OSI 7 Layer와 많이 비교
  • OSI Layer model은 Application Layer를 세 개로 쪼개고 Link Layer를 Data Link Layer, Physical Layer로 나눠서 표현하는 것이 다름.

Data Flow

  • 실제 인터넷을 통한 Physical connection
    두 호스트(A랑 B)간에 통신을 한다고 해보자!
  1. Host A의 Application layer에서 네이버 주소를 검색
  2. 검색어는 Transport layer를 거쳐 network layer로 이동 해당 IP 주소를 찾아감
  3. Data Link Layer는 해당 IP 주소를 가기 위해 특정 단말을 선택
  4. Physical Layer에서 전기 신호를 바꿔서 무선으로 보냄
  5. Router에서 패킷을 얻으면 Network Layer에서 복원 함. 그 후 라우터가 패킷을 어디로 보낼지 결정하고 Ethernet을 통해 전기신호로 보냄
  6. Host B는 패킷을 받고 응용계층으로 보내서 처리

  • End-to-End logical connection
    실제 물리적인 연결은 하위 Layer와 연결되어 있지만, 각 layer들 간에 논리적으로(추상적으로) 연결되어 있다고 볼 수 있음
  • 특정 Layer가 변경되었을 때 다른 Layer에 영향을 받지 않도록 설계
    EX) 전송 계층에서 TCP를 UDP로 변경했다고 해서 인터넷 웹 브라우저를 다시 설치 안 해도 됨

Data Encapsulation & Decapsulation

  • Application layer에서 하위 layer로 host가 보내는 request 값들은 encapsulation되어 전달
    (encapsulation할 때 각 layer에 필요한 제어정보를 붙인다.)
    → 다시 Link layer를 통해 해당 server와 통신
    → 해당 server의 link layer로부터 application layer까지 decapsulation
  • Encapsulation : 상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시키고 해당 계층의 헤더를 삽입하는 과정
  • Decapsulation : 하위 계층에서 상위 계층으로 가며 각 계층의 헤더 부분을 제거하는 과정

PDU(Protocol Data Unit)

  • PDU : 네트워크의 어떠한 계층에서 계층으로 데이터가 전달될 때 한 덩어리의 단위
  • 제어 관련 정보들이 포함된 ‘헤더’, 데이터를 의미하는 ‘페이로드’로 구성
  • Layer마다 부르는 명칭이 다름
    1. Application layer
    : message
    2. Transport layer
    : segment(in TCP), user datagram(in UDP)
    : header는 source나 destination 프로그램의 flow, error control, congestion control의 identifier
    3. Network layer
    : packet
    : header는 source나 destination 주소, error checking이나 fragmentation 정보
    4. Data link layer
    : frame
    : host 또는 다음 hop의 Link Layer 주소

  • EX) Application Layer는 ‘message’를 기반으로 데이터를 전달하는데, HTTP의 헤더가 문자열인 것을 예로 들 수 있음

    🤔 Why Application layer는 문자열을 기반으로 송수신을 할까?
    헤더에 authorization 값 등 다른 값들을 넣는 확장이 쉽기 때문


curl 명령어를 이용하여 www.naver.com으로 HTTP 요청을 해서 PDU 테스팅을 해보자!
curl commands 온라인 사이트 링크


'curl www.naver.com'이란 명령어를 통해 요청하면 다음과 같은 response header를 얻을 수 있는데 모두 문자열임.


Layer 5 - Application Layer

  • 애플리케이션(application) 계층은 응용 프로그램이 사용되는 프로토콜 계층
    EX) FTP, HTTP, SSH, SMTP, DNS 등
  • 웹 서비스, 이메일 등 서비스를 실질적으로 사람들에게 제공하는 layer

🤔 Application Layer Protocol
▶ FTP
장치와 장치 간의 파일을 전송하는 데 사용되는 표준 통신 프로토콜
▶ SSH
보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜
▶ HTTP
World Wide Web을 위한 데이터 통신의 기초이자 웹 사이트를 이용 혹은 웹 데이터를 전달하는 데 쓰는 프로토콜
▶ SMTP
전자 메일 전송을 위한 인터넷 표준 통신 프로토콜
▶ DNS
: 도메인 이름과 IP 주소를 매핑해주는 서버
EX) www.naver.com에 DNS 쿼리가 오면 [Root DNS] → [.com DNS] → [.naver DNS] → [.www DNS] 과정을 거쳐 완벽한 주소를 찾아 IP 주소를 매핑
: 주소가 바뀌어도 사용자들에게 똑같은 도메인 주소로 서비스 가능
EX) www.naver.com의 IP 주소가 222.111.222.111에서 222.111.222.122로 바뀌었음에도 똑같은 www.naver.com이라는 주소로 서비스가 가능
▶ TELNET
사이트를 원격으로 접근하기 위한 프로토콜
▶ SNMP(Simple Network Management PRotocol)
네트워크나 시스템을 global 혹은 local level에서 원격으로 관리하기 위한 프로토콜


Layer 4 - Transport Layer

  • 전송(transport) 계층은 송신자와 수신자를 연결하는 통신 서비스를 제공 즉, 데이터를 전송하는 방법을 정의
  • Application layer와 Network layer 사이의 데이터가 전달될 때의 중계 역할
    : Application layer로부터 message를 받고 segement 혹은 user data gram으로 encapsulating을 한 후 network layer에 보낸다.
  • process-to-process 통신 지원(local host / remote host)
  • IP 프로토콜(데이터를 보내기 위한 길 찾는 방법을 정의, 신뢰할 수 없음)을 기반으로 host 대 host가 어떻게 데이터를 주고 받을 것인지 약속
  • 대표적으로 TCP와 UDP가 있음
  1. TCP(Transmission Control Protocol)
    : 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 하여 신뢰성을 구축해서 수신 여부를 확인
    : '가상 회선 패킷 교환 방식' 사용
    : 확인 절차를 걸쳐 실뢰성 없는 IP를 기반으로 하여 신뢰성을 부여해줌
    : 데이터 스트림(앞 뒤 데이터가 서로 연관 있는 데이터) 전달 가능 → 송수신 버퍼, segment 이용

🤔 TCP 특징
: Connection-oriented protocol(연결지향 프로토콜) → 신뢰적
local과 remote를 연결한 후 신뢰성을 구축해서 수신 여부 확인
연결설정, 데이터 전달, 연결종료 등의 단계를 제공
: Flow control(흐름 제어)
destination에 너무 많은 traffic이 몰리는 것을 방지하기 위해 source host의 sending data rate와 destination host의 receiving data rate를 맞춘다.
즉 destination host가 데이터를 이용할 수 있는 속도로 source host가 데이터를 보내도록 맞추는 것
: Error control(에러 제어)
error 없이 destination에 도착하면 답장하는 것을 보증한다.
: Congestion Control(혼잡 제어)
네트워크에 많은 디바이스가 데이터를 한번에 보내서 traffic이 몰린다. 서로 데이터를 천천히 보내기로 약속한다.

  1. UDP(User Datagram Protocol)
    : 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 줌
    : ‘데이터그램 패킷 교환 방식’을 사용

🤔 UDP 특징

  • Connectionless protocol(비연결 지향 프로토콜) → 비신뢰적
  • Flow control 없음
  • Error control 없음
    : 체크섬(packet error 검사) 틀리면 버린다.
  • Congesion control(혼잡 제어) 없음

가상회선 패킷 교환 방식

  • 각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 ‘순서대로’ 도착하는 방식
  • 관련된 패킷을 전부 같은 경로를 통해 전송하는 방법, 가상 번호를 기반으로 가상 회선을 구현

    먼저 가상회선으로 연결되고 패킷이 해당 가상회선을 따라 순서대로 도착하는 것을 알 수 있다.


데이터그램 패킷 교환 방식

  • 패킷이 독립적으로 이동하며 최적의 경로를 선택하여 가는데, 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있으며 도착한 ‘순서가 다를 수’ 있는 방식

    3, 2, 1로 이루어진 패킷이 순서도 다르고 어떠한 회선을 중심으로 가는 것이 아니라 따로따로 이동하며 순서도 다르게 도착하는 것을 알 수 있음


TCP 연결 성립 과정

  • TCP는 신뢰성을 확보할 때 ‘3-웨이 핸드셰이크(3-way handshake)’라는 작업을 진행
  • 3-웨이 핸드셰이크 과정 이후 신뢰성이 구축되고 데이터 전송을 시작

클라이언트와 서버가 통신할 때 다음과 같은 세 단계의 과정을 거친다.

➊ SYN 단계

  • 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보냄
  • ISN : 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 이는 장치마다 다를 수 있음

➋ SYN + ACK 단계
서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보냄

➌ ACK 단계
클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보냄

※ TCP는 이 과정이 있기 때문에 신뢰성이 있는 계층이라고 하며 UDP는 이 과정이 없기 때문에 신뢰성이 없는 계층

🤔 용어 정리

  • SYN
    SYNchronization의 약자, 연결 요청 플래그
  • ACK
    ACKnowledgement의 약자, 응답 플래그
  • ISN
    Initial Sequence Numbers의 약어, 초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호이다.

TCP 연결 해제 과정

TCP가 연결을 해제할 때는 4-웨이 핸드셰이크(4-way handshake) 과정이 발생

  1. 먼저 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보낸다. 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다린다
  2. 서버는 클라이언트로 ACK라는 승인 세그먼트를 보낸다. 그리고 CLOSE_WAIT 상태에 들어간다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
  3. 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보낸다.
  4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 된다. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제된다.

🤔TIME_WAIT 상태?? - 그냥 연결을 닫으면 되지 왜 굳이 일정 시간 뒤에 닫을까?

  • 지연 패킷이 발생할 경우를 대비하기 위함
    패킷이 뒤늦게 도달하고 이를 처리하지 못한다면 데이터 무결성 문제가 발생
  • 두 장치가 연결이 닫혔는지 확인하기 위해서
    만약 LAST_ACK 상태에서 닫히게 되면 다시 새로운 연결을 하려고 할 때 장치는 줄곧 LAST_ACK로 되어 있기 때문에 접속 오류가 나타남

🤔 용어정리

  • TIME_WAIT
    : 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태
    : 지연 패킷 등의 문제점을 해결하는 데 쓰인다.
    : CentOS6, 우분투에는 60초로 설정되어 있으며 윈도우는 4분으로 설정
    : 즉, OS마다 조금씩 다를 수 있다.
  • 데이터 무결성(data integrity)
    데이터의 정확성과 일관성을 유지하고 보증하는 것

Layer 3 - Network/Internet

  • 장치로부터 받은 네트워크 패킷을 IP 주소로 지정된 목적지로 전송하기 위해 사용되는 계층
  • 패킷을 수신해야 할 상대의 주소를 지정하여 데이터를 전달
  • EX) IP, ARP, ICMP, IGMP, DHCP 등
  • Connectionless protocol(비연결형적) : 상대방이 제대로 받았는지에 대해 보장하지 않음



  • 전선, 광섬유, 무선 등으로 실질적으로 데이터를 전달하며 장치 간에 신호를 주고받는 ‘규칙’을 정하는 계층
  • Physical Layer와 Data Link Layer로 나누기도 함
    • Physical Layer : 무선 LAN과 유선 LAN을 통해 0과 1로 이루어진 데이터를 보내는 계층
    • Data Link Layer : ‘이더넷 프레임(byte나 frame 단위의 데이터)’을 통해 에러 확인, 흐름 제어, 접근 제어를 담당하는 계층
  • 유선 LAN(IEEE802.3) : 전이중화 통신(full duplex), 양쪽 장치가 동시에 송수신
    무선 LAN(IEEE802.11) : 반이중화 통신, 양쪽 장치는 서로 통신할 수 있지만 동시에 통신할 수 없으며 한 번에 한 방향만 통신할 수 있음

이더넷 프레임 (Ethernet Frame)

데이터 링크 계층은 Ethernet Frame을 통해 전달받은 데이터의 에러를 검출하고 캡슐화

Preamble: 이더넷 프레임이 시작임을 알림
SFD(Start Frame Delimiter): 다음 바이트부터 MAC 주소 필드가 시작됨을 알림
DMAC, SMAC: 수신, 송신 MAC 주소
EtherType: 데이터 계층 위의 계층인 IP 프로토콜을 정의, 예를 들어 IPv4 또는 IPv6
Payload: 전달받은 데이터
CRC: 에러 확인 비트

🤔 용어 정리

  • MAC 주소
    : 컴퓨터나 노트북 등 각 장치에는 네트워크에 연결하기 위한 장치(LAN 카드)가 있는데, 이를 구별하기 위한 식별번호
    : 6바이트(48비트)로 구성된다.


😎 참고자료

면접을 위한 CS 전공지식
인터넷 프로토콜 스위트
Internet protocol suite
패킷 교환
수업 자료

profile
SW Engineer 꿈나무 / 자의식이 있는 컴퓨터

2개의 댓글

comment-user-thumbnail
2023년 4월 17일

Network Layer의 PDU를 패킷으로 바꿔야 할 거 같아요! (데이터그램이라고 잘못 적혀있네용)

1개의 답글