네트워크

인터넷에서 웹브라우저까지 (6) - Transport Layer , TCP 3-way Handshaking

예 찬 2022. 1. 18. 19:54

 

 

Network Layer의 인터넷 프로토콜은 데이터 전송을 위해 최대한 노력(Best Effort) 하지만 전송의 완료를 보장하지 못합니다.

 

송신 호스트와 수신 호스트가 실제로 통신하는 구간은 Network Access Layer와 Network Layer입니다. 

 

 

 

 

그렇기 때문에 Network Layer로부터 전송된 데이터를 목적지가 되는 특정 애플리케이션으로 전송해야 하는 역할은 Transport Layer가 담당합니다.

 

Transport Layer에서는 오류 점검 및 복구, 흐름과 혼잡 제어 기능을 통해 신뢰성 있는 전송을 제공하고 효율적인 전송을 위한 Multiplexing 기능 등 신뢰성 있고 효율적인 통신을 위한 여러 가지 기능을 제공합니다.

 

신뢰성 있는 전송이란 데이터가 손실되지 않고 중복되지 않는 것을 의미합니다.

 

Transport Layer에서는 연결 지향(Connection-oriented) 프로토콜인 TCP(Transmission Control Protocol)를 통해 신뢰성 있는 전송을 제공할 수 있습니다.

 

여기서 연결 지향이란 데이터를 전송하기 전에 송신 호스트와 수신 호스트의 패킷 교환을 통해 하나의 가상 회선을 만들어 연결을 확립해야 한다는 것을 의미합니다.

 

패킷 교환을 통해 연결을 만드는 과정을 3-way Handshaking이라고 합니다.

 

3-way Handshaking 과정을 그림으로 알아보겠습니다.

 

먼저, 클라이언트 애플리케이션이 서버 애플리케이션에게 연결을 요청하는 SYN 세그먼트를 보낸 뒤 SYN-CENT 상태로 들어갑니다.

 

 

 

 

SYN 세그먼트에는 데이터가 들어 있지 않고 플래그 필드의 SYN이 1로 설정됩니다.

 

 

 

 

순서 번호는 초기 순서 번호(Initial Sequence Number)를 랜덤으로 생성하여 보냅니다.

 

 

 

 

SYN 세그먼트를 받은 서버 애플리케이션은 SYN-RECEIVED 상태로 들어갑니다.

연결 요청 허가 응답을 위해 ACK 플래그를 1로 설정하고, 클라이언트 애플리케이션에게 데이터 전송 허가 요청을 위한 SYN 플래그도 1로 설정하여 세그먼트를 보냅니다.

 

 

 

 

ACK+SYN 세그먼트는 서버 애플리케이션이 첫 번째로 보내는 세그먼트이므로 랜덤으로 ISN을 생성하여 순서 번호로 사용합니다.

 

응답 번호는 클라이언트 애플리케이션이 보낸 SYN 세그먼트의 순서 번호에 +1을 하여 사용합니다.

 

만약 클라이언트 애플리케이션이 보낸 SYN 세그먼트에서 ISN으로 생성된 순서 번호가 20000이었다면 ACK+SYN 세그먼트의 응답 번호는 20001입니다.

 

 

 

 

ACK+SYN 세그먼트를 받은 클라이언트 애플리케이션은  ESTABLISHED 상태로 들어가고 서버로부터 받은 SYN 요청에 대한 허가 응답을 위해 ACK 세그먼트를 보냅니다.

 

 

 

 

서버가 ACK 세그먼트를 받아 ESTABLISHED 상태가 되면서 연결이 확립됩니다.

 

하나의 애플리케이션 당 하나의 TCP 연결이 수립되고 고유 소켓 주소를 가지고 있습니다.

 

소켓 주소는 ip Address와 포트 번호로 구성된 주소입니다.

 

 

 

 

소켓 주소의 포트 번호는 애플리케이션을 식별할 수 있는 고유 번호로 0 ~ 65535번을 사용할 수 있습니다.

 

통신에서 서버 애플리케이션은 0 ~ 1023번의 포트 번호 중에서 Well-Known Port라고 불리는 서비스 별로 권장하는 포트를 사용하고 

 

 

Well-Known Port

 

 

클라이언트 애플리케이션은 1025 ~ 65535번 중에서 임시로 할당되는 포트 번호(Ephemeral Port)를 사용합니다.

 

서로 다른 애플리케이션은 같은 네트워크 상에 있더라도 다른 포트 번호를 사용한다면 동시에 각 상대 애플리케이션과 통신이 가능합니다.

 

여러 개의 통신을 하나의 네트워크 연결로 동시에 가능하게 통합하는 동작을 Multiplexing이라고 하고 Demultiplexing을 통해 다시 여러 개의 통신으로 나눌 수 있습니다.

 

 

 

 

3-way Handshaking 과정을 통해 수립한 TCP 연결에서 클라이언트 애플리케이션과 서버 애플리케이션이 서로 데이터를 전송할 수 있습니다.

 

 


 

다음 글을 통해 TCP 연결에서 데이터의 전송에 대해 알아보도록 하겠습니다.