9. TCP 프로토콜(1)

2022. 11. 17. 19:04Web/Network

전송 계층 프로토콜

- 데이터 링크 계층과 유사(오류 제어, 흐름 제어, 데이터 순서화 등 제공)

- 데이터 링크 계층은 물리적으로 1:1 연결된 호스트 사이의 전송, 전송 계층은 논리적으로 1:1 연결된 호스트 사이의 전송

 

전송 계층 주요 기능

흐름 제어

- 계층 2와는 다을 버퍼 관리 방법 필요

- 수신자가 송신자의 전송 속도보다 느리게 수신 -> 버퍼 용량 초과로 데이터 분실 -> 타임아웃 기능을 통한 재전송 유발

- 수신자가 슬라이딩 윈도우 프로토콜의 윈도우 하단 값을 조정

오류 제어

- 데이터 변형, 데이터 분실 오류 시 재전송 기능으로 복구

- 수신자의 요구(NAK) 또는 송신자의 판단(타임아웃)

- 선로 오류보다 각 계츠으이 소프트웨어 동작 과정 중에 분실하는 경우가 대부분

분할과 병합

- 상위 계층에서 요구한 데이터 크기가 전송 계층에서 처리할 수 있는 크기보다 큰 경우 분할 및 병합

- 수신 프로세스가 상위 계층에 데이터를 보낼 때는 반드시 데이터의 병합 과정을 거쳐야 계층 구조의 틀이 유지됨

서비스 프리미티브

- 전송 계층 사용자가 전송 계층 서비스를 사용하기 위한 인터페이스

- 네트워크 계층의 경우 대부분 비연결형 서비스 프리미티브가 정의

- 전송 계층의 경우 비연결형과 신뢰성이 향상된 연결형 서비스 모두 제공

 

전송 계층 설계 시 고려 사항

주소 표현

- 기본적으로 필요한 일반 사항은 호스트와 라우터, 네트워크 프로세스를 구분할 수 있는 주소

- TCP/IP 환경 : 네트워크 계층의 호스트 IP 주소 + 전송 계층의 포트 번호 조합

- TSAP(Transport Service Access Point)

- 여러 개의 계층적 필드로 구분

- 값만 해석해서는 논리적인 위치 파악 불가

- IP 주소 : 네트워크와 호스트의 계층적인 특성

멀티플렉싱(Multiplexing)

- 개별적으로 설정된 TPDU의 주소가 동일한 경우 하나의 가상회선에 실어 보내는 것이 유리

- 상향 : 다수의 전송 계층 연결을 하부의 네트워크 계층에서 하나의 연결로 지원. 네트워크 계층의 가상 회선 연결의 개수를 줄일 수 있음

- 하향 : 하나의 전송 연결에 대하여 네트워크 계층에서 다수의 가상 회선을 지원. 멀티미디어 전송에 유리

연결 설정

- Conn_Req : 한쪽의 연결 설정 요규

- Conn_Ack : 상대방의 연결 수락 응답

- 2단계 연결 설정 : 최소한의 단계, 수신단에서 거부 가능

- 실제로 프리미티브 전달 과정에서 분실, 변형, 복사 가능성이 있으므로 이러한 문제들을 고려해야함

 

- 3단계 연결 설정(3-Way Handshake)

- 세 번째의 Data_Req는 Conn_Ack에 대한 응답 기능도 수행

- 보낼 데이터가 없는 경우 Conn_Ack(y,x)에 대한 응답을 따로 보내야함

- A 프로세스에 전송할 데이터가 있으면 마지막의 Conn_Ack_Ack 대신 바로 데이터를 전송 가능

연결 해제

- 어느 한쪽의 Disc_Req로 전체 연결 해제

- Disc_Req에 대한 상대 프로세스의 동의가 없어도 연결이 끊김

- 하나의 연결에 2개의 단방향 연결을 지원하는 원통이 존재하는 것과 같음

- 어느 한쪽에서 해제 요청을 하는 경우 그 프로세스가 송신하는 원통 기능만 정지

- 양쪽 모두 Dis_req를 전송해야 해제됨

 

TCP 헤더 구조

TCP(Transport Control Protocol)

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

- 연결형 서비스 제공, 전이중 방식의 양방향 가상 회선 제공, 신뢰성 있는 데이터 전송 보장

- 일반적으로 전송 계층 프로토콜은 운영체제 내부 기능으로 구현

- 데이터를 세그먼트라는 블록 단위로 분할하여 전송

- 상위 계층에서는 연결형 서비스와 비연결형 서비스를 선택하여 전송 계층 프로토콜(TCP, UDP) 선택

- 데이터 링크 계층에는 다양한 네트워크 인터페이스 존재

TCP 헤더

- Source Port / Destination Port : 송수신 포트 번호

- Sequence Number : 순서 번호 

- Acknowledgement Number : 응답 번호, 다음에 수신하기를 원하는 데이터를 지정

- Data Offset : 데이터가 시작하는 위치, TCP 헤더의 크기

- Window : 수신 윈도우의 버퍼 크기 지정

- Checksum : 헤더와 데이터에 대한 오류 검출

- Urgent Pointer : 송신 프로세스가 긴급히 처리하기를 원하는 데이터의 처리

- TCP 헤더의 플래그 비트 : 플래그 비트가 8개 정의, 처음 2개 비트는 혼잡 제어 용도로 사용

> URG : Urgent Pointer 유효

> ACK : Acknowledge Number 유효, 정상적인 피기배킹 환경에서는 연결 설정의 첫 번째 세그먼트를 제외한 모든 세그먼트에서 1로 설정

>PSH : 현재 세그먼트의 데이터를 즉시 상위 계층에 전달하도록 지시

>RST : 연결의 리셋이나 유효하지 않은 세그먼트에 대한 응답

>SYN : 연결 설정 요청

>FIN : 점진적 방식의 연결 종료 요청, 한 방향의 연결만 해제되므로 쌍방이 FIN을 보내야 모든 연결이 해제됨

>CWR : ECE 비트를 수신한 송신 프로세스가 전송 윈도우 크기를 줄였음을 통지. 더 이상 ECE를 전송하지 말라는 의미

>ECE : 네트워크 트래픽이 많아질 때 라우터가 송신 프로세스에 명시적으로 혼잡을 알리려고 사용

 

포트 번호

- TCP, UDP 프로토콜이 상위 계층에 제공하는 주소 표현 방식

- TCP, UDP가 독립적으로 관리

- Unix 계열의 경우 /etc/services에 저장

- 클라이언트-서버 방식에서 클라이언트는 서버의 IP 주소와 포트 번호를 알아야 통신 가능

- Well-known 포트 : 많이 사용하는 인터넷 서비스에 고정된 포트 번호 할당

- 서버의 포트번호는 Well-known 포트번호를 이용하고 클라이언트의 경우 시스템에서 임의의 포트를 자동 할당

 

 

* 쉽게 배우는 데이터 통신과 네트워크(3판) 책을 바탕으로 작성하였습니다.

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

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

10. 전송 계층  (0) 2022.11.17
9. TCP 프로토콜(2)  (0) 2022.11.17
8. 네트워크 계층(3)  (0) 2022.11.15
8. 네트워크 계층(2)  (0) 2022.11.15
8. 네트워크 계층(1)  (0) 2022.11.15