728x90
TCP란 인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.
애플리케이션에게 신뢰적이고 연결지향성 서비스를 제공한다.
TCP는 장치들 사이에 논리적인 접속을 성립하기 위해서 3-way handshake를 사용한다.
TCP에 대해서 더 자세히 알아보고 싶다면? ↓↓
2024.05.30 - [Computer Science/Network] - [Network] TCP와 UDP
1. 3-way handshake
- 정의
TCP/IP 프로토콜을 이용해서 통신을 하는 응용 프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
- 역할
3way handshake는 양쪽 모두 데이터를 전송할 준비가 되어 있다는 것을 보장하고, 실제로 데이터 전달이 시작하기 전에 다른 한쪽이 준비되었다는 것을 알 수 있게 해줌
[State 정보]
- CLOSED: 포트가 닫힌 상태
- LISTEN: 포트가 열린 상태로 연결 요청 대기 중
- SYN_RECV: SYNC 요청을 받고 상대방의 응답을 기다리는 중
- ESTABLISHED: 포트 연결 상태
- TIME-WAIT: Server로부터 FIN을 수신하더라도 일정시간(default: 240초)동안 세션을 남겨 놓고 잉여 패킷을 기다리는 과정
[Flag 정보]
- TCP Header에는 CONTROL BIT(플래그 비트, 6bit)가 존재하며, 각각의 bit는 "URG-ACK-PSH-RST-SYN-FIN"의 의미를 가짐. 즉, 해당 위치의 bit가 1이면 해당 패킷이 어떠한 내용을 담고 있는 패킷인지를 나타냄
- SYN(Synchronize Sequence Number)
- 연결 설정. Sequence Number를 랜덤으로 설정하여 세션을 연결하는 데 사용하며, 초기에 Sequence Number를 전송함
- 따라서, Connection을 생성할 때 사용하는 flag
- ACK(Acknowledgement)
- 응답 확인. 패킷을 받았다는 것을 의미하는 flag
- Acknowledgement Number 필드가 유효한지를 나타냄
- 양단 프로세스가 쉬지 않고 데이터를 전송한다고 가정하면 최초 연결 과정에서 전송되는 첫 번째 세그먼트를 제외한 모든 세그먼트의 ACK 비트는 1로 지정됨
- FIN(Finish)
- 연결 해제. 세션 연결을 종료시킬 때 사용됨. 더 이상 전송할 데이터가 없음
- 4way handshake에서 사용함
- 동작
- STEP1) 클라이언트 ---(SYN)→ 서버
- 클라이언트가 서버에게 연결을 요청한다.
- 클라이언트 - SYN 패킷을 전송
- 서버 - SYN 패킷을 받고 ESTAB 상태가 됨
- STEP2) 클라이언트 ←(SYN + ACK)--- 서버
- 서버는 SYN을 받고, 클라이언트에게 연결 수락 및 응답 패킷(SYN + ACK)을 보낸다.
- STEP3) 클라이언트 ---(ACK)→ 서버
- 클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보낸다.
2. TCP의 연결 해제 과정(4-way handshake)
- 정의
세션을 종료하기 위해 수행되는 절차
- 동작
- STEP1) 클라이언트 ---(FIN)→ 서버
- Client가 연결을 종료하겠다는 FIN 플래그를 전송함
- 보낸 후에 FIN-WAIT-1 상태로 변함
- STEP2) 클라이언트 ←(ACK)--- 서버
- FIN 플래그를 받은 Server는 확인 메시지인 ACK를 Client에게 보내줌
- 그 후 CLOSE-WAIT 상태로 변함
- Client도 마찬가지로 Server에서 종료될 준비가 됐다는 FIN을 받기 위해 FIN-WAIT-2 상태가 됨
- STEP3) 클라이언트 ←(FIN)--- 서버
- Close 준비가 다 된 후 Server는 Client에게 FIN 플래그를 전송함
- STEP4) 클라이언트 ---(ACK)→ 서버
- Client는 해지 준비가 되었다는 정상응답인 ACK를 Server에게 보내줌
- 이때 Client는 TIME-WAIT 상태로 변경됨
TIME-WAIT 상태는 의도치 않은 에러로 인해 연결이 데드락으로 빠지는 것을 방지하기 위해 변경되는 것.
만약 에러로 인해 종료가 지연되다가 시간이 초과되면 CLOSED 상태로 변경됨
더보기
데드락이란?
프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태
시스템으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생
참고
https://jeongkyun-it.tistory.com/180
https://github.com/devSquad-study/2023-CS-Study/blob/main/Network/network_tcp_and_udp.md
'Computer Science > Network' 카테고리의 다른 글
[Network] 유니캐스트/브로드캐스트/멀티캐스트/애니캐스트 (0) | 2024.06.03 |
---|---|
[Network] 흐름제어와 혼잡제어 (1) | 2024.06.03 |
[Network] TCP와 UDP (0) | 2024.05.30 |
[Network] OSI 7계층과 TCP/IP 4계층 (0) | 2024.05.29 |
[Network] HTTP와 HTTPS (0) | 2024.05.29 |