TCP/UDP란
네트워크에 관해서 얕게 공부해보신 분이라면 OSI7계층이라는 얘기를 들어보셨을 겁니다
OSI 7 계층(OSI Model 7 Layer)에는 TCP/UDP 두 가지의 유형이 있는데 TCP 또는 전송 제어 프로토콜(Transmission Control Protocol)과 UDP 또는 유저 데이터그램 프로토콜(User Datagram Protocol)이 있습니다
TCP는 송수신자가 계속 연결을 유지하고 있는 연결 지향 프로토콜이며, UDP는 반대로 서로 간 연결을 맺지 않고 한쪽에서 일방적으로 데이터를 전송하는 비연결 지향 프로토콜입니다
TCP(Transmission Control Protocol)
TCP(Transmission Control Protocol)는 네트워크를 통해서 데이터를 주고받을 수 있는 연결 지향 통신 프로토콜로 정의되어 있습니다
TCP 프로토콜은 데이터가 누락되거나 손상된 부분이 없고 올바른 순서로 전송되었는지 확인을 합니다
웹페이지를 열람하거나 파일을 다운로드하거나 대화를 주고받을 때 사용하는 프로토콜 중 하나인데 만약 이때 TCP 프로토콜을 사용하지 않을 경우 잘못된 데이터나 순서가 뒤죽박죽 섞여있을 수도 있습니다
그래서 데이터의 신뢰성을 보장하기 위해 3-Way Handshake과정이 필요합니다
3-Way Handshake란
TCP 프로토콜에서 정확한 데이터 전송을 보장하기 위해 상대방 컴퓨터와 서로 연결이 잘되어있는지 확인하는 과정을 의미합니다
[Step 1]
Client > Server : SYN
클라이언트는 서버에 접속을 요청하는 연결 요청 메시지(SYN) 패킷을 서버에 전송합니다
패킷을 전송한후에 클라이언트는 서버 측의 응답(SYN/ACK)을 기다리는 상태(SYN_SENT)가 됩니다
[Step 2]
Server > Client: SYN ACK
서버는 클라이언트의 SYN 요청을 받은 뒤에 클라이언트의 접속 요청을 수락한다는 SYN와 ACK 패킷을 클라이언트로 발송하고 다시 클라이언트의 응답을 기다리는 상태(SYN_RECEIVED)가 됩니다
[Step 3]
Client > Server : ACK
클라이언트가 서버에게 ACK패킷을 전송 후 이후부터는 지속적으로 데이터가 송수신되게 됩니다
위의 과정을 3 way handshake라고 하며 그렇다면 1 way handshake나 2 way handshake가 아니라 왜 하필 3 way handshake일까 의문이 들게 될 텐데 이는 TCP는 UDP와 다르게 양방향 연결 프로토콜이므로 클라이언트가 서버 측에 자신의 존재를 알리고 서버 측에서도 클라이언트의 존재를 확인하고 응답을 받으며 클라이언트에게 서버의 존재를 알린 뒤 클라이언트가 서버의 존재를 알았다고 응답을 하며 서로의 관계를 확인해야 하기 때문에 2way나 1way handshake로는 부족하기 때문에 3 way handshake를 사용합니다
현재는 대부분 웹페이지를 열람하거나 파일을 다운로드하거나 사용자 간의 통신을 위하여 TCP 프로토콜을 많이 사용하고 있습니다
UDP(User Datagram Protocol)
UDP(User Datagram Protocol)는 컴퓨터나 응용프로그램 등의 네트워크상에서 상대방의 응답을 확인하지 않고 네트워크를 통해 데이터를 지속적으로 보낼 수 있도록 하는 단일 지향 프로토콜로 정의되어 있습니다
UDP는 TCP와 다르게 단순한 에러 검사만 하므로 데이터의 신뢰성을 보장하기 않습니다하지만 UDP는 데이터의 신뢰성을 보장하지 않는 대신 데이터 전송을 위한 설정이 따로 필요 없으므로 TCP보다 전송속도가 빠릅니다
UDP는 메일을 전송하거나 웹페이지를 열람하거나 파일을 다운로드하는 데에는 데이터의 신뢰성을 보장하지 않기 때문에 적합하지 않습니다인터넷 방송이나 실시간 중계 등 실시간 프로그램에 주로 사용됩니다
긴글 읽어주셔서 감사합니다 TCP와 관련되어 SYN Flood에 관한 포스팅도 작성하였으니 관심있으시면 한번 읽어주세요