TCP의 이해

yo·2021년 2월 7일
0
  1. 전송 계층의 기능: https://naon.me/posts/til88
  2. TCP
  3. TCP의 데이터 전송: https://www.notion.so/9-TCP-3-TCP-b3058d960bb04631a92c1d61b3377927

학습목표

  • TCP 헤더에 정의된 필드의 역할 이해
  • Well-known 포트 개념 이해

개요

- Transport Control Protocol

- 주요 기능

  • 연결형 서비스 제공
  • 전이중(full-duplex) 방식의 양방향 가상회선 제공
  • 신뢰성 있는 데이터 보장(오류제어를 통해 데이터 변형, 위조 등 오류 없이 전송)

- 일반적으로 전송계층 프로토콜은 운영체제 내부 기능으로 구현

- TCP에서는 데이터를 세그먼트(segment)라는 블록 단위로 분할하여 전송

  • 블록 크기는 네트워크 부하 정도, 윈토우 크기 등에 영향
  • 가변 크기(로 보낸다)
  • 세그먼트당 순서번호를 부여하지 않고, 세그먼트에 실어 보내는 데이터 바이트 수를 순서번호에 반영
    (현재 순서번호가 100인데, 이번에 보내는 데이터가 또 100bytes였다면, 순서번호가 101이 되지 않고 200이 된다.)

- 상위계층에서는(특히 응용계층에서는) (전송 계층에서)연결형 서비스와 비연결형 서비스(중 어떤걸 쓸지)를 선택하여 전송계층 프로토콜(TCP, UDP) 선택

(연결형 서비스: TCP, 비연결형 서비스:UDP)

  • 연결 유무, 신뢰성 외에도 해당 전송계층을 선택했을 때 각 응용 프로그램에서 수행해야 하는 기능에 대해서 이해 필요
    -예를 들어 TCP를 선택했으면, 신뢰성이 있기 때문에 응용계층에서 순서번호나, 오류제어에 대한 고민을 안해도 된다. 반면 UDP를 선택했다면 응용계층에선 순서 번호, 오류제어, 흐름제어 등을 고려해야 한다.

- 데이터 링크 계층에는 다양한 네트워크 인터페이스 존재

TCP header


출처: https://www.lifewire.com/tcp-headers-and-udp-headers-explained-817970

- 헤더: 최소 20바이트 ~ 최대 40바이트 (사진과는 다른걸...?)

- 헤더의 필드

  • source port / Destination port
    • 송수신 포트 번호
  • sequence number
    • 순서 번호 (보낼 때)
    • 세그먼트 내의 바이트 수
    • 범위: 0~2 - 1
    • 최초의 시작 순서번호는 임의로 설정(연결 재설정시 혼선 방지)
  • Acknowledgement Number
    • 응답 번호
    • ACK 플래그가 지정된 경우에 한해 유효
    • 다음에 수신하기를 원하는 데이터를 지정
    • 연결성정이나 연결해제와 같이 데이터가 없는 경우에도 1씩 증가
  • Data Offset
    • 데이터가 시작하는 위치
    • TCP 헤더의 크기
  • Window
    • 수신 윈도우의 버퍼 크기 지정
    • 0이면 송신 프로세스의 전송 중지
  • Checksum
    • 헤더와 데이터에 대한 오류 검출
    • IP 프로토콜에서 사용하는 오류검출방식 이용
  • Urgent Pointer
    • 송신 프로세스가 긴급히 처리하기를 원하는 데이터의 처리
    • URG 플래그가 지정된 경우에 한해 유효
    • 플래그가 해제되면 정상 처리
  • Contro flags
    • URG: Urgent Pointer 유효
    • ACK
      • 정상 응답(정상이라면 1)
      • Acknowledgement Number 유효
      • 정상적인 Piggybacking 환경에서는 연결 성정의 첫 번째 세그먼트를 제외한 모든 세그먼트에서 1로 설정
    • PSH(push)
      • 현재 세그먼트의 데이터를 즉시 상위 계층에 전달하도록 지시
      • 이에 대한 응답이 도착하면 요청한 모든 데이터가 상위계층에 전달되었음을 의미
    • RST(reset)
      • 연결의 리셋이나 유효하지 않은 세그먼트에 대한 응답
      • 연결이 리셋된 후 앞서 전송했지만 정상 응답을 받지 못한 세그먼트는 재전송
    • SYN
      • 제일 처음에 연결 설정할 떄 보냄
      • 연결 설정 요청
    • FIN(finish)
      • 연결 해제할 떄 보냄. 양방향 모두 보내야 종료됨.
      • 점진적 방식의 연결 종료 요청
      • 한 방향의 연결만 해제되므로 쌍방이 FIN을 보내야 모든 연결이 해제됨.

- TCP 캡슐화

- 포트번호

profile
Never stop asking why

0개의 댓글