TCP 란?
전송 제어 프로토콜(Transmission Control Protocol)
- TCP는 장치들 사이에 논리적인 접속을 성립하기 위하여 연결을 설정하여 신뢰성을 보장하는 연결형 서비스
- 데이터의 전달을 보증하고 보낸 순서대로 받게 해줌
- 도착한 조각을 점검하여 줄을 세우고 망가졌거나 빠진 조각을 다시 요청
TCP는 데이터를 상대방에게 확실하게 보내기 위해서 3-way handshake 이라는 방법을 사용하는데
TCP의 접속은 3-way handshake,
TCP의 접속 해제는 4-way handshake 라는 방식을 사용합니다.
3-way Handshake
- TCP 통신을 이용하여 데이터를 전송하기 위해 네트워크 연결을 설정하는 과정
- 양쪽 모두 데이터를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 한 쪽이 다른 쪽이 준비되었다는 것을 알 수 있도록 한다.
- 즉, TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.
과정
1) 클라이언트는 서버와 커넥션을 연결하기 위해 SYN을 보냄
🟢 PORT 상태
Client : CLOSED - SYN_SENT 로 변함
Server : LISTEN
2) 서버가 SYN 요청을 받고, 클라이언트로 받았다는 신호인 ACK와 SYN패킷을 보냄
🟢 PORT 상태
Client : CLOSED
Server : SYN_RCV
3) 클라이언트가 서버에게 ACK를 보내고 이후로부터 연결을 맺음
🟢 PORT 상태
Client : ESTABLISED
Server : SYN_RCV >> ACK >> ESTABLISED
포트 정보
- CLOSED: 포트가 닫힌 상태
- LISTEN: 포트가 열린 상태로 연결 요청 대기 중
- SYN_RCV: SYNC 요청을 받고 상대방의 응답을 기다리는 중
- ESTABLISHED: 포트 연결 상태
- FIN_WAIT1 : 소켓이 닫히고 연결이 종료되고 있는 상태
- FIN_WAIT2 : 로컬이 원격으로 부터 연결 종료 요구를 기다리는 상태
- CLOSE_WAIT : 원격의 연결 요청을 받고 연결이 종료되기를 기다리는 상태
- LAST_ACK : 연결은 종료되었고 승인을 기다리는 상태
- TIME_WAIT : 연결은 종료되었으나 원격의 수신 보장을 위해 기다리고 있는 상태
플래그 정보
SYN(Synchronize Sequence Number)
- 연결요청, 세션을 설정하는데 사용되며 초기에 시퀀스 번호를 보냄
ACK(Acknowledgement)
- 응답 확인. 패킷을 받았다는 것을 의미한다.
- Acknowledgement Number 필드가 유효한지를 나타냄
FIN(Finish)
- 세션을 종료시키는데 사용되며, 더 이상 보낸 데이터가 없음을 나타냄
4-way Handshake
- 4-Way Handshake은 연결을 해제 (Connecntion Termination)하는 과정이다. 여기서는 FIN 플래그를 이용
과정
1) 클라이언트는 연결을 끊기 위해 서버에게 연결을 종료한다는 : FIN 플래그를 보냄 이때 패킷에는 ACK 도 포함되어 있음
🟢 FIN_WAIT1
2) 서버는 FIN 을 받고, 확인했다는 ACK 를 클라이언트에게 응답을 보내고 자신의 통신이 끝날때까지 기다림
🟢 CLSOE_WAIT
3) 데이터를 모두 보냈다면, 서버는 연결이 종료에 합의 한다는 의미로 FIN 패킷을 클라이언트에게 보냄
🟢 LASK_ACK 승인 번호를 보내줄 때까지
4) 클라이언트는 FIN 을 받고, 확인했다는 ACK 을 서버에게 보냄
🟢 TIME_WAIT
Reference Path
'CS' 카테고리의 다른 글
GET과 POST 방식 (0) | 2022.11.13 |
---|---|
대칭키와 비대칭키(공개키) (0) | 2022.11.13 |
HTTP와 HTTPS (0) | 2022.11.13 |
TCP vs UDP (0) | 2022.11.06 |
OSI 7계층 (0) | 2022.11.06 |