Internet 프로토콜은 두 호스트 사이에서 데이터를 주고 받는 프로토콜이다.
다른 목적지 호스트로 보내는데 전송만 하면 된다.
하지만 인터넷 프로토콜은 데이터가 유실될 수도 있고 순서가 보장되지 않는다.
즉, 신뢰할 수 없다.
그러나 프로세스 간의 통신에는
데이터를 안정적으로 주고 받을 수 있어야 한다.
=> TCP 프로토콜
■ TCP(Transmission Control Protocol)
TCP는 연결 지향적 프로토콜로, 데이터의 신뢰성과 순서를 보장한다.
송신자와 수신자 사이에 안정적인 연결을 설정하여 데이터가 올바르게 전달되도록 한다.
주로 파일 전송, 이메일, 웹 브라우징 등에서 사용한다.
■ 이때 사용하는 프로세스 간의 안정적이고 논리적인 통신 통로가 Connection이다.
→ connection을 열고, 데이터를 주고 받고, connection을 닫는다.
<-------------------------------------------------------------->
connection을 열고 -> 3way handshake
데이터를 주고 받은 뒤,
connection을 닫는다. -> 4way handshake
<-------------------------------------------------------------->
■ 플래그 정보
TCP 헤더에는 CONTROL BIT(플래그 비트, 6bit)가 존재하며, 각각의 bit에는 "URG-ACK-PST-SYN-FIN"의 의미를 가진다.
→ SYN (Synchronize Sequence Number/00010) : 연결 설정, 시퀀스 넘버를 랜덤으로 설정하여 세션을 연결하는 데 사용하며, 초키게 시퀀스 넘버를 전송한다.
→ ACK (Acknowledgment/010000) : 응답 확인, 패킷을 받았다는 것을 의미한다.
→ SYN (Finish/000001) : 연결 해제, 세션 연결을 종료시킬 때 사용되며, 더 이상 전송할 데이터가 없다는 것을 의미한다.
3-Way HandShake [TCP 연결 성립 과정]
- 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정이다.
- 양측 모두 데이터를 전송할 준비가 되어있다는 것을 보장하고,
실제로 데이터 전달이 시작하기 전 한 쪽이 다른 한쪽이 준비가 되었다는 것을 알 수 있도록 해야 한다.
SYN (Synchronize): 클라이언트가 서버에 연결 요청을 보낸다.
이때 SYN 플래그가 설정된 패킷을 전송한다.
클라이언트 -> 서버: SYN
SYN-ACK (Synchronize-Acknowledge) : 서버는 클라이언트의 요청을 수신하고 이를 승인한다.
서버는 SYN과 ACK 플래그가 설정된 패킷을 클라이언트에게 전송한다.
서버 -> 클라이언트: SYN-ACK
ACK (Acknowledge) : 클라이언트는 서버의 응답을 수신하고 연결이 성립되었음을 확인한다.
클라이언트는 ACK 플래그가 설정된 패킷을 서버에게 전송한다.
클라이언트 -> 서버: ACK
4-Way HandShake [TCP 연결 해제 과정]
FIN (Finish): 클라이언트 또는 서버 중 연결을 종료하고자 하는 쪽에서 FIN 플래그가 설정된 패킷을 보낸다.
클라이언트 -> 서버: FIN
ACK (Acknowledge): 상대방은 FIN 플래그를 수신하고 이를 승인하는 ACK 플래그가 설정된 패킷을 전송한다.
(모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다)
서버 -> 클라이언트: ACK
FIN (Finish): 서버도 연결을 종료하고자 할 때, FIN 플래그가 설정된 패킷을 클라이언트에게 전송한다.
아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다린다.
서버 -> 클라이언트: FIN
ACK (Acknowledge): 클라이언트는 FIN 플래그를 수신하고 이를 승인하는 ACK 플래그가 설정된 패킷을 전송한다.
서버는 ACK를 받은 이후 소켓을 닫는다. (Closed)
TIME_WAIT을 받은 이후 소켓을 닫는다 (Closed)
클라이언트 -> 서버: ACK
■ 포트 상태 정보
Connection을 할 때 필요한 통로가 port이다.
→ CLOSED : 포트가 닫힌 상태
→ LISTEN : 포트가 열린 상태, 연결 요청 대기 중
→ SYN_RCV : 요청을 받고 상대방의 응답을 기다리는 중
→ ESTABLISHED : 포트 연결 상태
'CS' 카테고리의 다른 글
CS_네트워크_대칭키 vs 비대칭키 (0) | 2024.06.07 |
---|---|
CS_네트워크_TCP 흐름제어 & 혼잡제어 (1) | 2024.06.03 |
CS_네트워크_유니캐스트, 멀티캐스트, 브로드캐스트 (0) | 2024.06.03 |
CS)네트워크_TCP&UDP (0) | 2024.05.30 |
CS)네트워크_OSI 7계층 (0) | 2024.05.26 |