스터디/CS 스터디 (24.06-24.11)

네트워크 : TCP/UDP, TCP의 3-way/4-way hand shake

minseokiim 2024. 7. 9. 19:23

1. TCP, UDP

 

: 네트워크 계층 중 전송 계층에서 사용하는 프로토콜

데이터의 전달을 위해 사용되는 프로토콜

 

 

1) TCP(Transmission Control Protocol)

- 연결지향 : 데이터 전송 전 송/수신자 연결하는 '핸드셰이크' 과정 필요

- 신뢰성 있는 전송 : 패킷 손실 / 중복 / 순서 바뀜 감지 -> 수정 가능, 패킷 성공 도착 여부는 ACK로 확인

- 흐름제어 / 혼잡제어 : 송신자가 수신자 처리 능력 초과하지 않게 + 네트워크 혼잡 줄이기 위한 매커니즘 포함

(* 흐름제어 : 송신자가 데이터를 너무 빨리 보내서 수신자가 이를 처리하지 못하는 상황 방지)

(* 혼잡제어 : 네트워크 과부하 방지)

- 데이터 스트림 : 데이터가 연속적인 바이트 스트림으로 작동

 

사용 예시 : 웹 브라우징, 이메일, 파일 전송, 원격 로그인 

-> 신뢰성, 순서 보장 필요

 

 

2) UDP(User Diagram Protocol)

- 비연결형 : 데이터 전송 전 연결 설정 안함

- 신뢰성 없음 : 데이터 패킷 도착 여부 확인 안함, 패킷 손실 / 중복 / 순서 바뀜 감지 x 수정 x (대신, 손상 데이터는 무시할 수 있음! 데이터그램의 체크섬으로 손상여부 확인)

- 저지연 : TCP에 비해 오버헤드 적어 지연이 적음

(* 오버헤드 : 실제 유용한 data의 추가 발생 데이터, 처리시간)

- 데이터그램 : 각 패킷 독립적 전송

 

사용 예시 : 스트리밍 서비스, 온라인 게임, 실시간 app, 멀티 캐스트 전송

-> 지연이 적어야 할 때

 

 

Q. 스트리밍은 연속적으로 작동하는 TCP가 맞는거 아닌가?

: 지연이 있으면 버퍼링으로 사용자가 눈치 챌 수 있기 때문에 UDP가 적합.

손실을 허용하지만, 프레임이 몇 개 손실되어도 사용자 경험에 큰 영향은 미치지 않음

 

 

 

2. TCP의 3-way/4-way hand shake

1) 3-way hand shake

: TCP 연결 설정, 데이터의 안정적 전송이 가능해짐.

 

1단계) Client -> Server (SYN)

Client가 Server에게 연결 요청하는 SYN 플래그가 설정된 패킷을 보냄.

(* SYN : TCP 연결 설정 시작하는 초기화 메시지)

 

2단계) Server -> Client (SYN-ACK)

Server는 Client의 요청을 받고, 연결 수락 신호로 응답.

(* ACK : 요청을 성공적으로 수신했음을 알리는 응답 메시지)

 

3단계) Client -> Server (ACK)

Client는 Server의 응답 받고, 연결 요청 확인 패킷 보냄.

 

 

 

 

2) 4-way hand shake

: TCP 연결 해제

 

1단계) Client -> Server (FIN)

: Client가 연결 종료를 위해 FIN 플래그 설정한 패킷을 Server로 보냄

(* FIN : 전송이 완료 되었거나, 더이상 전송할 데이터가 없을때 연결 종료 의도를 알림)

 

2단계) Server -> Client (ACK)

Server는 Client의 FIN패킷 받고, 확인 위해 ACK 패킷 보냄

-> Server는 Client가 연결을 종료하려는 것을 알게 됨.

 

3단계) Server -> Client (FIN)

Server도 연결 종료를 위해 FIN 플래그 설정한 패킷을 Client로 보냄

 

4단계) Client -> Server (ACK)

Client는 Server의 FIN패킷 받고, 확인 위해 ACK 패킷 보냄

-> Client는 Server 연결을 종료하려는 것을 알게 됨.