진진리 2024. 5. 31. 13:51
728x90

TCP 서비스

프로세스-대-프로세스 통신

  • End-to-End
  • 포트 번호를 이용한 프로세스간 통신 제공

 

스트림 배달 서비스

  • 스트림 기반 프로토콜
  • 두 개의 프로세스가 가상의 튜브로 연결
  • 바이트 스트림 형태로 데이터 송수신
  • 송신 버퍼와 수신 버퍼: 송수신이 동일한 속도로 이루어지지 않을 때 필요
  • 세그먼트(segment): 일련의 바이트를 패킷으로 그룹화 -> IP 계층에 전달

 

전이중 통신

  • 양방향 전송
  • 송신 데이터와 수신 데이터에 대한 확인 응답을 함께 보내는 piggybacking
  • 송신측은 다중화, 수신측은 역다중화 수행

다중화와 역다중화

  • 송신측은 다중화, 수신측은 역다중화 수행

연결형 서비스

  • TCP는 연결지향 프로토콜
  • 물리적 연결이 아닌 가상의 연결
  • 요청 -> 승인 -> 데이터 교환 -> 해제 순

신뢰성 서비스

  • 확인응답 메커니즘 이용

TCP 특징

번호화 시스템

  • 바이트 번호: 모든 데이터 바이트에 번호 부여
  • 송신 순서번호: 세그먼트에 있는 첫 번째 바이트에 순서번호 할당
  • 확인 응답 번호: 수신한 다음 바이트 번호

  • 흐름제어
  • 오류 제어
  • 혼잡 제어

 

세그먼트

  • 순서 번호(sequence number): 세그먼트에 포함된 데이터의 첫 번째 바이트에 부여된 번호
  • 확인응답 번호(acknowledgement number): 상대방 노드로부터 수신하고자 하는 바이트의 번호
  • 제어: 6bits 플래그
    • URG: 긴급 포인터
    • RST: 연결 재설정
    • ACK: 확인 응답
    • SYN: 순서번호 동기화
    • PSH: 푸시 요청
    • FIN: 연결 종료
  • 창 크기(window size): 상대방이 유지해야 하는 바이트 단위의 윈도우 크기

 

TCP 연결

  • 연결형 프로토콜
    • 모든 세그먼트는 가상 경로를 통하여 전송
    • 하나의 단일 가상 경로를 이용함으로써 손상되거나 손실된 프레임의 재전송뿐만 아니라 확인 응답 등의 처리도 가능
  • TCP 연결 설정 
    • 3-way handshake
    • 서버부터 시작(수동 개방 - passive open)
    • 클라이언트부터 시작(능동 개방 - active open)
      • 클라이언트는 SYN 플래그가 1인 SYM 세그먼트 전송
      • 서버는 SYN와 ACK가 1인 세그먼트 전송
      • 단순한 ACK 세그먼트 전송
    • 동시 개방
    • SYN 플러딩 공격(DDos)
      • 클라이언트가 SYN 패킷만 계속 보내고 ACK를 보내지 않으면 서버는 메모리 공간을 점점 더 많이 확보해둔 상태에서 대기
      • 서버의 RAM이 꽉 차면 서비스를 계속할 수 없음.

3-way handshake
데이터 전송

  • 연결 종료
    • 3-way handshake 이용
    • 절반 닫기: 어느 쪽이든 요청 가능
  • 연결 재설정
    • RST 비트를 1로 설정
      • 연결 거절, 연결 중단, 휴지 연결의 종료

상태 천이 다이어그램

  • 연결 설정, 연결 종료, 데이터 전송 동안 발생하는 여러 가지 이벤트를 관리하기 위하여 유한 상태 기기(FSM)를 이용하여 구현

  • 시나리오
    • 서버 프로세스: 수동 개방(open)과 수동 닫기(close)를 실행
    • 클라이언트 프로세스: 능동 개방과 능동 닫기를 실행
    • 절반-닫기에 의한 연결 종료


TCP 창(채널)

  • 데이터 전송을 위한 각 방향에 대해 두 개의 창을 사용
  • 양방향 통신을 위하여 네 개의 채널이 필요
    • 바이트로 표현
    • open, close, shrink 동작
    • 1개의 타이머 이용
  • 수신자가 광고한 버퍼(큐)만큼의 크기만큼 보냄

 

흐름 제어

  • 송신자가 데이터를 보내는 속도와 수신자가 데이터를 받는 속도의 균형을 맞추는 것
  • 슬라이딩 윈도우 프로토콜 이용 - 바이트 중심

 

오류 제어

  • 훼손 세그먼트 감지 및 재전송
  • 손실 세그먼트 재전송
  • 순서가 어긋난 세그먼트 저장
  • 중복 세그먼트 감지 및 폐기

 

  • 오류 제어 도구
    • 검사합: 훼손 여부 확인
    • 확인 응답: ACK 이용
    • 타임 아웃: 타임 아웃 전까지 확인응답 되지 않으면 훼손 또는 손실 간주
  • 재전송
    • 오류 제어 메커니즘의 핵심
    • 재전송 타이머(RTO)가 만료된 경우
      • 왕복 시간을 기반으로 갱신
    • 3개의 중복 ACK를 수신하는 경우
      • 타임아웃을 기다리는 것보다 더 빨리 전송하기 위해
      • 3개의 중복 ACK 규칙에 따라 손실로 간주하고 즉시 재전송

 

혼잡 제어

  • 라우터가 패킷을 처리할 수 있는 속도보다 더 빨리 패킷을 수신하는 경우
  • 재전송은 원인을 더욱 악화시킴
  • 혼잡 제어 원칙
    • 느린 시작
    • 혼잡 회피
    • 혼잡 감지