TCP 프로토콜

Jeong seulho·2023년 3월 24일
0

컴퓨터 네트워크

목록 보기
10/15

📌TCP

  • 연결 지향형 프로토콜
  • 안정적, 순차적, 에러없는 교환 지향
  • UDP보다 안전하고 속도는 UDP보단 느리다

📌TCP 프로토콜 형태

  • TCP 세그먼트 : TCP 프로토콜에서 사용하는 데이터 단위

  • sequence number과 acknowledgment number

    1. 패킷A를 전송
    2. "패킷 받았어! 다음 패킷 보내줘!"라는 내용을 패킷B를 통해 응답
    3. "내가 보낸 패킷을 상대방이 진짜 받았구나?" 확인 후 다음 패킷전송
      • 이때 지금 잘 받았다는 패킷B가 나의 어떤 요청 패킷A에 대한 대답이 맞나?, 이것을 해결하기 위한 sequence number과 acknowledgment number
  • sequence number : 전송할 TCP 세그먼트의 연속된 데이터 번호중 시작 번호(xx번호 부터 줄게)

  • acknowledgment number : 수신받아야할 TCP 세그먼트의 연속된 데이터 번호중 시작 번호(XX번호 부터 줘)

  • TCP Flags : 각 연결 상태를 알려주는 플래그

    • U : 긴급 비트, 지금 보내는 데이터가 우선순위 높은거야
    • A : 승인 비트, 연결 가능한지, 데이터 보내도 되는지에대한 응답하는 비트
    • P : 푸쉬 비트, 원래 TCP 버퍼가 쌓여야 전송하는데 안쌓여도 그냥 밀어넣어 보내겠다
    • R : 초기화 비트, 연결 상태 새로고침하자
    • S : 싱크(동기화) 비트, 연결을 시작할때 사용하여 두 노드가 동기화
    • F : 종료 비트, 연결 끊자

📌TCP 연결 수립 과정

  • TCP 데이터 통신에서 프로세스-프로세스 연결을 위해 가장 먼저 수행되는 과정
  • 아래 과정을 3Way HandShake라고 한다
  1. 클라이언트에서 서버로 요청 패킷 전송
  2. 서버가 클라이언트 요청을 수락하는 패킷을 전송
  3. 클라이언트는 이를 최종적으로 수락하는 패킷을 전송

📌TCP 연결성공 이후 데이터 통신

  • 페이로드를 포함한 패킷 주고받을 때 규칙
  1. 보낸쪽에서 또 보낼때, SEQ, ACK 번호가 그대로
    (연결 수립이후 통신하면 클라이언트가 다시 또 먼저 시작, 2번 연속 요청보내게 됨)
  2. 받는 쪽에서 받은 ACK = 다음에 보낼 SEQ
    (xx번호 부터줘 -> xx번호 부터 줄게)
  3. 받는 쪽에서 받은 SEQ + 데이터 크기 = 다음에 보낼 ACK
    (xx번호 부터 줄게 데이터 크기는 100이야 -> 그럼 다음엔 xx + 100번 부터 줘)
  • 위 연결 수립이후 이어짐
  • 각 줄에서 데이터 크기는 100, 500, 0(연결 끊기 과정 데이터 통신x)

📌TCP의 상태 전이도

  • Listen 상태 : 서버가 클라이언트의 연결해도 돼? 라는 질문에 언제든지 대답할 수 있는 대기 상태
  • ESTABLISHED 상태 : 연결이 수립된 상태
  • listen상태에서 연결이 수립되면 ESTABLISHED 상태가 되는 것

연결 수립 과정에서 상태 전이

  • 서버는 Listen 상태로 대기중이어야함
  • 처음 클라이언트가 연결하자 요청 SYN_SENT 상태로
  • 요청 받으면 SYN_RECEIVED 상태로
  • 클라이언트가 다시 요청 보내면서 ESTABLISHED 상태로
  • 받은 서버도 ESTABLISHED 상태로

0개의 댓글