Network

TCP(Transmission Control Protocol)

dev-rootable 2023. 7. 7. 16:17

📌 TCP란?

 

전송 계층에서 동작하는 프로토콜로서 호스트 사이의 신뢰성 있는 메시지 전송 및 감독을 지원한다.

 

📌 TCP의 구조

 

TCP 세그먼트 구조(출처 : https://jwprogramming.tistory.com/105)

 

🔎 Port Number

 

각 호스트의 프로세스 간 통신이 가능하도록 프로세스를 식별하는 Port Number가 있다.

 

🔎 Sequence Number(SYN)

 

송신 데이터의 순서 번호로서 3-way handshake를 시작할 때 임의의 시작 번호인 초기 순서 번호(Initial sequence number, ISN)를 상호 간에 주고받는다.

 

TCP 프로토콜은 3-way handshake라는 연결 설정 과정을 통해 신뢰성 있는 데이터 전송이 가능하다. 이를 위해 송신 측은 전송할 때마다 세그먼트 데이터에 번호를
부여하여 수신 측의 정상적인 수신여부를 확인할 수 있다.

 

💡 세그먼트(Segment)

전송 계층에서 사용하는 PDU, 즉 데이터 전송 단위를 말한다.

 

🔎 Acknowledgement Number(ACK)

 

3-way handshake에서 상대방이 다음에 전송할 순서 번호다.

 

예를 들어, A와 B라는 호스트가 있을 때, 연결 설정 과정에서 B가 현재 ACK 번호 200을 A에게 전송했다면 A의 다음 세그먼트 데이터의 SYN 번호는 200이 되어야 한다.

 

🔎 Control Flags

 

✔ URG(Urgent pointer is valid)

 

긴급 데이터 설정

 

✔ ACK(Acknowledgement is valid)

 

수신 확인 응답 설정

 

✔ PSH(Request for push)

 

송수신 버퍼에 있는 데이터를 즉시 처리

 

✔ RST(Reset the connection)

 

연결 중단(강제 종료)

 

✔ SYN(Synchronize sequence number)

 

연결 설정

 

✔ FIN(Terminate the connection)

 

연결 종료(정상 종료)

 

세그먼트 데이터의 목적을 표현

 

🔎 Window size

 

수신 버퍼의 여유 공간의 크기를 나타낸다.

 

🔎 Checksum

 

헤더를 포함한 전체 세그먼트 데이터에 대한 오류를 검사하기 위한 필드

 

📌 TCP의 주요 특징

 

🔎 Connection Oriented Protocol(연결 지향 프로토콜)

 

  • 논리적인 연결 통로를 통해 데이터를 주고받음으로써 데이터의 전송 순서를 보장
  • 3-way handshake(연결 설정 과정)을 통해 사전에 안전하게 상대방과 연결을 수립한다.
    • 수신 가능한 노드에만 데이터를 전달한다.
  • 4-way handshake(연결 종료 과정)를 통해 상대방으로부터 더 이상 요청 사항이 없음을 확인한 후 종료한다.

 

🔎 Reliable Protocol(신뢰할 수 있는 프로토콜)

 

✔ 흐름제어

 

TCP는 슬라이딩 윈도우(Sliding Window) 기법을 통해 흐름제어를 제공한다. TCP 구조에서 Window size라는 필드가 있는데, 해당 필드를 보고 상대방은 수신 가능한
버퍼 크기를 인지
한다. 그래서 송신 측은 수신 측의 수신 확인 응답이 없어도 가능한 범위 내에서 지속적으로 데이터를 전송할 수 있는데, 이를 슬라이딩 윈도우 기법이라고 한다.

 

✔ 오류제어

 

오류 또는 누락 발생 시 재전송한다.

 

✔ 혼잡제어

 

혼잡 정도에 따라 송신자가 데이터 전송량을 제어한다. 여기서 혼잡 정도를 판단하는 기준은 데이터의 손실 발생 유무다.

 

📌 3-Way Handshake

 

3-way handshake

 

🔎 단계 1

 

클라이언트는 연결 요청을 위해 능동적으로 포트를 열고 있는 Active open 상태

 

서버는 연결 요청을 수용하기 위해 수동적으로 포트를 열고 있는 Passive open 상태

 

클라이언트는 임의의 랜덤 한 시작 번호인 ISN을 선정하여 데이터를 전송한다. 이때, 세그먼트 내 제어 플래그의 SYN 값만 1로 한다.

 

이렇게 최초 클라이언트가 연결 설정을 위해 SYN 데이터를 보낸 <SYN_SENT> 상태가 된다.

 

🔎 단계 2

 

서버 측은 정상적으로 수신을 완료하면 <SYN_RCVD> 상태가 된다.

 

서버는 클라이언트에 연결 요청을 위해 마찬가지로 임의의 랜덤한 시작 번호인 ISN을 선정한다.

 

요청을 잘 수신했다는 응답으로 ACK 번호를 보낸다. 이 번호는 다음 요청의 SYN 번호가 된다.

 

이 요청을 위해 SYN과 ACK 플래그를 1로 설정한다.

 

🔎 단계 3

 

클라이언트는 자신의 요청에 대한 ACK를 받았으므로 연결이 완료된 <ESTABLISHED> 상태가 된다.

 

클라이언트는 연결 측인 서버를 찾았으므로 응답만 서버에 전해주면 된다. 따라서 ACK 플래그만 1로 설정한다.

 

🔎 단계 4

 

클라이언트의 ACK 응답을 받은 서버도 <ESTABLISHED> 상태가 되어 연결 설정 과정을 마친다.

 

References:

https://product.kyobobook.co.kr/detail/S000001808428

 

정보보안기사 & 산업기사 실기 이론편+문제편 세트(2020) | 정일영 - 교보문고

정보보안기사 & 산업기사 실기 이론편+문제편 세트(2020) | - 독자대상 : 정보보안기사 시험 준비생 - 구성 및 특징 : 이론 + 문제

product.kyobobook.co.kr

 

https://product.kyobobook.co.kr/detail/S000001808392

 

컴퓨터일반 이론편(2020) | 박태순 - 교보문고

컴퓨터일반 이론편(2020) | - 독자대상 : 전산직 계리직 공무원 시험 준비생 - 구성 및 특징 : ① 최근 경향 반영 ② 학습 내용 체계적으로 구성

product.kyobobook.co.kr