본문 바로가기

CS/네트워크

10. TCP정의 및 TCP동작 원리

쉽게 배우는 데이터 통신과 컴퓨터 네트워크를 정리한 내용입니다

TCP와 UDP의 개념을 간단히 정리한 Github

 

GitHub - fhwmqkfl/YJs_TIL: YJ's Study Log

YJ's Study Log. Contribute to fhwmqkfl/YJs_TIL development by creating an account on GitHub.

github.com

1. TCP(Transmission Control Protocol)의 정의

IP 프로토콜 위에서 연결형 서비스를 지원하는 전송 계층 프로토콜.

- 연결형 서비스를 제공

- 전이중 방식의 양방향 가상 회선을 이용

- 신뢰성 있는 데이터 전송을 보장함

전송 계층 프로토콜은 운영체제 내부 기능으로 구현되는데, 이때  상위계층에서 시스템 콜이라는 프로그램 호출 방식을 이용해 이용한다.

 

TCP에서 데이터 단위는 세그먼트라는 블록단위로 가변적인 크기를 가진다. 세그먼트당 번호를 부여하는 방식이 아닌 세그먼트에 실려 전송되는 데이터의 바이트 개수를 순서 번호에 반영한다.

2. TCP의 헤더 구조

TCP헤더의 크기는 최소 20바이트, 최대 40바이트이다(Options and Padding은 생략할 수 있음)

  • 발신지 포트 주소,목적지 포트 주소 : TCP로 연결되는 가상회선 양단의 송수신 프로세스에 할당된 네트워크 포트 주소를 의미한다. 
  • Sequence number(순서 번호) : 송신 프로세스가 지정하는 순서 번호. 세그먼트 전송 과정에서 전송되는 바이트의 수를 기준으로 증가한다. 최대 범위가 2의 32승이라 중복의 염려가 없음
  • Acknowledgement Number(응답 번호) : 수신 프로세스가 제대로 수신한 바이트의 수를 응답하기 위해 사용. 
  • Data Offset(이미지 HLEN) : TCP 세그먼트가 시작되는 위치를 기준으로 데이터의 시작 위치를 나타내므로 TCP헤더의 크기가 된다
  • Reserved(예약) : 예약 필드
  • Window(윈도우) : 슬라이딩 윈도우 프로토콜에서 수신 윈도우의 버퍼 크기를 지정하기위해 사용하며 수신 프로세스가 수신할 수 있는 바이트의 수를 표시한다.
  • Checksum : TCP 세그먼트에 포함되는 프로토콜 헤더와 데이터 모두에 대한 변형 오류를 검출하는데 사용
  • Ugent Pointer(긴급 포인터) : 긴급 데이터를 처리 위해 사용

TCP 헤더의 플래그 비트

9. 전송 계층의 기능에서 SYN, ACK언급이 되었다!
  • 플래스(Flag) : 기억해야 하거나 또는 다른 프로그램에게 약속된 신호를 남기기 위한 용도로 프로그램에서 사용되는 미리 정의된 비트를 의미.

TCP 헤더에서 플래그는 8개가 있으며, 이를 이용해 논리적인 TCP 연결회선 제어 및 데이터 관리를 하게된다.

2개는 혼잡제어로 나머지 6개의 필드는 1의 값을 가지면 각각 아래의 의미를 갖게 된다

  • URG : Urgent Pointer 필드가 유효한지를 나타냄. 긴급데이터가 도착했다는 의미로 수신 프로세스가 얼마나 많은 긴급데이터가 오는지 알 수 있음
  • ACK : Acknowledgement Number 필드가 유효한지 나타냄.
  • PSH : 현재 세그먼트의 데이터를 즉시 상위 계층에 전달하도록 지시할 때 사용. 
  • RST : 연결의 리셋이나 유효하지 않은 세그먼트에 대한 응답용으로 사용 -> 연결이 재설정되었을대 재전송 되어야 함
  • SYN : 연결 설정 요구를 하는 플래그 비트로 가상 회선 연결시에 사용됨
  • FIN : 한쪽 프로세스에서 더이상 전송할 데이터가 없어 연결 종료의사를 알릴때 사용. 연결해제는 양쪽 프로세스 모두 FIN플래그를 전송해야 완료됨
  • 혼잡 제어
    • ECE(ECN-Echo) : 네트워크 트레픽이 많아질 때 라우터가 송신 프로세스에 명시적으로 혼잡함을 알릴 때 사용. 
    • CWR : ECE비트를 수신한 송신 프로세스가 송신 윈도우 크기를 줄였음을 통지하는게 목적, 더이상 ECE를 전송하지 말라는 뜻

포트 번호 

TCP와 UDP가 상위 계층에 제공하는 주소 표현 방식.

통신 양단의 프로세스가 사용하는 고유주소는 해당 호스트의 IP주소와 호스트 내부의 포트번호가 조합된 형태가 됨

TCP, UDP가 포트번호를 독립적으로 관리를 하여 동일한 번호를 가질수 있으며, 동일포트이나 서로 다른 포트로 간주된다

(유닉스환경은 소켓으로 포트를 구현하기 때문에 소켓 시스템콜의 인터페이스를 알아야 한다)

 

오늘날의 인터넷 환경에서 동일한 포트 번호를 사용하도록 권고되는 포트 번호들이 있다. (Telnet : 23, SMTP : 25, HTTP: 80 등)

 

3. TCP의 동작 원리

TCP 프로토콜은 전이중 방식의 양방향 통신을 지원해 가상 회선으로 연결된 두 프로세스가 동시에 데이터를 전송할 수 있음(전송 데이터와 응답 데이터를 함께 전송하는 피기배킹 기능을 사용)

1) 연결 설정

 

3단계 설정(3-way handshake)방식이다. 

 

  1. A 프로세스가 SYN플래그를 지정한 세그먼트 전송해 연결 설정을 요구한다
  2. B 프로세스가 긍정 응답시 ACK필드에 SYN의 순서번호 10과 1을 더한 11을 지정해 회신한다
  3. B 프로세스가 전송한 수락 세그먼트가 제대로 도착했음을 알린다. 데이터가 있으면 바로 데이터도 함께 보낸다

 

 

 

2) 데이터 전송

3번의 데이터 응답 단계에서 데이터를 전송할 수 있으며 window 필드를 통해 흐름제어가 이루어진다.

TCP는 부정 응답 기능을 사용하지 않는데, 데이터 전송 과정에서 오류가 발생할 경우 수신 프로세스에서 회신을 받을 수 없어 송신 프로세스의 타임아웃 기능에 의한 세그먼트 재전송이 이루어진다

데이터 전송 오류시

 

3) 연결 해제

점진적 연결 해제 방식은 선택하고 있다. 해제하고자 하는 쪽에서 FIN플래그를 1로 전송하고,

수신 프로세스 측에서도 FIN 플래그를 1로 보내면 연결이 해제된다.

만약 수신 측에서 FIN을 보내지 않으면 연결이 계속 유지된 상태가 된다.