Network

Network | TCP 세션의 SYN, ACK 패킷 추적 → 소켓, HTTP통신

이진유진 2024. 8. 6. 18:02
반응형
오늘은 TCP 세션의 SYN, ACK 패킷 추적에 대하여 알아보겠습니다.

 

TCP 세션과 SYN, ACK 패킷? 

TCP(Transmission Control Protocol)은 인터넷에서 데이터를 신뢰성 있게 전송하기 위한 프로토콜로, 세션 설정과 해제 과정에서 사용되는 SYN과 ACK 패킷이 중요합니다 .

 

SYN 패킷은 세션을 초기화하고 연결을 요청하는 데 사용되며, ACK 패킷은 상대방의 패킷을 확인하는 데 필요합니다. 

 

SYN(Synchronize)
SYN은 TCP 연결 설정 과정에서 사용되는 패킷입니다. 
클라이언트가 서버에 연결 요청을 보낼 때 사용합니다. 

동작 
1. 클라이언트가 서버에 TCP 연결을 요청하며 SYN 패킷을 보냅니다. 
2. 서버는 이 요청을 수신하고, SYN과 함께 ACK 패킷을 보냅니다 (SYN/ACK)
3. 클라이언트가 SYN / ACK를 수신하면, 마지막으로 ACK 패킷을 서버에 보내 연결을 완료합니다. 

ACK(Acknowledgment)
ACK는 TCP 통신에서 수신한 데이터를 확인하고 응답하는 패킷입니다. 

동작
* SYN/ACK 응답 외에도 TCP 통신에서 데이터가 정상적으로 수신되었음을 확인하는 데 사용됩니다. 
예를 들어, 데이터 패킷이 성공적으로 수신되었을 때 ACK 패킷을 보내어 송신 측에 수신 성공을 알립니다. 

 

소켓이란 무엇인가?

소켓(Socket)은 네트워크 프로그래밍에서 사용되는 개념으로, 네트워크를 통해 데이터를 송수신하기 위한 인터페이스를 제공하는 추상화된 개념입니다. 

소켓은 운영체제가 제공하는 소프트웨어 장치로, 네트워크를 경유하는 프로세스 간 통신의 종착점 역할을 합니다. 

OSI 7계층 중 응용 계층에 속하는 프로세스들은 데이터를 송수신할 때 반드시 소켓을 거 쳐 전송 계층(TCP or UDP)으로 데이터를 전달해야합니다. 

 

소켓의 주요 요소 

1. 프로토콜 : TCP 또는 UDP 와 같은 전송 계층 프로토콜을 사용하여 통신 방식을 지정합니다. 

2. IP 주소 : 네트워크에서 소켓이 위치한 호스트(컴퓨터)의 고유한 식별자입니다. IP 주소는 소켓이 네트워크 상에서 어디에 있는지를 나타냅니다. 

3. Port 번호 : 하나의 컴퓨터에서 여러 개의 소켓이 동작할 수 있으며, 이 소켓들을 구분하기 위한 번호입니다. 포트 번호는 각 소켓이 특정 네트워크 서비스와 연결되도록 합니다. 

 

일반적인 소켓 통신 흐름

서버

1. 소켓 생성 : 서버는 먼저 소켓을 생성하여 네트워크 상에서 통신을 준비합니다. 

2. 바인딩 : 소켓에 IP 주소와 포트 번호를 할당하여 특정 네트워크 인터페이스와 연결합니다. 

3. 리스닝(대기 상태 설정) : 클라이언트의 연결 요청을 받기 위해 소켓을 리스닝 상태로 전환합니다. 이후 클라이언트의 연결 요청을 받기 위해 대기열을 생성합니다. 

4. 연결 수락(Accept) : 클라이언트가 연결 요청을 하면, 서버는 Accept 함수를 사용하여 실질적인 통신을 위한 새로운 소켓을 생성하고, 이 소켓을 사용하여 클라이언트와 데이터 송수신을 진행합니다. 

5. 데이터 송수신 : 서버와 클라이언트는 생성된 소켓을 통해 데이터를 주고받습니다. 

6. 소켓 닫기 : 통신이 완료되면 소켓을 닫아 자원을 반환하고 연결을 종료합니다. 

 

클라이언트

1. 소켓 생성 : 클라이언트도 마찬가지로 소켓을 생성하여 서버에 연결을 시도합니다. 

2. 서버 연결 : 서버의 IP 주소와 포트 번호를 사용하여 서버에 연결을 시도합니다. 

3. 데이터 송수신 : 서버와 마찬가지로 생성된 소켓을 통해 데이터를 주고받습니다. 

4. 소켓 닫기 : 통신이 완료되면 소켓을 닫아 자원을 반환하고 연결을 종료합니다. 

 

소켓 종류

스트림 소켓 

TCP를 사용하는 연결 지향형 소켓으로, 데이터의 신뢰성과 순서를 보장합니다. 

대량의 데이터 전송에 적합하며, 점대점 연결을 지원합니다. 

데이터그램 소켓 

UDP를 사용하는 비연결성 소켓으로, 데이터의 신뢰성을 보장하지 않고 순서도 보장되지 않습니다. 

점대점 뿐만 아니라 일대다 통신에도 적합합니다. 

(accept 과정 없이 소켓 생성 후 바로 데이터 송수신)

 

HTTP 통신과 소켓 통신의 차이 

HTTP 통신 

클라이언트가 요청을 보내면 서버는 해당 요청에 대한 응답을 보내고 연결을 바로 종료합니다. 

데이터 전달 시점에만 연결이 이루어지므로 리소스 절약에 유리합니다. 

주로 웹 브라우저와 웹 서버 간 통신에 사용됩니다. 

소켓 통신

클라이언트와 서버가 지속적으로 연결을 유지하며 양방향으로 데이터를 주고받습니다. 

실시간 데이터 전송이 필요한 경우 주로 사용되며, 리소스 소모가 크지만 실시간 통신에 유리합니다. 

 

TCP 연결 설정 : 3-way Handshake

TCP(Transmission Control Protocol)은 연결 지향적이고 신뢰성 있는 데이터 전송을 보장하는 프로토콜입니다. 

데이터의 정확성과 순서를 유지하며, 데이터의 손실을 최소화하기 위해 설계되었습니다. 

이를 위해 TCP는 연결 설정 과정에서 3-way handshake를 사용합니다. 

이 과정은 클라이언트와 서버 간에 연결을 성공적으로 설정하기 위한 필수적인 단계입니다. 

 

3-way Handshake 과정

Step 1 :  SYN - 클라이언트가 서버에게 연결 요청 

1. Client SYN : 클라이언트는 연결을 시작하기 위해 SYN 패킷을 생성하여 서버에 전송합니다. 

    SYN(Synchronize) : 연결을 시작하는 데 사용되며, 일련번호(Sequence Number)를 포함합니다. 

                                       이 번호는 클라이언트가 전송할 데이터의 시작점을 나타냅니다.

    클라이언트 송신 상태 : SYN_SENT

 

Step 2 : SYN + ACK - 서버가 클라이언트에게 요청 수락 

2. Server SYN/ACK : 서버는 클라이언트의 SYN 패킷을 받으면, 연결을 받아들였음을 의미하는 SYN/ACK 패킷을 생성하여 클라이언트에게 전송합니다. 

SYN/ACK : 클라이언트의 SYN 패킷을 수신했고, 연결을 받아들였으며 다음 통신에 대비하기 위해 ACK(승인)을 포함합니다. 

                   ACK 값은 클라이언트가 기존에 보낸 SYN 패킷의 Sequence Number에 1을 더한 값입니다. 

서버 송신 상태 : SYN_RECEIVED

 

Step 3 : ACK - 클라이언트가 서버에게 요청 수락 확인

3. Client ACK : 클라이언트는 서버의 SYN/ACK 패킷을 수신하면, 서버에게 연결 요청을 수락하고 데이터 송수신 준비가 되었음을 알리는 ACK 패킷을 생성하여 서버에 전송합니다. 

ACK : 서버가 보낸 SYN/ACK 패킷을 수신하고, 다음 데이터 송수신을 위해 서버에게 승인을 보냅니다.  

           ACK 값은 서버의 SYN 패킷의 Sequence Number에 1을 더한 값입니다. 

클라이언트의 송신 상태 : ESTABLISHED

 

연결 설정 완료 

이로써 클라이언트와 서버 간에 신뢰성 있는 연결이 설정됩니다. 

데이터 전송 이전에 3-way handshake는 양쪽 모두가 데이터를 주고받을 준비가 되었음을 확인하고, 각 패킷의 일련번호를 동기화하여 데이터의 순서를 보장합니다. 

 

3-way Handshake 사용이유?

신뢰성 : 클라이언트와 서버 간의 정확한 연결 설정을 보장하여 데이터 전송의 신뢰성을 높입니다. 

순서 보장 : 각 패킷의 일련번호를 통해 데이터의 순서를 보장하여 올바른 조립과 응용 프로그램으로의 전달을 가능하게 합니다. 

동기화 : 각 단계에서 패킷의 일련번호를 동기화하여 중복된 연결 요청을 방지하고, 연결 상태를 정확히 파악합니다. 

 

 

 

 

출처

https://sjs2215.tistory.com/57

https://velog.io/@newdana01/%EC%86%8C%EC%BC%93%EC%9D%B4%EB%9E%80-%EC%A2%85%EB%A5%98-%ED%86%B5%EC%8B%A0-%ED%9D%90%EB%A6%84-HTTP%ED%86%B5%EC%8B%A0%EA%B3%BC%EC%9D%98-%EC%B0%A8%EC%9D%B4

https://velog.io/@park9910/TCP-3-way-handshake

 

 

반응형

'Network' 카테고리의 다른 글

Network | TCP/IP 통신이란?  (0) 2024.08.13
Network | Domain, DNS서버란?  (0) 2024.08.06
Network | 서브넷(Subnet)이란?  (0) 2024.07.31
Network | Public IP와 Private IP란?  (0) 2024.07.08
Network | IPv4와 IPv6란?  (0) 2024.07.08