@notion
💡 패킷 교환 방식의 문제점 = 중간에 사라지는 패킷이 생겨 부족한 데이터가 될 가능성
→ 오류를 감지하고 해결하여 데이터가 온전히 전송될 수 있게 하는 프로토콜인 TCP
TCP(Transmission Control Protocol)
- 신뢰성 있는(오류 없는) 데이터 통신을 보장하는 프로토콜
- 패킷마다 번호를 붙여 사라진 패킷을 파악
- 클라이언트가 데이터를 응답 받고 난 뒤 서버에게 데이터를 잘 받았다는 메시지 전달
- 연결형 프로토콜: 데이터를 주고받기 전에 미리 클라이언트와 서버가 서로 통신할 준비가 됐는지 확인해 연결 오류로 인한 데이터 유실을 방지
- 연결 수립 → 3방향 핸드셰이크
- 연결 해제 → 4방향 핸드셰이크
TCP 헤더
- 헤더
- 모든 프로토콜은 데이터의 앞에 해당 데이터에 대한 정보가 담긴 헤더를 추가해 전송
- 프로토콜마다 다른 형태와 크기
- TCP 헤더
- 시퀀스 번호: 패킷의 번호(현재, 다음)를 담음
- 윈도 크기
- 플래그: 활성화 여부에 따라 패킷의 상태를 알림
- 각 1비트로 총 6개
- ACK(Acknowledgement): 데이터를 잘 받았다는 의미
- SYN(Synchronize): 연결을 요청
- FIN(Finish): 통신이 마무리되어 연결의 해제를 요청
TCP 연결 수립: 3방향 핸드셰이크(3-way handshake)
[Step 1]
- Client → Server 연결 요청(SYN)
- Client 상태: 요청 보냄(SYN_SENT), 응답을 기다림
[Step 2]
- Server → Client 응답+연결 요청(ACK+SYN)
- Server 상태: 요청 받음(SYN_RECEIVED)
[Step 3]
- Client 상태: 연결됨(ESTABLISHED)
- Client → Server 응답(ACK)
- Server 상태: 연결됨(ESTABLISHED)
TCP 연결 해제: 4방향 핸드셰이크(4-way handshake)
[Step 1]
- Client → Server 연결 종료(FIN)
- Client 상태: 종료를 기다림(FIN_WAIT)
[Step 2]
- Server → Client 응답(ACK)
- Server 상태: 통신 끝나기를 기다림(CLOSE_WAIT)
[Step 3]
- Server → Client 연결 종료(FIN)
- Server 상태: 마지막 ACK를 기다림(LAST_ACK)
[Step 4]
- Client → Server 응답(ACK)
- Client 상태: TIME_WAIT
- Server 상태: CLOSED
- 남는 패킷 기다린 후 Client 상태: CLOSED
제어 방식
- 흐름 제어: 전송자와 수신자의 데이터 속도 차이로 인한 오류를 줄이기 위해 수신자의 처리 속도에 맞춰 전송자의 통신 속도를 제어하는 것
- 정지-대기(stop and wait)
- 전송한 패킷에 대해 확인 응답을 받은 후 다음 패킷을 전송하는 방법
- 시간이 오래 걸리고 효율 떨어짐
- 슬라이딩 윈도
- 윈도의 크기만큼만 데이터를 순서대로 전달하는 방법
- 윈도 크기: 헤더의 구성 요소로 수신자가 한번에 처리할 수 있는 데이터의 크기이며 3방향 핸드셰이크 과정에서 정해짐
- 수신자는 받은 데이터를 처리하고 ACK 패킷을 보내는데, 헤더에 마지막으로 받은 데이터의 번호를 전달하면 전송자는 그 다음 순서부터 다시 전달
- 정지-대기(stop and wait)
- 혼잡 제어: 한 네트워크내 요청/전송되는 데이터가 집중되는 문제를 줄이기 위해 처음에는 데이터를 천천히 보내다가 수신자가 잘 받은 것을 확인하면 점차 속도를 높여 제어
- 합 증가/곱 감소
- 윈도 크기 1개씩 증가, 혼잡 시 절반으로 줄임
- 윈도 크기를 하나씩 늘려가기 때문에 안전하게 네트워크 사용 가능
- 전송 속도가 천천히 증가하기 때문에 초기 전송 속도를 높이는 데 걸리는 시간이 긺
- 느린 시작
- 윈도 크기 2배씩 증가, 혼잡 시 1로 급격히 줄임
- 시간이 지날수록 많은 양의 데이터를 전달 가능
- 합 증가/곱 감소
💡 TCP의 치명적인 문제점 = 데이터를 꼼꼼히 확인하기 때문에 전송 속도 느림
→ 신뢰성을 보장하지 않음으로써 속도를 빠르게 개선한 프로토콜인 UDP
UDP(User Datagram Protocol)
- 전송자가 일방적으로 데이터를 전달하고, 패킷은 최적의 경로를 찾아 이동함
- 패킷 헤더에 안정성을 확보하기 위한 정보가 빠지기 때문에 같은 내용의 데이터라도 비교적 용량이 가벼움
- 네트워크 상황에 따라 전송 속도 조절하지 않고 처음 속도 일정한 속도 보장 → 많이 사용 시 네트워크 혼잡
- 데이터가 빠짐없이 전송되는 것보다 응답 속도라 빠른 것이 중요한 상황인 실시간 스트리밍, 온라인 게임 적합
TCP | UDP | |
연결 방식 | 연결형 | 비연결형 |
전송 순서 | 순서 보장 | 순서 보장 X |
혼잡 제어 | O | X |
속도 | 느림 | 빠름 |
신뢰성 | 높음 | 낮음 |
'books > Network' 카테고리의 다른 글
7. HTTP 특징과 데이터 저장 방식 (0) | 2024.01.17 |
---|---|
6. HTTP (0) | 2024.01.17 |
4. IP (0) | 2024.01.07 |
3. URL (1) | 2024.01.05 |
2. 미리 알아두면 좋은 네트워크 개념 (1) | 2023.12.27 |