Bin's Blog

오늘의 CS(네트워크 - TCP/IP 4계층 모델(전송계층)) 본문

CS

오늘의 CS(네트워크 - TCP/IP 4계층 모델(전송계층))

hotIce 2023. 6. 7. 08:02
728x90

전송계층은 송신자와 수신자를 연결하는 통신 서비스를 제공하며 연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어를 제공할 수 있으며 애플리케이션과 인터넷 계층 사이의 데이터가 전달될 떄 중계 역할을 한다. 대표적으로 TCP와 UDP가 있다. 

 

👉 TCP(Transmission Control Protocol) - "신뢰할 수 있는 우편 배달부" 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 하여 신뢰성을 구축해서 수신 여부를 확인하며 "가상회선 패킷 교환 방식"을 사용한다. 데이터가 온전히, 정확한 순서대로 전달되도록 보장한다. 이런 특성 때문에 이메일이나 웹 페이지 로딩과 같이 정확성이 중요한 경우에 사용한다. 

 

👉 UDP(User Datagram Protocol) - "빠른 우편 배달부" 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 데이터그램 패킷 교환 방식을 사용한다. 데이터 전송의 빠르기를 중요시하며 몇몇 데이터가 누락되거나 순서가 바뀌어도 괜찮은 경우에 사용된다. 실시간 스트리밍, 게임, VoIP(음성 인터넷 프로토콜 - 스카이프)와 같이 데이터 전송의 신속성이 중요한 경우에 주로 사용된다. 

 

1️⃣ 가상회선 패킷 교환 방식

가상회선 식별자가 포함되며 가상회선을 따라 모든 패킷들이 전송되면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착하는 방식을 말한다. 가상회선 패킷 교환에서는 데이터를 전송하기 전에 통신 경로(회선) 미리 설정한다. 이렇게 설정된 경로는 가상의 회선처럼 동작하므로 가상회선이라 부른다. 

이 방식의 장점은 패킷들이 도착하는 순서가 보장된다. 모든 패킷들이 미리 설정된 같은 경로를 따라서 이동한다. 데이터 전송 중에는 경로를 찾는데 시간을 소비하지 않아 효율적이다. 

 

2️⃣ 데이터그램 패킷 교환 방식

패킷이 독립적으로 이동하며 최적의 경로를 선택하여 가는데, 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있으며 도착한 순서가 다를 수 있는 방식을 뜻한다. 네트워크의 특정 부분에 문제가 생겨도 다른 경로를 통해 전송될 수 있다. 패킷들이 순서대로 도착하지 않을 수 있어서 수신 측에서 패킷을 원래 순서대로 재조립해야 한다는 것이다. 

 

3️⃣ TCP 연결 성립 과정

TCP는 신뢰성을 확보할 때 3-way-handShake라는 작업을 진행한다.

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

 

👉 SYN 단계(연결 요청): 클라이언트가 서버에 클라이언트의 ISN을 담아 SYN패킷을 보낸다.  ISN은 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호를 말하고 이는 장치마다 다를 수 있다.

 

👉 SYN + ACK 단계(연결 요청 확인 및 수락): 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보낸다. 

 

👉 ACK 단계(연결 요청 확인): 클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보낸다.  

 

4️⃣ TCP 연결 해제 과정

TCP가 연결을 해제할 때는 4-웨이 핸드셰이크 과정이 발생합니다.

 

👉 1번: 먼저 클라이언트가 연결을 닫으려고 할 때 FIN(연결 종료를 나타내는 플래그)으로 설정된 세그먼트를 보냅니다. 즉, 나는 더 이상 보낼 데이터가 없다라는 뜻이다. 그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다린다. 

 

👉 2번: 서버는 클라이언트로 ACK라는 승인 세그먼트를 보낸다. 그리고 CLOSE_WAIT 상태에 들어간다. 클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.

 

👉 3번: 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보낸다. 

 

👉4번: 클라언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 된다. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제된다. 

 

🧐 눈여겨봐야 할 부분은 TIME_WAIT 상태이다. 그냥 연결을 닫으면 되지 왜 굳이 일정 시간 뒤에 닫을까?

 

👉 첫 번째는 지연 패킷이 발생할 경우를 대비하기 위함이다. 패킷이 뒤늦게 도달하고 이를 처리하지 못하면 데이터 무결성(데이터의 정확성과 일관성을 유지하고 보증하는 것) 문제가 발생한다. 예를 들어 전체 데이터가 100일 때 일부 데이터인 50만 들어오는 현상이 발생할 수도 있는 것이다. 

 

👉 두 번째는 두 장치가 연결이 닫혔는지 확인하기 위해서다. 만약 LAST_ACK 상태에서 닫히게 되면 다시 새로운 연결을 하려고 할 때 장치는 줄곧 LAST_ACK로 되어 있기 때문에 접속 오류가 나타난다.

 

📚 용어 정리

1️⃣ 패킷: 인터넷을 통해 데이터를 주고 받는 기본 단위, 컴퓨터는 큰 데이터를 작은 조각들 즉 패킷으로 나눠서 보낸다. 어디에서 왔고 어디로 가야하는지에 대한 정보도 함게 들어있다. 그래서 패킷은 각각의 인터넷 주소로 올바르게 전송될 수 있다. 

 

2️⃣ 데이터그램: 네트워크 계층의 프르토콜이 사용하는 패킷, IP데이터그램이 있다. 데이터그램은 목적지 주소, 출발지 주소, 데이터, 그리고 오류 검출을 위한 체크섬 등의 필드를 포함할 수 있다. 컴퓨터 간에 정보를 보낼 때 사용하는 편지라고 생각하면 된다. 이 편지에는 받는 사람의 주소, 보내는 사람의 주소, 그리고 메시지(데이터)가 포함되어 있다. 

 

3️⃣ ISN(Initial Sequence Number): 각 데이터 세그먼트(메모리 공간)에 시퀀스 번호를 부여하기 위해 사용되는 초기값이다. 이 번호를 사용함으로써 전송되는 각 바이트에 대해 고유한 순서 번호를 가질 수 있다. 이렇게 하면, 받는 쪽이 데이터 패킷을 올바른 순서로 재조립하거나 누락된 패킷을 확인할 수 있다. (초기 네트워크 연결을 할 때 할당된 32비트 고유 시퀀스 번호이다.)

 

4️⃣ ACK(Acknowlegdment Number): ACK 번호는 데이터를 성공적으로 받았음을 확인하기 위해 사용되는 값이다. ACK 번호는 마지막으로 성공적으로 받은 데이터의 시퀀스 번호에 1을 더한 값이다. 예를 들어, 시퀀스 번호가 100인 패킷을 받았다면, ACK 번호는 101이 된다. 다음에 받을 시퀀스 번호를 나타낸다.(응답 플래그-제어)

 

5️⃣ SYN(Synchronize): TCP 통신에서 연결 설정을 시작하기 위한 신호이다. 두 시스템 간에 통신을 시작하기 위한 시퀀스 번호를 동기화하는 데 사용(연결 요청 플래그)

 

728x90