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 |