TCP(Transmission Control Protocol)은 인터넷 상에서 데이터를 전송하기 위해 사용되는 프로토콜 중 하나이다. TCP 연결의 설정과 해제는 3-way handshake와 4-wayhanshake를 통해 이루어진다.
TCP 의 연결 설정과 해제를 이해하기 위해서는 네트워크의 기본 모델인 OSI 7 계층부터 이해하는 것이 좋다.
OSI 7계층
OSI 7 계층은 ISO에서 개발한 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 개방형 시스템 상호 연결 모델이다. 각 계층은 독립적이고 하위 계층의 기능을 이용해 상위 계층에 기능을 제공한다.
OSI 7계층의 특징
"응, 표, 세, 전, 네, 데, 물”
각 계층을 지날 때 마다 Header가 붙게 되고 해당 계층의 기능과 관련된 제어 정보가 포함된다. 제어 정보는 운영체제가 제공하는 프로토콜에 의해 송신 측에서는 계층을 지날 때 마다 덧붙여서 추가되고 수신 측에서는 계측을 지날 때 마다 제거된다.
각 계층 별 특징
전송 계층(4 계층)
전송 계층은 상위 계층들이 데이터 전달의 유효성이나 효율성을 생각하지 않도록 해주면서 종단 간(출발지와 목적지)의 사용자들에게 신뢰성 있는 데이터를 전달하는 계층이다.
순차 번호 기반의 오류 제어 방식을 사용하고 통신을 다루는 하위 계층으로 신뢰성 있고 효율적인 데이터를 전송한다. 전송 계층에는 “TCP/UDP”가 있다.
TCP (Transmission Control Protocol)
TCP의 개념
TCP는 전송 제어 프로토콜로 인터넷 핵심 프로토콜 중 하나이다. 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로 순서대로 에러없이 교환할 수 있게 해주는 프로토콜이다. ✨ 옥텟 - 8비트
일반적으로 TCP와 IP는 함께 사용되며 IP는 배달을, TCP는 패킷의 추적 및 관리를 한다.
TCP의 특징
✅ 신뢰성 보장
- 패킷 손실, 중복, 순서 변경이 없도록 보장 → 문제를 해결하여 수신측에 전달하고 패킷이 손실되면 재전송 요청
- IP 계층의 신뢰성 없는 서비스를 보완
✅ 연결 지향적
- 연결을 초기화하고 종료하기 위한 절차
- 통신 시작 전 송신자와 수신자의 연결을 설정 → “3-way handshake”
- UDP는 비연결성이고 UDP는 연결지향적
✅ 흐름 제어
- 데이터 전송 속도를 조절
✅ 혼잡 제어
- 혼잡하다고 판단될 때는 혼잡제어 기법으로 손신율 감속
✅ 데이터 분할
- 데이터를 작은 패킷으로 분할하여 전송하고 수신측에서 다시 조립
✅ 전이중 통신
- 양방향 통신 지원
UDP (User Datagram Protocol)
UDP의 개념
비연결성이고 신뢰성이 없으며 순서화되지 않은 데이터그램 서비스를 제공하는 전송 계층의 프로토콜이다.
UDP의 특징
✅ 비신뢰성
- 논리적인 가상회선 연결 필요 없음
- 확인 응답 없음
- 오류 제어 없음
✅ 순서화되지 않은 데이터그램 서비스 제공
- 순서를 맞추지 않음
- 흐름 제어를 위한 피드백 제공 X
✅ 실시간 응용 및 멀티캐스팅 가능
- 빠른 요청과 응답이 필요한 실시간 응용에 적합
- 여러 다수 지점에 전송 가능
✅ 단순 헤더
- 고정 크기의 헤더 - 8바이트
네트워크 전달 방식
패킷 교환 방식과 서킷 교환 방식의 차이
✨ 서킷 교환은 끊기면 안 되는 것 , 전화와 같이 통신 전 통신 간에 통신 경로를 설정하고 설정된 경로를 통해 연속적으로 전송된다.
✨ 패킷 교환은 여러 작은 패킷으로 분할하여 네트워크를 통해 독립적으로 전송한다. 패킷들은 독립적으로 움직이며 분리 되었다가 다시 재조립 되는 형태이다.
3-Way Handshake와 4-Way Handshake
3-Way Handshake 는 TCP의 접속,4-Way Handshake는 TCP의 접속 해제 과정이다.
TCP 헤더 구조
TCP 데이터 송, 수신 그리고 3-Way Handshake, 4-Way Handshake 에서는 TCP Flag 가 필요하다.
✨ TCP Flag : 헤더에 포함된 6개의 컨트롤 플래그로 논리적 연결 설정과 데이터 관리를 위해 사용된다.
3-Way Handshake
3-Way Handshake의 목적
3-way handshak는 TCP 연결의 안정성과 효율성을 보장하는 연결 설정 프로세스로 이를 통해 신뢰성 있는 데이터 전송이 가능하다.
✅ 초기 순차 번호 설정
- TCP는 데이터 패킷의 순서를 보장하기 위해 순차 번호 사용
- 클라이언트와 서버는 각각의 초기 순차 번호를 교환하고 동기화
✅ 양방향 통신
✅ 연결의 신뢰성
- 서버와 클라이언트는 상대방이 연결을 위한 준비가 되었으며 연결 요청 및 응답이 정상 도착했음을 확인한다.
- 무작위 요청과 잘못된 요청을 방지할 수 있음
✅ 불필요한 자원의 낭비 감소
- 연결이 성공적으로 설정된 후에만 필요한 자원(메모리나 버퍼)이 사용
✅ 통신 파라미터 동기화
3-Way Handshake의 과정
👣 step 1
클라이언트가 서버에 연결 요청 (SYN)
- 클라이언트는 서버에 SYN 패킷 전송
- 패킷에 클라이언트의 초기 시쿼스 번호 포함
👣 Step 2
서버가 클라이언트 요청에 응답 (SYN-ACK)
- 서버는 클라이언트의 SYN 패킷을 받아들임
- 클라이언트에 대한 응답으로 SYN+ACK(Synchronize-Acknowledgment) 패킷 송신
- 패킷에 서버의 초기 시퀀스 번호와 클라이언트의 시퀀스 번호에 1을 더한 값을 포함
👣 Step 3
클라이언트가 서버에 응답 (ACK)
- 클라이언트는 서버의 SYN+ACK 패킷을 받음
- 응답으로 ACK 패킷(Acknowledge) 패킷을 서버에게 전송
- 패킷에 서버의 시퀀스 번호에 1을 더한 값을 포함
4-Way Handshake
4-Way Handshake의 목적
4-way handshake는 TCP 연결을 종료하기 위한 프로세스로 연결을 종료 할 때 연결이 안정적으로 전송되었음을 보장하기 위해 사용된다.
✅ 데이터 손실 방지
- 마지막으로 전송된 패킷이 제대로 도착했는지 확인
✅ 자원의 정상적인 해제
4-Way Handshake의 과정
👣 step 1
클라이언트가 서버에 연결 종료 요청 (FIN)
- 애플리케이션에서 연결 종료 요청을 받음
- 클라이언트는 서버에게 FIN(종료) 패킷 송신
- 클라이언트는 FIN-WAIT-1 상태로 변환
👣 Step 2
서버가 클라이언트 요청에 응답 (ACK)
- 서버는 클라이언트의 FIN 패킷 수신
- 수신의 응답으로 ACK(Acknowledgment) 패킷 송신
- 서버는 CLOSE-WAIT 상태로 변환
(클라이언트는 아직 서버 쪽에서 데이터를 받을 수 있음) 👣 Step 3
서버가 클라이언트에 연결 종료 요청 (FIN)
- 서버는 자신의 데이터 전송이 끝났음을 알리기 위해 FIN 패킨 송신
- 서버는 LAST-ACK 상태로 변환
👣 Step 4
클라이언트가 서버 요청에 응답 (ACK)
- 클라이언트는 서버의 FIN 패킷 수신
- 수신을 확인하기 위해 ACK패킷 송신 → 클라이언트는 TIME-WAIT 상태, 서버는 CLOSED
- 클라이언트는 더 이상 서버로 데이터를 받지 않을 것임을 인지
- 잠재적으로 분실되거나 지연된 마지막 패킷이 네트워크에서 사라지면 클라이언트에서도 CLOSED
결론적으로 3-way handshake는 TCP의 안전하고 신뢰성있는 연결을 보장하기 위한 초기 프로세스이고 , 4-way handshake는 데이터가 안전하게 모두 잘 전송된 후 연결 해제를 할 수 있게 해주는 종료 프로세스이다.
예상 면접 질문
🤔 1. TCP와 UDP의 차이를 설명해주세요.
UDP는 비연결형 서비스로 3-way handshaking을 사용하지 않기 때문에 신뢰성이 떨어지는 단점이 있지만, 데이터 수신 여부를 확인하지 않기 때문에 속도가 빠르다는 장점이 있습니다. TCP는 신뢰성이 중요한 파일 교환과 같은 경우에 쓰이고 UDP는 실시간성이 중요한 스트리밍에 자주 사용됩니다.
🤔 2. TCP 통신은 종료시에도 3 way-handshaking을 사용하나요?
💬 TCP는 3 way-handshaking 과정을 통해 연결을 설정하고, 4 way-handshaking 과정을 통해 연결을 해제합니다.
🤔 3. 3 way-handshake와 4 way-handshake를 설명해주세요.
💬 결론적으로 3-way handshake는 TCP의 안전하고 신뢰성있는 연결을 보장하기 위한 초기 프로세스이고 , 4-way handshake는 데이터가 안전하게 모두 잘 전송된 후 연결 해제를 할 수 있게 해주는 종료 프로세스입니다.
🤔 4. 3 way-handshake의 연결 과정을 설명해주세요.
클라이언트가 연결을 시작하고 싶다는 의미로 서버에게 SYN 패킷을 보냅니다.서 버는 클라이언트의 요청을 받고, 그 요청에 대한 응답으로 SYN 패킷과 함께 ACK 패킷도 보냅니다. 마지막으로 클라이언트는 서버에게 ACK 패킷을 보내 알립니다.
클라이언트 -> 서버
서버 -> 클라이언트
클라이언트 -> 서버
🤔 5. 4 way-handshake의 해제 과정을 설명해주세요.
클라이언트가 더 이상 데이터 전송이 필요하지 않다면 연결을 종료하겠다는 의미로 FIN 패킷을 서버에게 보냅니다. 서버는 클라이언트의 FIN 패킷을 받아들이고 ACK 패킷을 보냅니다. 서버는 준비를 마치고 연결을 종료하겠다는 의미로 FIN 패킷을 클라이언트에게 보냅니다. 클라이언트는 마지막 ACK 패킷을 서버에게 보내 연결을 완전히 종료합니다.
클라이언트 -> 서버
서버 -> 클라이언트
서버 -> 클라이언트
클라이언트 -> 서버
참고자료
OSI 7계층 및 TCP / UDP
🔗 https://lxxyeon.tistory.com/155
🔗 https://velog.io/@yooni/네트워크-OSI-7계층-TCPIP-4계층-OSI-7계층-TCP-vs-UDP
🔗 수제비 정보처리기사 실기 - 네트워크 기초 자료 활용하기
3-way-handshake , 4-way-handshake
🔗 https://velog.io/@averycode/네트워크-TCPUDP와-3-Way-Handshake4-Way-Handshake
🔗 https://jeongkyun-it.tistory.com/180
🔗 https://velog.io/@yeseolee/3-Way-4-Way-HandshakeTCP-연결-설정과-해제
🔗 https://resilient-923.tistory.com/392
🔗 https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=bloodsoda&logNo=220986271516
🔗 http://www.ktword.co.kr/test/view/view.php?m_temp1=1889
면접 질문
'KNOWLEDGE' 카테고리의 다른 글
[NETWORK] REST API, RESTful 알아보기 / REST란? (1) | 2023.11.16 |
---|---|
[OS] CPU 스케줄링 알고리즘 / 프로그램 vs 프로세스 vs 스레드 (2) | 2023.11.08 |
[NETWORK] 대역폭(Bandwidth)이란? (0) | 2023.10.25 |
[네트워크] HTTP(HyperText Transfer Protocol) 란? 개발자가 되기 위한 공부 (0) | 2023.05.24 |
[자료구조] 그리디(Greedy) 알고리즘 (0) | 2023.05.18 |