본문 바로가기

기술&정보

회선 교환 패킷 교환 비교, TCP 특징, 3-way handshake, 4-way handshake, CRC, Cyclic Redundancy Check 계산 과정

반응형

회선 교환, 회선 스위칭, circuit switching, channel switching

호스트 간 통신을 위해 중계 노드를 거쳐 경로를 생성하며, 이때 최초 생성된 경로를 통신 종료 전까지 완전 점유하는 통신 방식이다.

  1. 이미 연결된 통신은 안정적으로 전송한다.
  2. 모든 회선이 점유 중일 경우 부하가 감소할 때까지 요청이 차단된다.
  3. 데이터가 전달되지 않을 때에도 회선을 점유하기 때문에 효율적이지 않다.
  4. 대역폭이나 시간을 나누어 쓸 수 있다. (FDM: Frequency Division Multitasking, TDM: Time Division Multitasking)
  5. 이러한 특징 때문에 시간 단위로 비용을 계산한다.

패킷 교환, 패킷 스위칭, packet switching

데이터를 패킷 단위로 나누어 여러 경로로 전송하며, 데이터가 정상 데이터로 판별되면 다음 중계 노드/호스트로 전송한다.

  1. Time Sharing을 통해 회선 효율성이 높아진다.
  2. 트래픽이 많은 상황에서도, store-and-forward 방식으로 데이터 입출력 속도를 맞춰줄 필요가 없다.
  3. 새로운 요청에 대한 전송 지연이 줄고, 통신 안정성이 높아진다.
  4. 대신 전체적인 품질 저하가 발생할 수 있다.이러한 특징 때문에 데이터 사용량을 단위로 비용을 계산한다.

store-and-forward

입력 데이터를 버퍼에 담고 CRC 기법 등을 통해 에러 검출 및 처리 이후 전달하는 기법으로, 버퍼가 가득 찰 경우 먼저 들어온 데이터를 버리기 때문에 데이터 로스가 발생하는 상황이 생김

CRC, Cyclic Redundancy Check

  1. 임의의 CRC 발생코드를 정의한다.
  2. 전송 데이터에 최고차항의 차수만큼 0을 붙여 확장 데이터로 변환한다.
  3. 확장 데이터를 발생코드로 나눈다. 이때 modular-2 연산을 사용한다.
    1. modular-2 연산: 나누고 나머지를 구할 때, 값을 빼지 않고, XOR 연산을 한다.
  4. 확장 데이터에 나머지 값을 더해 전송한다.
  5. 수신자는 발신자와 동일한 CPC 발생코드로 수신 데이터를 나눈다.
  6. 나머지가 0이면 No Error, 0이 아니면 Error가 검출된다.

CRC 예시

  1. CRC P(x) = x^3 + x^2 + 1 => 1101, 전송 데이터: 110010을 가정
  2. 최고차항의 차수는 3이므로 000을 붙여 전송 데이터를 확장한다. 확장 데이터: 110010000
  3. 이를 발생코드로 나눈다. 나머지 100
  4. 확장 데이터 + 나머지 = 110010100을 전송한다.
  5. 수신 데이터가 110010100라고 가정한다. 이를 1101로 나눈다. 나머지는 0
  6. No Error. 이외의 수신 데이터를 받은 경우 에러가 발생한다.

TCP, Transmission Control Protocol, 전송 제어 프로토콜

TCP는 LAN, Intranet, Internet에 연결된 노드 간 octet(8개 비트, 1 바이트) 단위의 정보 공유를 위한 패킷 스위칭 방식의 Internetworking Protocol 전송 프로토콜이다.

  • 안정적
  • 순차 보장
  • 에러 검출

최초 제안되었을 당시에는 Transmission Control Program이란 이름으로 connection-oriented links와 hosts 간 Datagram 서비스가 통합되어 있었다. 이후 전송 제어 프로토콜인 TCP와 Internetworking Datagram인 IP로 분리되었다.

두 계층을 엮어 주로 TCP/IP라고 부르며, 정식 명칭은 Internet Protocol Suite이다.

TCP 세그먼트 구조

TCP는 데이터 스트림으로부터 제공되는 데이터를 청크 단위로 분할하여 TCP 헤더 + 청크 데이터 형태로 전송하며, 이 데이터 전송 단위를TCP 세그먼트라고 한다. TCP 세그먼트는 IP 데이터그램에서 캡슐화 된 후 통신에 사용된다.

TCP 헤더는 10개의 필수 필드와 옵션 확장 필드로 구성되어 있으며, 각 필드의 정보는 다음과 같다.

  1. Source Port (16비트): 송신 포트
  2. Destination Port (16비트): 수신 포트
  3. Sequence Number (32비트):
    1. SYN 플래그가 1이면 초기 시퀀스 번호를 의미한다. 초기 시퀀스 번호에 대한 응답으로 전달되는 Acknowledgment Number는 (초기 시퀀스 번호 + 1)이다.
    2. SYN 플래그가 0이면 현재 세션의 초기 시퀀스 번호에서 송수신마다 1씩 누적된 시퀀스 번호이다.
  4. Acknowledgment Number (32비트):
    1. ACK 플래그가 1이면 수신자가 예상하는 다음 시퀀스 번호, 즉 요청받은 Sequence Number + 1 값으로 설정한다.
    2. 선행 바이트가 존재할 때 수신에 대한 응답 확인 목적으로 설정되는 필드이다.
  5. Data Offset (4비트):
    1. 32비트 워드 단위로 나타낸 TCP 헤더의 크기
    2. TCP 헤더의 크기는 기본 5워드 (20바이트), 옵션 값을 포함한다면 최대 20워드(60바이트)이다.
  6. Reserved (3비트): 예비 필드. 000으로 초기화 되어 있다.
  7. Flags (9비트):
    1. NS: ECN-nonce를 은폐 보호할 지 설정
    2. CWR(Congestion Window Reduced): 송신 측 호스트가 ECE 플래그가 포함된 TCP 세그먼트를 수신했고, 혼잡 제어 매커니즘에 의해 응답했음을 표시하는 플래그
    3. ECE(ECN-Echo):
      1. SYN=1이면 TCP 상대가 ECN(Explicit Congestion Notification, 명시적 혼잡 통지)이 가능함을 의미
      2. SYN=0이면 IP 헤더 셋에 CE(Congestion Experienced, 혼잡 경험) 플래그가 설정된 패킷이 정상 수신되었음을 의미
    4. URG: Urgent Pointer 필드의 값이 유효함을 나타냄
    5. ACK: Acknowledgment 필드의 값이 유효함을 나타냄. 클라이언트가 최초로 SYN 플래그를 설정한 이후 전송되는 모든 패킷은 이 플래그가 설정되어 있어야 함
    6. PSH: 수신 측에 버퍼링 된 데이터를 푸시할 지 나타냄
    7. RST: 커넥션 리셋 플래그
    8. SYN: 동기화 시퀀스 번호를 설정할 지 나타냄. 양쪽이 보낸 최초의 TCP 세그먼트에만 설정되어 있음. 다른 플래그의 의미가 SYN 플래그 값에 따라 변경됨. 일부 플래그는 SYN=1일 때 유효하며, 일부는 SYN=0일 때 유효함.
    9. FIN: 남은 송신 측 데이터 없음
  8. Window Size (16비트): 송신 측이 수신하고자 하는 윈도우 크기이며, 기본 단위는 바이트이다. Acknowledgment 필드의 시퀀스 번호보다 큰 값이어야 한다.
  9. Checksum (16비트): 헤더 및 데이터의 에러 확인을 위해 사용되는 16비트 체크섬 필드
  10. Urgent Pointer (16비트): URG=1이면 시퀀스 번호로부터 Urgent Pointer만큼 오프셋을 준 바이트가 마지막 긴급 데이터 바이트이다.
  11. Options (가변 0-320비트, 32의 배수로 설정됨)

TCP 프로토콜의 작동

  1. 연결 생성: 신뢰성 있는 연결을 위해 3-way handshake 방식을 사용
  2. 데이터 전송:
  3. 연결 종료: 할당 자원 반납을 위해 4-way handshake 방식을 사용

TCP 연결 생성

Client State Client   Server Server State
CLOSED     ( listen() ) LISTEN
SYN_SENT connect() - SYN ->    
    <- SYN, ACK - accept() SYN_RCVD
ESTABLISHED connect() returned - ACK ->    
      accept() returned ESTABLISHED
  1. SYN: 클라이언트가 서버에게 SYN 플래그가 포함된 포트 개방 요청 TCP 세그먼트를 전송한다. Sequence Number는 클라이언트가 임의로 생성한 값이다. (e.g. 0)
  2. SYN-ACK: 서버가 클라이언트의 SYN에 포트 개방 요청에 응답함과 동시에 클라이언트에게 포트 개방을 요청한다. SYN 플래그, ACK 플래그가 설정되어 있으며, Sequence Number는 서버가 임의로 생성한 값 (e.g. 50), Acknowledgment Number는 클라이언트가 요청한 Sequence Number + 1이다. (e.g. 0 + 1 = 1)
  3. ACK: 클라이언트가 서버의 포트 개방 요청에 응답한다.ACK 플래그가 설정되어 있으며 Acknowledgment Number는 서버가 요청한 Sequence Number + 1이다. (e.g. 50 + 1 = 51) ACK 응답과 함께 데이터를 전송하는 것 또한 가능하다.

TCP 연결 종료

Client State Client   Server Server State
ESTABLISHED   (클라이언트 측에
남은 데이터 없음)
  ESTABLISHED
FIN_WAIT_1 close() - FIN ->    
    <- ACK -   CLOSE_WAIT
FIN_WAIT_2 close() returned      
    (서버 측에서
남은 데이터 전송)
   
    <- FIN - close() LAST ACK
TIME_WAIT   - ACK ->    
CLOSED     close() returned CLOSED
  1. FIN: 클라이언트가 서버에게 FIN 플래그가 포함된 연결 종료 요청 TCP 세그먼트를 전송한다. 연결은 서버 측에서 FIN 요청을 보내기 전까지 유효하다.
  2. ACK: 서버는 클라이언트에게 ACK 플래그가 포함된 TCP 세그먼트를 전송하여 수신 확인을 알린다. Acknowledgment Number 필드 값은 FIN 요청의 Sequence Number + 1
  3. FIN: 서버 측도 남은 데이터를 모두 전송했다면 클라이언트에 FIN 플래그를 전송한다.
  4. ACK: 클라이언트가 확인용 ACK 플래그를 전송한다.

출처

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

 
 

www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.halu101/constatus.htm

 
반응형