본문 바로가기
Computer Science/Network

[ Computer Science ] Network - TCP의 구조

by 마늘아빠 2021. 4. 3.
728x90
반응형

컴퓨터 사이언스(CS) - 네트워크 부분 - TCP의 세그먼트와 헤더

TCP ( Transmission Control Protocol )
 인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나. IP와 함께 TCP / IP라는 명칭으로 널리 불린다. 
 근거리 통신망, 인트라넷, 인터넷 ( Unreliable )에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 패킷
 안정적, 순서대로, 에러없이 교환( Reliable )할 수 있게 해준다. 즉, 네트워크 통신에서 신뢰성있는 연결을 보장한다.
 
 TCP는 네트워크 혼잡 방지 알고리즘(network congestion avoidance algorithm)을 사용한다.

TCP 세그먼트 구조
 TCP는 데이터 스트림으로부터 데이터를 받아 들여 이것을 청크 단위로 분할한 뒤 
 TCP 헤더를 덧붙여 TCP 세그먼트를 생성한다.
 TCP 세그먼트는 IP 데이터그램에 캡슐화 되어 상대방과 주고 받게 된다.



 TCP 세그먼트는 세그먼트 헤더와 데이터의 두 섹션으로 구성된다.
 TCP 헤더는 10개의 필수 필드 및 옵션 확장 필드 ( 주황색 부분 )를 포함한다.

 Source Port ( 16비트 ) - 송신 포트
 
 Destination Port ( 16비트 ) - 수신 포트

 Sequence number ( 32비트 )
 - SYN 플래그가 (1)로 설정된 경우, 이것은 초기 시퀀스 번호가 된다.
   실제 데이터의 최초 바이트 값과 그에 상응하는 ACK 번호는 이 값 + 1이 된다.
 - SYN 플래그가 (0)으로 해제된 경우, 이것은 현재 세션의 이 세그먼트 데이터의 최초 바이트 값의 누적 시퀀스 번호이다.

 Acknowledgment number ( 32비트 )
 - ACK 플래그가 설정된 경우 이 필드의 값은 수신자가 예상하는 다음 시퀀스 번호가 된다.
   이것은 모든 선행하는 바이트들 ( 존재하는 경우)에 대한 수신에 대한 확인 응답이 된다.
   한쪽이 보낸 최초의 ACK는 반대쪽의 초기 시퀀스 번호 자체에 대한 확인 응답이며, 데이터에 대한 응답은 포함하지 않는다. 

 Data Offset ( 4비트 )
 - 32비트 워드 단위로 나타낸 TCP 헤더 크기 값. 헤더의 최소 크기는 5워드, 최대 크기는 15 워드.
   따라서, 최솟값은 20바이트, 최댓값은 60바이트. 헤더에 선택 값을 위해 최대 40 바이트가 더 추가될 수 있다.
   데이터 오프셋이라는 이름은 실제 데이터 상에서 TCP 세그먼트의 시작 위치의 오프셋이기 때문에 붙여졌다.

 Reserved ( 3비트 )
 - 미래에 사용하기 위해 남겨둔 예비 필드. 0으로 채워져야 한다.

 Flags ( 9 bits 혹은 Control bits )
 - 9개의 1-비트 플래그를 포함한다.
  - NS ( 1비트 ) - ECN-nonce 은폐 보호
  - CWR ( 1비트 ) - 혼잡 윈도 축소 ( Congestion Window Reduced ) 플래그.
    송신 측 호스트에 의해 설정되는 것.
    호스트가 ECE 플래그가 포함된 TCP 세그먼트를 수신했으며 혼잡 제어 메커니즘에 의해 응답했음을 알림.
  - ECE ( 1비트 ) - ECN-Echo
    SYN 플래그가 (1)로 설정된 경우, TCP 상대가 명시적 혼잡 통지가 가능함을 의미
    SYN 플래그가 (0)으로 해제된 경우, IP 헤더 셋에 혼잡 경험 플래그가 설정된 패킷이 정상 전송 중에 수신되었다는 것을
    의미
  - URG ( 1비트 ) - Urgent pointer 필드의 값이 유효함을 나타낸다.
  - ACK ( 1비트 ) - Acknowledgment 필드의 값이 유효함을 나타낸다.
    클라이언트가 보낸 최초의 SYN 패킷 이후에 전송되는 모든 패킷이 플래그가 설정되어 있어야 한다.
  - PSH ( 1비트 ) - 푸시 기능. 수신 애플리케이션에 버퍼링 된 데이터를 푸시해 줄지 여부를 질의하는 역할
  - RST ( 1비트 ) - 커넥션 리셋
  - SYN ( 1비트 ) - 동기화 시퀀스 번호. 양쪽이 보낸 최초의 패킷에만 이 플래그가 설정되어 있어야 한다.
    다른 일부 플래그들의 의미가 이 플래그의 값에 따라 바뀌며, 일부 플래그들은 이 플래그가 설정되어 있을 때만 유효하고
    또 다른 일부 플래그들은 이 플래그가 해제되어 있을 때문 유효하다.
  - FIN ( 1비트 ) - 남은 송신 측 데이터가 없음을 나타낸다.

 Window size ( 16비트 )
 - 수신 위도우의 크기. 해당 세그먼트의 송신 측이 현재 수신하고자 하는 윈도 크기(기본 단위 바이트)
   acknowledgment 필드의 시퀀스 번호보다 큰 값이어야만 한다.

 Checksum ( 16비트 )
 - 헤더 및 데이터의 에러 확인을 위해 사용되는 필드

 Urgent pointer ( 16비트 )
 - URG 플래그가 설정된 경우, 이 16 비트 필드는 시퀀스 번호로부터 오프셋을 나타낸다.
   이 오프셋이 마지막 긴급 데이터 바이트를 가리킨다.

 Options ( 가변 0-320 비트, 32의 배수 )
 - 이 필드의 길이는 데이터 오프셋 필드에 의해 결정된다. TCP의 기능을 확장할 때 사용하는 필드이다.
   추가적인 자세한 내용은 아래 링크 참조!
 
  [정보통신기술용어해설]
  www.ktword.co.kr/abbr_view.php?m_temp1=1031

  [TCP위키]
  ko.wikipedia.org/wiki/%EC%A0%84%EC%86%A1_%EC%A0%9C%EC%96%B4_%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C

Padding
 - TCP 헤더 패딩은 TCP 헤더의 종료 지점과 데이터의 시작 지점을 32비트 단위 길이에 맞추기 위해 사용.
   패딩 값은 0


 헤더 뒤에는 데이터 섹션이 따라온다. 그 내용은 애플리케이션의 페이로드 데이터이다. 
 데이터 섹션의 길이는 TCP 세그먼트 헤더에서 결정되지 않으며,
 전체 IP 데이터그램의 길이에서 TCP 헤더와 캡슐화된 IP 헤더의 길이를 뺀 값으로 계산하게 된다.
 즉, 데이터 섹션의 길이 IP 헤더에 의해 결정된다고 볼 수 있다.

 

프로토콜의 작동
 TCP 프로토콜의 작동은 크게 세가지 흐름으로 구분한다.
 1. 연결 생성 ( Connection establishment )
 2. 자료 전송 ( Data transfer )
 3. 연결 종료 ( Connection termination )

 신뢰성 있는 연결이 생성되어야 하며, 그 후 자료를 전송하고, 마지막으로 연결을 종료하면서 할당된 자원을 반납한다!

 연결 생성을 위해 3방향 핸드셰이크를 사용한다.
 연결 종료를 위해 4방향 핸드셰이크를 사용한다.


- 연결 생성과 연결 종료에 사용되는 핸드셰이킹의 자세한 내용은 아래 포스트로 확인하자!

so-cute-danu-dev.tistory.com/72

 

[ Computer Science ] Network - TCP 3 way Handshake / 4 way Handshake

컴퓨터 사이언스(CS) - 네트워크 부분 - TCP의 3 방향 핸드 셰이크 / 4 방향 핸드 셰이크 TCP란? OSI 7계층 중에 4계층인 전송계층(Transport Layer)에서 사용하는 프로토콜 사용자들이 신뢰성 있는 데이터

so-cute-danu-dev.tistory.com

반응형