books/Network

5. TCP

836586697769 2024. 1. 9. 15:49

@notion

 

💡 패킷 교환 방식의 문제점 = 중간에 사라지는 패킷이 생겨 부족한 데이터가 될 가능성
→ 오류를 감지하고 해결하여 데이터가 온전히 전송될 수 있게 하는 프로토콜인 TCP

TCP(Transmission Control Protocol)

  • 신뢰성 있는(오류 없는) 데이터 통신을 보장하는 프로토콜
    1. 패킷마다 번호를 붙여 사라진 패킷을 파악
    2. 클라이언트가 데이터를 응답 받고 난 뒤 서버에게 데이터를 잘 받았다는 메시지 전달
  • 연결형 프로토콜: 데이터를 주고받기 전에 미리 클라이언트와 서버가 서로 통신할 준비가 됐는지 확인해 연결 오류로 인한 데이터 유실을 방지
    • 연결 수립 → 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 패킷을 보내는데, 헤더에 마지막으로 받은 데이터의 번호를 전달하면 전송자는 그 다음 순서부터 다시 전달
  • 혼잡 제어: 한 네트워크내 요청/전송되는 데이터가 집중되는 문제를 줄이기 위해 처음에는 데이터를 천천히 보내다가 수신자가 잘 받은 것을 확인하면 점차 속도를 높여 제어
    • 합 증가/곱 감소
      • 윈도 크기 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