본문 바로가기
개발공부일지/Network

Network - 3Way/4Way Hand-Shaking (TCP)

by Hynn1429 2022. 12. 22.
반응형

안녕하세요.

Hynn 입니다.

 

이번 포스팅에서는 OSI 7 Layer 에서 잠시 소개드린, 3Way/4Way Hand-Shaking 에 대해서 다루도록 하겠습니다.

 가장 중요한 기초개념이기도 한 이 개념은, 네트워크 작동에 대해서 흐름을 이해하기 위해서는 반드시 알아야 하는 개념입니다. 

 

UDP 처럼 단방향 연결의 개념이 아니라, TCP 기반의 양방향 네트워크를 구축하기 위해서는 반드시 이해해야 합니다.

이에 대한 개념을 실제 Visual Studio Code 를 가지고 이해해보도록 하겠습니다.

 

================

1. 3way Hand-Shaking

================

 

1. 3way Hand-Shaking

사실, 이 3Way Hand-Shaking 을 이해한다면, 기본적인 네트워크 동작 흐름도에 대해 어렵지 않을 것으로 생각됩니다.

웹 서버를 만드는 과정을 이해하기 전에, 이러한 단계를 이해함으로써, 복잡한 구성이 발생하더라도, 이러한 동작기반에 의한 이해를 한다면, 어렵지 않게 단계를 파악할 수 있기 때문입니다.

 

이를 구성하기 위해, Server.js, Client.js 두개의 파일을 생성하여, 예시를 작동해보도록 하겠습니다.

작동 코드의 예시는 아래의 코드를 참조하시면 도움이 됩니다.

 

// Server.js

const net = require('net')
const PORT = process.env.SERVER_PORT || 3000
const HOST = process.env.SERVER_HOST || '127.0.0.1'


const server = net.createServer((client) => {
    client.on('data', (data) => {
        console.log(data)
    })
})

server.listen(PORT, HOST, () => {
    console.log(`Tony, Engine Start : ${PORT}`)

    server.on("connection", () => {
        console.log("Connected Client")
    })
})
//client.js

const net = require('net')

const config = {port:3000, host: '127.0.0.1'}
const socket = net.connect(config)

socket.on("connect", () => {
    console.log("Tony, Don't Touch me")
})

 

위의 코드를 실행하면서, 이제 3Way Hand-Shaking 의 대한 개념을 같이 접목하여 설명드려보도록 하겠습니다.

먼저 여기서 숙지해야 할 용어는 2가지가 존재합니다.

 

  1. SYN : Synchronize sequence numbers
  2. ACK : Acknowledgement 

이 두가지를 통해 TCP 에서 3-Way Hand-Shaking 을 이해하기 쉽기 때문입니다. 

먼저 TCP 에서의 3-Way Hand-Shaking 의 구조는 아래와 같이 이루어 집니다.

 

 

위의 코드를 가지고 먼저 예시를 들어보도록 하겠습니다.

먼저 위의 코드를 가지고, Node 를 사용해서 Server 를 구동시킵니다.

 

그리고, Client 를 실행시키게 되면, Client 에서 Server로 SYN을 전송합니다.  

요청을 받은 Server 는 SYN을 수신받고, SYN+ACK 를 다시 Client 로 보내주게 되고, Client 에서 최종적으로 Server 로 ACK를 보내면서, 3Way Hand-Shaking 이 진행됩니다. 이 작업이 완료되면 TCP의 연결이 초기화된다고 이해하시면 간단할 것으로 생각됩니다. 

 

이를 글로 표현하면 아래와 같이 진행을 하게 됩니다.

 

  1. 먼저 Server.js 에서 변수를 선언하고, server 변수에 net.createServer를 선언합니다. 이 변수에는 Client 가 연결시 data 라는 값을 출력하도록 Console.log 를 담습니다.
  2. Client.js 에서 각각 변수를 선언하고, Client 가 서버에 접속할 수 있도록 코드를 작성합니다. 또한 서버를 Node.js 로 실행합니다.
  3. 이제 Client 를 Node.js 를 이용해서 실행하면, 실행되어 있는 서버에 SYN 요청이 전송됩니다. (#1)
  4. Server 에서 Client 에서 요청을 받은 SYN 을 ACK 함과 동시에 SYN 을 Client 에 전달합니다 (#2)
  5. Client 에서는 서버측에서 SYN 요청에 대한 ACK 를 다시 서버로 보냄으로서 3Way Hand-Shaking 절차가 종료되니다 (#3)

 

 

앞으로 학습하게 될 , Express, Node.js 는 대부분이 이러한 절차의 기반으로 동작이 되는만큼,

이에 대해서 개념을 이해하셨기를 바랍니다.

 

감사합니다.

반응형

'개발공부일지 > Network' 카테고리의 다른 글

CSR 과 SSR 알아보기  (0) 2023.01.05
Network - OSI 7 Layer  (0) 2022.12.19

댓글