728x90
TCP란? (Transmission Control Protocol)
- 서버와 클라이언간에 데이터를 신뢰성 있게 전달하기 위해 만들어진 프로토콜
- 데이터는 네트워크 선로를 통해 전달되는 데, 전달되는 과정에서 순서가 바뀌거나 손실이 되는 경우가 있는 데, 손실을 교정하고 순서를 재조합 해주는 것이 TCP
TCP 헤더
TCP는 Data stream으로 부터 data를 받아와 이것을 일정 단위로 분할 한 뒤에 header를 덧붙여 tcp segment를 생성
TCP segment는 패킷으로 캡슐화되어 상대방과 주고받음
TCP segment = header + data
SEQUENCE NUMBER
- segment에 있는 첫번째 바이트의 바이트 스트림 번호
- tcp는 데이터를 단지 순서대로 정렬되어있는 bytre stream으로 본다
- 0~999, 1000~1999의 segment를 보낼 때, sequence number는 각각 0과 1000이다.
ACK NUMBER
- 수신자가 예상하는 다음 byte 번호
- 0~999, 1000~1999의 segment를 받았을 때, ack는 1000과 2000
Control bit
- ACK
- 패킷을 받았다는 응답
- ACK NUMBER가 유효한지 체크
- FIN
- TCP 연결을 종료할 때 사용
- 더 이상 전송할 데이터가 없음을 의미
- RST
- TCP 연결을 강제로 종료할 때 사용
- 비 정상적인 세션을 즉 끊기에 적합
TCP 3 Way-Handshake란?
- 정확한 전송을 보장하기 위해 상대 컴퓨터와 사전에 세션을 수립하는 과정을 의미
- 실제 전송 전에 한쪽이 다른 한쪽이 준비완료 되었다는 것을 알 수 있도록 함
clinet → server: TCP SYN
server→ client: TCP SYN ACK
client → server: TCP ACK
SYN: synchronize sequence number
ACK: acknowledgement (승인)
#1
- A Client는 B Server에 접속을 요청하는 SYN 패킷을 보낸다.
- 이때 A는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태가 됨
#2
- B서버는 SYN 요청을 받고 A클라이언트에게 요청을 허락한다는 ACK와 SYN FLAG가 설정된 패킷을 발송
- A가 다시 ACK를 응답하기를 기다린
- B는 SYN_RECEIVED 상태가 됨
#3
- A는 B서버에게 ACK를 보냄
- 이후부터는 연결이 이루어지고 데이터가 오감
- B서버 상태는 ESTABLISHED
TCP 4-WAY HANDSHAKING
세션을 종료할 때에는 4way handshaking을 사용
STEP1
클라이언트 A가 연결을 종료하겠다는 FIN플래그를 전송
- FIN은 프랑스어로 끝을 의미
STEP2
서버 B는 확인 메세지를 보내고 자신의 통신이 끝날때까지 기다리는 CLOSE_WAIT 상태
ACK를 보냄
STEP3
서버가 통신이 끝나면 연결이 종료되었다고 클라이언트에게 FIN 플래그 전송
STEP4
클라이언트는 확인했다는 메세지를 보냄
TIME-WAIT상태
- 클라이언트A가 서버B로부터 통신이 끝났다는 FIN을 받은 후 수 초(default 240초)간은 세션을 남겨놓고 잉여 패킷을 기다림
- 서버에서 클라이언트에게 FIN 패킷보다 늦게 보내는 데이터 전송의 손실을 막아줌
728x90
'기타' 카테고리의 다른 글
내 인생을 바꾼 한 문장 (0) | 2024.04.19 |
---|---|
Doxygen이란? (0) | 2024.04.16 |
UTF-8 Encoding 이해하기 (0) | 2024.04.11 |
Base64란? (0) | 2024.04.09 |
AEAD (Authenticated Encryption with Associated Data) 란? (0) | 2024.03.15 |