2-2.TCP/IP 4계층 모델
Created by: 강산
Created time: 2024년 8월 28일 오후 5:50
Tags: 2장
TCP/IP 모델 4계층
- 인터넷에서 데이터 통신이 어떻게 이루어지는지를 설명하는 모델이다.
- 이 계층 모델은 네트워크에서 사용되는 통신 프로토콜 집합으로, 네개의 추상화 계층으로 구성된다.
- 각각의 계층은 특정 기능을 담당한다.
계층 구조
TCP/IP 계층은 네 개의 계층을 가지고 있으며 OSI 7계층과 많이 비교된다.
- 각각의 계층들은 특정 계층이 변경될때, 다른 계층이 영향을 받지 않도록 설계되었다.
- 전송계층을 TCP → UDP로 변경해도, 다른 계층은 영향을 받지 않기 때문에, 인터넷 웹 브라우저를 다시 설치할 필요는 없으며, 유연한 설계라고 할 수 있다.
응용 계층(Application Layer)
- 사용자가 직접적으로 접하는 네트워크 활동의 대부분을 처리하는 핵심 계층이다.
- 웹 브라우징, 이메일, 파일 전송, 원격 접속 등등. 일상적인 인터넷 사용에 관련된 모든 작업이 응용계층에서 이루어진다.
응용 프로그램
- HTTP : 웹 브라우징을 위한 프로토콜. 웹 서버와 클라이언트 간에 HTML 문서, 이미지, 동영상 등의 리소스를 주고 받는다.
- FTP : 파일 전송을 위한 프로토콜로, 네트워크 상에서 파일을 업로드 하거나 다운로드 할때 사용한다.
- SMTP : 이메일 전송을 위한 프로토콜로, 메일 서버 간의 이메일 전송을 담당한다.
- DNS : 도메인 이름을 IP 주소로 변환해주는 프로토콜이다.
- SSH : 원격 로그인 및 명령어 실행을 위한 프로토콜이다.
- POP3/IMAP : 이메일 수신을 위한 프로토콜 이며, 메일 서버에서 이메일을 읽을 수 있다.
전송 계층(Transport Layer)
- 송신자와 수신자를 연결하는 통신 서비스를 제공한다.
- 응용 계층과 인터넷 계층 사이의 데이터가 전달 될때 중계 역할을 한다.
- 대표적으로 TCP와 UDP가 있다.
TCP(Transmission Control Protocol)
- 데이터를 신뢰성 있게 전송하기 위해 설계된 프로토콜 이다.
- 패킷 사이의 순서를 보장하고, 신뢰성을 구축해서 수신 여부를 확인하는 ‘가상회선 패킷 교환 방식’을 사용한다.
- 데이터의 정확성과 순서를 보장하는데 필수적이다.
가상회선 패킷 교환 방식
- 데이터를 전송하기 전에 논리적 연결이 설정되며, 이를 가상회선 이라고 한다. → 연결 지향형
- 각 패킷에 가상회선 식별 번호(VCI)가 포함되고, 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착한다.
- 네트워크내 한 노드가 다운될경우, 그 노드를 지나는 모든 가상회선을 잃게된다.
- 따라서, 정해진 시간 안에 다량의 데이터를 연속해서 보낼경우, 가상회선 패킷 교환 방식이 적합하다.
데이터그램 패킷 교환 방식
- 데이터를 전송하기 전에 논리적 연결이 설정되지 않는다.
- 순서와 관계 없이 패킷이 독립적으로 전송된다.
- 패킷을 수신한 라우터는 최적의 경로를 선택해 패킷을 전송하고, 하나의 메세지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있다. → 비연결 지향형
- 따라서, 짧은 메시지의 일시적인 전송에는 데이터그램 방식이 적합하다.
TCP 연결 과정(3-way handshake)
- 클라이언트와 서버 간의 신뢰할 수 있는 연결을 설정하기 위한 3단계로 구성된 과정이다.
- UDP 에는 이 과정이 없기에, 신뢰성이 없다.
- SYN
- 서버에 ISN(Initial Sequence Number, 클라이언트 초기 순서 번호)를 담은 SYN(연결 요청)을 보낸다.
- 이 단계에서 클라이언트는 서버에 연결을 요청한다.
- SYN+ACK
- SYN 패킷을 받은 서버는, 서버의 ISN이 담긴 SYN(연결 요청)과 ACK(응답)패킷을 같이 보낸다.
- 이 단계에서 서버는, 클라이언트의 요청을 수락하고, 클라이언트에 대한 응답 패킷을 통해 연결을 설정할 준비가 되었음을 알린다.
- ACK
- 클라이언트는 서버의 SYN+ACK 패킷을 수신한 후, 서버의 ISN 에 대한 ACK 패킷을 보냄으로써 연결이 완료되었음을 서버에 알린다.
- 이 단계에서 양측은 서로의 순서 번호를 확인하고, 데이터 전송을 위한 연결이 준비되었음을 확인한다.
TCP 연결 해제 과정(4-way handshake)
- 클라이언트와 서버 간의 연결을 안정적으로 종료하기 위한 4단계로 구성된 과정이다.
- 연결 해제 과정에서는 데이터를 전송하고 있는 중이라면 연결 종료를 알리는 신호를 송수신하여 양측 모두 데이터를 안전하게 처리할 수 있도록 한다.
- FIN (종료 요청)
- 클라이언트가 FIN(연결 종료 요청) 패킷을 보낸다.
- 이 패킷은 더 이상 데이터를 전송하지 않겠다는 의사를 전달하며, 연결 종료를 요청한다.
- ACK (종료 요청 확인)
- FIN 패킷을 받은 서버는 해당 패킷을 확인했다는 ACK(응답) 패킷을 보낸다.
- 이 단계에서 종료 요청을 수신한 서버는, 해당 요청을 확인하고, 클라이언트의 추가적인 데이터 전송이 끝날 때까지 기다린다.(CLOSE-WAIT)
- FIN (종료 응답)
- 데이터 전송이 완료되었다면, 종료 요청을 서버가 FIN 패킷을 다시 보낸다.
- 이 패킷은 마지막으로 종료 요청을 처리하기 위한 패킷으로, 종료 요청에 대한 응답을 위해 전송된다.
- ACK (종료 응답 확인)
- FIN 패킷을 받은 클라이언트는 이를 확인하는 ACK 패킷을 보내며, 최종적으로 연결 종료를 확인한다.
- 클라이언트는 바로 연결이 닫히지 않고, 어느정도 시간 대기 후 연결이 닫히고 연결이 해제된다.(TIME_WAIT)
인터넷 계층
- 장치로부터 받은 네트워크 패킷을 IP 주소로 지정된 목적지로 전송하기 위해 사용되는 계층이다.
- IP (Internet Protocol)
- 데이터그램을 출발지에서 목적지까지 전달하는 기본적인 프로토콜이다.
- IP 주소를 사용해 네트워크 장치를 식별하고, 데이터 패킷을 라우팅한다.
- IPv4
- 32비트 주소 체계를 사용한다.
- 주소 공간이 제한적이고, 주소 부족 문제가 발생한다.
- 헤더 구조가 복잡하다.
- IPv6
- 128비트 주소 체계를 사용한다.
- 넓은 주소 공간으로 주소 부족 문제를 해결하고
- 헤더 구조가 간소화 되었다.
- ICMP (Internet Control Messange Protocol)
- 네트워크의 오류를 보고하고 진단한다.
- 네트워크 연결 상태를 확인하는 ping 명령이 대표적이다.
- ARP (Address Resolution Protocol)
- IP 주소를 MAC 주소로 변환하는 데 사용된다.
- 로컬 네트워크에서 IP 주소를 물리적인 주소로 매핑한다.
- RARP (Reverse Address Resolution Protocol)
- MAC 주소를 IP 주소로 변환하는데 사용된다.
- ARP의 역방향 작업
링크 계층
- 데이터의 물리적 전송, 오류 검출, 프레임화 등을 담당한다.
- 다양한 네트워크 기술을 통해 데이터 패킷을 전송한다.
유선 LAN
- 양쪽 장치가 동시에 송수신 할수 있는 방식인 전이중화 통신을 사용한다.
- 트위스트 페어 케이블과 광섬유 케이블이 있다.
무선 LAN
- 양쪽 장치가 서로 통신이 가능하지만, 동시에는 통신할 수 없는 방식인 반이중화 통신을 사용한다.
- 따라서, 충돌을 방지하기 위해 CSMA/CA 방식을 사용한다.
- 사용중인 채널이 있는지 확인하고, 유휴 상태인 채널을 발견하면 전송한다.
- 충돌을 사전에 예방하는 방식이다.
- 와이파이
- 전자기기들이 무선 LAN 신호에 연결할 수 있게 하는 기술이다.
- 공유기를 통해 유선 LAN에 흐르는 신호를 무선 LAN 신호로 바꿔준다.
- BSS(Basic Service Set)
- 기본 서비스 집합을 의미한다.
- 단순히 공유기를 통해 네트워크에 접속하는게 아니라, BSS 내에 있는 AP들과 장치들이 서로 통신이 가능한 구조이다.
- 한곳에서 다른곳으로 자유롭게 이동하며 네트워크에 접속하는것은 불가능하다.
- BSS들을 그룹화 한것은 ESS(Extended Service Set) 라고 한다.
계층 간 데이터 송수신 과정
- 서버에 데이터를 요청하면, 애플리캐이션 계층의 요청 값들을 캡슐화 과정을 통해 링크 계층으로 전달한다.
- 링크 계층은 서버의 링크 계층과 통신한다.
- 서버의 링크계층은 애플리케이션 계층까지 비캡슐화 과정을 거쳐 데이터가 전송된다
캡슐화 & 비캡슐화 과정
- 캡슐화 과정
- 상위 계층의 헤더와 데이터를 하위 계층의 데이터 부분에 포함시켜, 해당 계층의 헤더를 삽입한다.
- 비캡슐화 과정
- 하위 계층에서 상위 계층으로 가면서 각 계층의 헤더 부분을 제거한다.
이러한 과정을 통해, 애플리케이션의 PDU인 메시지로 전달된다.
PDU(Protocol Data Unit)
데이터를 네트워크를 통해 보내는 과정에서, 어떻게 데이터가 각 단계에서 처리되는지를 설명하는 데 중요한 개념이다. 데이터가 전달될 떄 한 덩어리의 단위라고 할 수 있다.
- 애플리케이션 계층
- PDU : 데이터 (Data)
- 웹 페이지 요청, 이메일 메시지, 파일 전송 요청이 있다.
- 사용자 또는 애플리케이션에서 생성된 원시 데이터 이다.
- 전송 계층
- PDU : 세그먼트 (Segment)
- 애플리케이션에서 받은 데이터를 세그먼트 라는 형태로 캡슐화 한다.
- 포트 번호, 순서 제어, 오류 검출 같은 전송 관련 정보 헤더를 붙인다.
- UDP의 경우 세그먼트가 아닌 데이터그램을 사용한다.
- 인터넷 계층
- PDU : 패킷 (Packet)
- 전송 계층의 세그먼트를 패킷 이라는 형태로 캡슐화 한다.
- 출발/목적지 IP 주소, TTL 등의 정보를 담은 헤더를 붙인다.
- 링크 계층
- PDU : 프레임 (Frame)
- 인터넷 계층의 패킷을 프레임으로 캡슐화 한다.
- MAC주소, 오류 검출 코드등의 정보를 담은 링크 계층 헤더와, 트레일러를 포함한다.
추가 1 : TCP의 제어 기능
TCP는 신뢰성 있는 데이터를 보장하기 위해 여러 제어기능을 제공한다.
흐름제어
- 송신 측과 수신 측의 데이터 처리 속도가 다를때 사용된다.
- 송신 측이 빠를때는, 수신측 버퍼가 넘치는 오버플로우 문제가 발생한다.
Stop and wait
상대방에게 데이터를 보낸 후, 잘 받았다는 응답이 올때까지 기다리는 방식이다.
sliding window
송신 측이 수신측에서 받은 윈도우 크기를 참고하여 데이터의 흐름을 제어하는 방식이다.
- 수신 측이 한번에 처리할수 있는 데이터의 양(윈도우 크기)을 3way handshake 할때 송신측에 전달한다.
- 상대방에게 응답을 받지 않아도 범위 내에서 데이터를 보낼 수 있다.
- 윈도우 크기는 유동적으로 설정되며, 패킷의 왕복시간이 크다면 네트워크가 혼잡하다고 생각하여 윈도우 크기를 실제 버퍼보다 작게 설정한다.
오류제어
- 송신 측이 ACK를 받지 못할경우 발생한다.
- 송신측이 보낸 데이터가 유실 되거나
- 수신 측이 보낸 ACK가 유실될경우
Stop and wait
위 설명과 같으나, timeout이 발생하면 이전 데이터를 재전송 한다.
Go Back N
- 연속으로 데이터를 보내다가, 오류가 발생한 지점부터 재전송한다.
- 성공적으로 전송된 데이터까지 전송하기 때문에 조금 비효율적이다.
- Selective Repeat
- 오류가 발생한 데이터만 재전송하는 방식이다.
- 수신측 버퍼 데이터가 순차적이지 않아, 정렬을 하기 위한 별도의 버퍼가 필요하다는 단점이 필요하다.
혼잡제어
- 네트워크 내에 패킷의 수가 과도하게 증가하는 현상이다.
- 혼잡 현상을 방지하고 제거하기 위한 기능이다.
AIMD
- 패킷을 하나씩 보내고, 문제가 발생하지 않으면 윈도우 크기 증가.
- 실패시 패킷 전송 속도를 절반으로 줄인다.
- 전송 속도를 올리는데 오랜 시간이 걸리고, 혼잡 상황을 미리 피할 수 없다.
Slow Start (느린 시작)
- AIMD와 달리 윈도우 크기를 지수 함수 꼴로 증가시킨다.
- 혼잡이 감지되면 왼도우 크기를 1로 줄인다.
Fast Retrnsmit (빠른 재전송)
- 지금까지 받은 데이터중 연속되는 패킷의 마지막 순번 이후를 ACK 패킷에 실어서 보낸다.
- 3 ACK Duplicated : 송신 측이 3번 이상 중복된 ACK 번호를 받은 상황
Fast Recovery (빠른 회복)
- 혼잡한 상태가 되면 윈도우 크기를 1이 아니라 반으로 줄이고, 선형 증가
- 혼잡 상황을 한번 겪은 이후로는 AIMD 방식으로 동작한다.
추가 2 : 주소창에 www.naver.com을 입력하면
- 주소창에 www.naver.com 을 입력한다.
- www.naver.com 으로 부터 IP 주소를 얻어온다.
- 브라우저는 www.naver.com 이라는 도메인 이름을 가지고, DNS에 IP 주소를 요청한다.
- DNS는 해당 도메인의 IP를 반환하게 된다.
- 서버에 요청하기
- 브라우저는 이제 받아온 IP 주소로 HTTP 요청을 보낸다.
- 네이버 서버에서는 이 요청에 대한 응답을 보낸다.
- 렌더링 하기
- 브라우저는 서버로부터 받은 html, css, js 등의 리소스를 파싱과 레이아웃 생성 등의 과정을 거쳐 렌더링 한다.