Cloud Architecture

TCP, UDP, TCP Window Size

백셀건전지 2022. 6. 15. 00:07

OSI 7 layer

TCP(Transmission Control Protocol)

  • 인터넷 상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜
  • IP가 데이터의 배달을 처리 / TCP는 패킷을 추적 및 관리함
  • 패킷: 컴퓨터 간에 데이터를 주고 받을 때 네트워크를 통해서 전송되는 데이터 조각
  • 연결형 서비스를 지원하는 프로토콜. 인터넷 환경에서 기본
  • TCP의 특징
    • 연결형 서비스로 가상 회선 방식을 제공한다 (발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다)
    • 3-way handshaking 과정을 통해 연결하고, 4-way handshaking을 통해 해제한다.
    • 흐름 제어 및 혼잡 제어 가능
    • 높은 신뢰성 보장
    • UDP보다 속도가 느리다.
    • 전 이중(Full duplex), 점대 점(Point to Point) 방식
  • 연속성보다 신뢰성 있는 전송이 중요할 때에 사용하는 프로토콜. ex) 파일 전송
  • TCP의 패킷 추적 및 관리 방식
    • 패킷 A,B,C에 1,2,3이라는 번호를 부여하여 패킷의 분실 확인과 같은 처리를 하여 목적지에서 재조립.
  • TCP Flow

  • Sender가 신뢰성 보장을 위해 패킷마다 Sequence 번호를 붙여 보내고, Receiver는 ACK를 보내 어디까지 받았는지 응답함 --> Stop & Wait 방식

UDP(User Datagram Protocol)

  • 데이터를 데이터그램 단위로 처리하는 프로토콜
  • 데이터그램: 독립적인 관계를 지니는 패킷
  • UDP는 비연결형 프로토콜으로, 연결을 위해 할당되는 논리적인 경로가 없어 각각의 패킷은 다른 경로로 전송 및 독립적인 관계
  • UDP 특징
    • 정보를 주고 받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않는다
    • UDP 헤더의 CheckSum 필드를 통해 최소한의 오류만 검출
    • 신뢰성이 낮지만, TCP보다 빠름
  • 신뢰성보다는 연속성이 중요한 서비스에 사용하는 프로토콜. ex) 스트리밍
  • UDP Flow

 

TCP Window Size

  • sender가 한 번에 보낼 수 있는 최대 데이터 크기
  • 상황에 따라 receiver의 데이터 속도가 다르기 때문에 receiver는 sender에게 계속 window size를 알려줘야 한다.
  • TCP Header에 16bit로 표시. 2^16byte = 65535 byte = 64kbyte
  • sliding window: 송신자가 수신자의 Rx socket Buffer overflow가 발생되지 않도록 전송량을 control하는 메커니즘

TCP 3-way handshake, 4-way handshake

TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정

  • Client > Server : TCP SYN
  • Server > Client : TCP SYN ACK
  • Client > Server : TCP ACK

SYN: synchronize Sequence Numbers / ACK : Acknowledgement

 

3-way handshake의 역할

  • 양 쪽 모두 데이터를 송신/수신할 준비가 되었다는 보장
  • 데이터 전달 시작 전 다른 쪽이 준비되었다는 것을 알 수 있음
  • 양 쪽 모두 상대편에 대한 초기 sequence number를 알 수 있도록 한다

3-way handshake 과정

Step 1

  • A Client는 B Server에 접속을 요청하는 SYN 패킷 전송
  • A Client는 SYN을 보내고 B로부터 SYN/ACK 응답을 기다리는 SYN_SENT 상태

Step 2

  • B Server는 SYN을 받고 A Client에게 요청을 수락한다는 ACK와 SYN flag가 설정된 패킷을 발송
  • A Client가 다시 ACK를 발송하길 기다리는 SYN_RECEIVED 상태

Step 3

  • A Client는 B Server에게 ACK 패킷을 보냄
  • 이후부터는 A와 B가 연결되고 데이터를 주고받는 상태
  • B Server의 상태는 ESTABLISHED

4-way handshake 과정

4-way handshake는 세션을 종료하기 위해 수행되는 절차이다.

Step 1

  • A Client가 B Server에게 연결을 종료하겠다는 FIN 플래그를 전송한다.
  • A Client는 FIN_WAIT 상태가 된다.

Step 2

  • B Server는 A에게 확인 메시지(ACK)를 보내고 자신의 통신이 끝날 때까지 기다리는 CLOSE_WAIT 상태가 된다.

Step 3

  • B Server가 통신이 끝났으면 A에게 연결이 종료되었다는 FIN 플래그를 전송한다.
  • B Server는 LAST_ACK 상태가 된다.

Step 4

  • A Client는 확인했다는 ACK 메시지를 전송한다.
  • A Client는 FIN_WAIT에서 TIME_WAIT 상태로 변경된다.
  • A Client는 TIME_WAIT 상태에서 세션이 종료되었더라도 B Server로부터 올 수 있는 잉여 패킷을 기다리기 위해 default 240초를 기다리게 된다.
  • 240초가 지나면 CLOSE 상태로 변경되고 연결을 종료한다.

 

Reference

 

 

 

 

 

 

 

 

'Cloud Architecture' 카테고리의 다른 글

CAP 이론, ACID, Eventual Consistency VS Strong Consistency  (0) 2022.06.16
Proxy / Forward Proxy / Reverse Proxy  (0) 2022.06.15
SAGA 패턴  (0) 2022.06.14
TDD, BDD, DDD  (0) 2022.06.14
Circuit Breaking  (0) 2022.06.14