노트

TCP/IP 4계층 모델1(애플리케이션, 전송 계층) 본문

CS

TCP/IP 4계층 모델1(애플리케이션, 전송 계층)

blackmilktea 2024. 1. 16. 22:48

1. TCP/IP 4계층 구조

애플리케이션 계층 FTP/HTTP/SSH/SMTP/DNS
전송 계층 TCP/UDP/QUIC
인터넷 계층 IP/ARP/RARP
링크 계층 이더넷

 

애플리케이션 계층 (Application Layer)

FTP, HTTP, SSH, DNS 등 응용 프로그램이 사용되는 프로토콜 계층

웹 서비스, 이메일 등 서비스를 실질적으로 제공하는 층

FTP(File Transfer Protocol): 장치와 장치 간의 파일을 전송하는 데 사용되는 표준 통신 프로토콜
SSH(Secure Shell): 보안되지 않은 네트워크에서 네트워크 서비스를 안전하게 운영하기 위한 암호화 네트워크 프로토콜
HTTP(HyperText Transfer Protocol): World Wide Web을 의한 데이터 통신의 기초이자 웹 사이트를 이용하는 데 사용
SMTP(Simple Mail Transfer Protocol): 전자 메일 전송을 위한 인터넷 표준 통신 프로토콜
DNS(Domain Name System): 도메인 이름과 IP 주소를 매핑해 주는 서버

 

전송(Transport) 계층

송신자와 수신자를 연결하는 통신 서비스와 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어를 제공

애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때 중계 역할, 대표적으로 TCP와 UDP

 

TCP(Transmission Control Protocol)

  • 패킷 사이의 순서를 보장
  • 연결지향 프로토콜을 사용해 연결하여 신뢰성을 구축해서 수신 여부를 확인
  • 가상회선 패킷 교환 방식을 사용

UDP(User Datagram Protocol)

  • 순서를 보장 X
  • 수신 여부 확인 X
  • 단순히 데이터만 주는 데이터그램 패킷 교환 방식을 사용
가상회선 패킷 교환 방식: 각 패킷에는 가상회선 식별자가 포함, 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 '순서대로' 도착하는 방식
데이터그램 패킷 교환 방식: 패킷이 독립적으로 이동, 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있으며 최적의 경로를 선택, 도착한 '순서가 다를 수' 있는 방식 

 

TCP 연결 성립 과정

TCP는 신뢰성을 확보할 때 3-way handshake라는 작업을 진행

https://commons.wikimedia.org/wiki/File:Tcp_connect.svg

1. SYN 단계: 클라이언트는 서버에 클라이언트의 ISN를 담아 SYN에 전송

   클라이언트가 송신하는 SYN → 클라이언트의 ISN: x

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

   서버가 송신하는 SYN → 서버의 ISN: y

                                ACK → 승인번호: x+1

3. ACK 단계: 클라이언트는 서버의 ISN+1 한 값인 승인번호를 담아 ACK를 서버에 전송

   클라이언트가 송신하는 ACK → 승인번호: y+1

SYNchronization: 연결 요청 플래그
ACKnowledgement: 응답 플래그
ISN(Initail Sequence Numbers): 초기 네트워크 연결을 할 때 할당된 32비트 고우 시퀀스 번호

 

TCP는 이 과정 이후 신뢰성이 구축되고 데이터 전송을 시작

 

TCP 연결 해체 과정

TCP가 연결을 해제할 때는 4-way handshake 과정이 발생

https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Connection_termination

1. 먼저 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 전송,

    클라이언트는 FIN_WAIT1 상태에 들어가고 서버의 응답을 대기

2. 서버는 ACK라는 승인 세그먼트 전송하고 CLOSE_WAIT 상태에 들어감.

    클라이언트는 세그먼트를 받으면 FIN_WAIT2 상태에 들어감.

3. 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 전송하고 LAST_ACK 상태에 들어감.

4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 됨.

이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 CLOSED. 클라이언트와 서버의 모든 자원의 연결이 해제

 

이 과정에서 클라이언트가 TIME_WAIT 상태로 어느 정도 대기한 후 연결을 닫는 이유는

1) 지연 패킷이 발생할 경우를 대비.

    패킷이 뒤늦게 도달하고 이를 처리하지 못하면 데이터 무결성 문제가 발생

2) 두 장치가 연결이 닫혔는지 확인하기 위함. 

    만약 서버가 LAST_ACK 상태에서 클라이언트의 ACK를 대기 중인데 클라이언트가 이미 닫혀있으면 새로운 열결을 시도할 때 계속 LAST_ACK로 되어있기 때문에 접속 오류가 발생할 수 있음.

TIME_WAIT: 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태. 지연 패킷 등의 문제점을 해결하는 데 사용
OS마다 설정 시간이 조금씩 다름. ex) 우분투는 60초, 윈도우는 4분으로 설정
데이터 무결성(Data Integrity): 데이터의 정확성과 일관성을 유지하고 보증하는 것

 

 

 

'면접을 위한 CS 전공지식 노트'를 기반으로 작성한 글입니다.

저자 블로그 https://blog.naver.com/jhc9639/222713398150

'CS' 카테고리의 다른 글

네트워크 기기  (0) 2024.01.18
TCP/IP 4계층 모델2(인터넷, 링크 계층)  (0) 2024.01.17
네트워크 처리량, 토폴로지  (0) 2024.01.15
프로그래밍 패러다임  (0) 2024.01.14
디자인 패턴2  (2) 2024.01.13