TCP / IP 4계층 모델

LEE ·2022년 6월 17일
0

CS 정리

목록 보기
7/12
post-thumbnail

TCP / IP 계층은 네 개의 계층을 가지고 있으며 OSI 7 계층과 많이 비교합니다.

  • 애플리케이션 계층

    FTP, HTTP, ssh, SMTP,DNS 등이 사용되는 계층이며 웹 서비스, 이메일 등 서비스를 실질적으로 제공하는 층입니다

  • 전송계층

    송신자와 수신자를 연결하는 통신 서비스를 제공 , 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 때의 중계 역할을 합니다.
    대표적으로 TCP, UDP 가 있습니다.

TCP , UDP의 차의점 :

TCP 는 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연경을 하며 신뢰성을 구축해서 수신 여부를 확인하며 '가상회선 패킷 교환 방식'을 사용합니다.

UDP는 순서을 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 '데이터그램 패킷 교환 방식'을 사용합니다.

  • 가상회선 패킷 교환 방식

가상회선 패킷 교환 방식은 각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 ‘순서대로’ 도착하는 방식을 말합니다.

  • 데이터그램 패킷 교환 방식

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

  • TCP 연결 성립 과정

    TCP 는 신뢰성을 확보할 때 3-way handshake 작업을 진행 합니다.

    클라이언트와 서버가 통신할 때의 과정
  1. SYN 단계 : 클라이언트는 서버에 클라이언트의 ISN 담아 SYN을 보냅니다. ISN 은 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말하며 이는 장치마다 다를 수 있습니다.
  2. SYN + ACK 단계 : 서버는 클라이언트의 SYN을 수신하고 서버의 ISN 을 보내며 승인번호를 클라이언트 ISN +1 을보냅니다.
  3. ACK 단계 : 클라이언트는 서버의 ISN +1 한 값인 승인번호를 담아 ACK 를 서버에 보냅니다.

TCP는 이러한 과정이 후 신회성이 구축되고 데이터를 전송합니다. TCP는 3-way handShake 과정이 있기 때문에 신뢰성이 있는 계층이라고 하고, UCP 는 이러한 과정이 없기 때문에 신뢰성이 없는 계층이라고 합니다.

  • SYN : 연결요청 플래그, ACK : 응답 플래그, ISN : 초기 네트워크를 연결을 할 때 할당된 32비트 고유 시퀀스 번호
  • TCP 연결 해제 과정

    TCP 는 연결을 해제 할 때는 4-way handshake 과정이 발생 합니다.
  1. 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세크먼트를 보냅니다. 그리고 클라이언크는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다립니다.
  2. 서버는 클라이언트에 ACK 라는 세그먼트를 보냅니다. 그리고 CLOSE_WAIT 상태에 들어갑니다. 클라이언트가 ACK 세그먼트를 받으면 FIN_WAIT_2 상태에 들어갑니다.
  3. 서버는 ACK 를 보내고 일정 시간 이후에 클라이언트에 FIN 이라는 세그먼트를 보냅니다.
  4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 됩니다.
    이후 클라이언트는 어느정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제됩니다.

4-way handshake 과정에서 중요한 점은 TIME_WAIT 입니다. 왜 일정시간뒤에 연결을 닫는 것일까?

두가지 이유가 있습니다.
1. 지연 패킷이 발생할 경우 대비하기 위함 패킷이 뒤늦게 도달하고 이를 처리하지 못한다면 데이터 무결성 문제가 발생하기 때문입니다.
2. 두 장치가 연결이 닫혔는지 확인하기 위함 만약 LAST_ACK 상태에서 닫히게 되면 다시 새로운 연결을 하려고 할 때 장치는 줄곧 LAST_ACK로 되어있기 때문에 접속 오류가 나타나게 될 것입니다.
이러한 이유로 TIME_WAIT라는 잠시 기다릴 시간이 필요합니다.

출처 : 면접을 위한 CS 전공지식 노트 - 지은이 : 주홍철
을 읽고 정리한 내용입니다.

0개의 댓글