본문 바로가기
Study/Network

[Network] TCP 프로토콜 개념 정리

by Jamie Lim 2020. 9. 20.

TCP 프로토콜이란?

전송 계층(4계층) 프로토콜 중 하나로 IP 위에서 특정 프로세스까지 패킷을 전달하기 위한 프로토콜이다.

 

특징

신뢰성

> 데이터의 오류나 누락 없이 안전한 전송을 보장한다

 

> 오류나 누락이 발생한다면 재전송을 수행해 보정한다

 

 

연결 지향성

> 논리적인 연결 통로를 통해 데이터를 주고받아 데이터의 전송 순서를 보장한다.

 

> 스트림 기반의 전송방식을 사용해 데이터를 임의의 크기로 나눠 연속해 전송하는 방식을 사용한다.

 

 

혼잡 제어

> 네트워크의 혼잡 정도에 따라 송신자가 데이터 전송량을 제어한다.

 

> 혼잡 정도에 대한 판단 기준은 데이터 손실 발생 유무로 판단한다. 만약 누락이 발생했다면 네트워크가 혼잡한 상태로 판단해 전송량을 조절한다.

 

 

흐름 제어

> 상대방이 받을 수 있을 만큼만 데이터를 효율적으로 전송한다.

 

> 흐름제어를 위해 슬라이딩 윈도우 방식을 사용한다.

  * 슬라이딩 윈도우 : 상대방이 수신 가능한 크기내에서 데이터를 연속해 보내는 방식으로 매 세그먼트 전송 시마다 수신 확인 응답을 수신한 후 전송하면 시간당 데이터 전송량이 떨어지므로 연속으로 전송한다.

 

 

TCP 구조

TCP Header

 

Source Port (16 bits)

  > 출발지(송신) 포트 번호

 

 

Destination Port (16 bits)

  > 목적지(수신) 포트 번호

 

 

Sequence Number (32 bits)

  > 송신 데이터 순서 번호

 

  > 송신 시 전송하는 데이터의 시작 바이트 순번을 담는다

 

  > 연결설정 단계에서 초기 순서 번호를 주고받아 초기 순서 번호는 0으로 고정이 아니라 임의의 수를 할당한다

 

 

Acknowledgement Number (32 bits)

  > 상대방이 다음에 전송할 순서 번호

 

  > 수신 확인 응답과 함께 해당 필드에 상대방이 다음에 전송할 순서 번호를 담아 보낸다

 

 

Header Length (4 bits)

> 헤더 길이

 

> 4 bits 워드 단위로 표시해 기본 헤더와 옵션 헤더 최대 40 bytes로 구성된다

 

 

Reserved (4 bits)

  > 사용하지 않고 예약되어 있는 비트

 

 

Control (6 bits)

  > URG (Urgent Pointer is valid) : 긴급 데이터 설정

 

  > ACK (Acknowledgment is valid) : 수신 확인 응답(ACK) 설정

 

  > PSH (Request for Push) : 송수신 버퍼에 있는 데이터를 즉시 처리

 

  > RST (Reset the Connection) :  연결 중단 (강제 종료), 재설정을 요구한다

 

  > SYN (Synchronize sequence numbers) : 연결 설정, 3-way-handshking을 하자 제의한다

 

  > FIN (Terminate the Connection) : 연결 종료 (정상 종료)

 

 

Window Size (16 bits)

  > 현재 상태 최대 버퍼

 

  > 수신측에서 송신측으로 보내는 수신 버퍼의 여유공간 크기를 의미하며 이를 통해 흐름 제어를 수행할 수 있다

 

 

Checksum (16 bits)

  > 헤더를 포함한 전체 세그먼트에 대한 오류 검사를 하는 필드

 

  > 데이터의 무결성을 보장해준다

 

 

Urgent Pointer (16 bits)

  > 긴급 처리해야 할 데이터가 존재하는 곳의 위치에 대한 포인터 값

 

 

 


3-way handshake

클라이언트와 서버가 신뢰성 있는 통신을 하기 위한 통신 시작 과정

 

 

 

 

 

 

1. client에서 연결을 하기 위해 serverSYN 플래그와 함께 요청을 보낸다

   (SYN_SENT 상태)

  * SYN은 랜덤한 값

 

 

2. server에서 SYN 패킷을 잘 받았다는 의미로 ACKSYN을 새로 보낸다

   (SYN_RECEIVED 상태)

  * ACK은 상대방이 다음에 보낼 패킷의 순서 번호를 의미한다

 

 

3. client에서 serverSYN을 잘 받았다는 의미로 ACK을 보낸다

   (ESTABLISHED 상태)

  * 연결 설정을 완료

 

 

 

 

 

4-way handshake

통신을 종료하는 과정

 

 

 

1. client가 통신을 종료하기 위해 FIN을 보낸다

   (FIN_WAIT_1 상태)

 

2. server에서 알겠다는 의미로 ACK을 보내 애플리케이션의 소켓을 닫는다

   (CLOSE_WAIT 상태)

* clientFIN_WAIT_2 상태가 됨

 

3. 애플리케이션에서 소켓을 닫으면 serverclientFIN을 보낸다

   (LAST_ACK 상태)

 

4. clientFIN을 받고 serverACK을 보낸다 (TIME_WAIT)

  * client는 일정 시간이 되면 CLOSED 상태가 된다

 

5. serverACK을 받는다 (CLOSED 상태)

'Study > Network' 카테고리의 다른 글

AWS  (0) 2020.11.26
Google Cloud Platform 인스턴스 생성하기  (0) 2020.11.09
[Network] ARP spoofing 개념 정리  (0) 2020.09.20
[Network] ARP 프로토콜 개념과 실습  (0) 2020.09.20
[Network] 네트워크 아키텍쳐의 종류  (0) 2020.09.14

댓글