[CS] TCP

박현우·2021년 10월 31일
0

CS

목록 보기
12/20

TCP란?

  • 전송 계층의 주요 프로토콜로, 연결 지향형 프로토콜입니다.
  • TCP는 상위층이 넘겨준 데이터를 세그먼트라는 단위로 쪼개어 가공하고 하위층으로 넘겨주며 상위층이 신뢰할수 있는 연결방식을 제공합니다.ex) 3way, 4way
  • TCP는 기본적으로 IP와 함께 사용이 됩니다. 이유는 IP는 호스트 사이의 데이터 교환을 목적으로 만들어진 프로토콜로, 패킷을 목적지까지 보내는 일만을 합니다. 즉 네트웍상에서 발생할수 있는 데이터 누락, 패킷의 순서 뒤바뀜 등의 데이터 교정과 관련된 기능을 보안하기 위해 나온 것이 TCP 프로토콜입니다.

TCP의 구조

  • TCP는 두 호스트간의 데이터 연결과 전송을 위함입니다. 두 호스트 사이에 전송되는 TCP 데이터 단위를 세그먼트(Segment)라고 부릅니다. TCP 세그먼트는 TCP 헤더 + DATA로 구성됩니다.

1. SOURCE PORT/DESTINATION PORT

  • 이 데이터를 보낸 호스트, 받는 호스트의 포트 번호가 담겨있습니다. 각각 16bit씩 할당받으며 0 ~ 65536까지의 포트번호를 저장할 수 있습니다.

2. SEQUENCE NUMBER

  • TCP 세그먼트안의 데이터의 송신 바이트 흐름의 위치를 가리킵니다. 다른 호스트로 전달되는 패킷은 여러개의 서로 다른 경로를 거치면서 전달되다 보니 패킷의 순서가 뒤바뀔 수 있고 이를 수신측에서는 재 조립해야할 필요가 있는데, Sequence Number 를 이용해서 조립하게 됩니다.
  • SYN 플래그가 (1)로 설정된 경우, 이것은 초기 시퀀스 번호가 됩니다. 실제 데이터의 최초 바이트 값과 그에 상응하는 ACK 번호는 이 값에 1을 더한 값이 됩니다.
  • SYN 플래그가 (0)으로 해제된 경우, 이것은 현재 세션의 이 세그먼트 데이터의 최초 바이트 값의 누적 시퀀스 번호입니다.

3. Acknowledgment number

  • 다음에 받을것으로 예상되는 데이타 옥텟의 순서번호를 나타냅니다.
    옥텟? 8bit의 데이터들을 한데 모은 것을 옥텟이라 일컫습니다.

4. Flags(SYN, ACK, URG)

  • TCP에는 URG, ACK, PSH, RST, SYN, FIN 6개의 비트가 정의되어 있으며, 이러한 비트를 이용해서 패킷의 내용이 어떤 목적으로 전달될 것인지를 설정할 수 있습니다.

SYN

  • 동기화 시퀀스 번호. 양쪽이 보낸 최초의 패킷에만 이 플래그가 설정되어 있어야 합니다.
  • 다른 일부 플래그들의 의미가 이 플래그의 값에 따라 바뀌며, 일부 플래그들은 이 플래그가 설정되어 있을 때만 유효하고, 또 다른 일부 플래그들은 이 플래그가 해제되어 있을 때에만 유효합니다.

ACK

  • 원격 호스트의 sequence number에 대한 응답을 위한 목적으로 사용됩니다.
  • 즉 데이터를 잘 받았다는 걸 알려주기 위한 목적으로 사용되는데, 원격호스트의 sequence number의 번호에 +1을 해줘서 다시 전달하는 방법을 이용합니다.

URG

  • 긴급 메시지를 전송하기 위해서 사용합니다. URG 필드가 설정된 패킷을 받은 운영체제는 SIGURG 시그널(:12)을 발생시킵니다.
    SIGURG Signal? Out-of-band 데이터 도착과 같은 긴급한(urgent) 소켓 상태를 나타냅니다.

5. CHECKSUM

  • TCP 세그먼트 데이타는 중간에 훼손될수 있으며, 변조될수도 있습니다. 헤더 및 데이터의 훼손 변조를 확인하는 비트입니다.
  • 체크썸을 만드는 알고리즘이 따로 존재합니다.

ref.

0개의 댓글