회선 교환, 회선 스위칭, circuit switching, channel switching
호스트 간 통신을 위해 중계 노드를 거쳐 경로를 생성하며, 이때 최초 생성된 경로를 통신 종료 전까지 완전 점유하는 통신 방식이다.
- 이미 연결된 통신은 안정적으로 전송한다.
- 모든 회선이 점유 중일 경우 부하가 감소할 때까지 요청이 차단된다.
- 데이터가 전달되지 않을 때에도 회선을 점유하기 때문에 효율적이지 않다.
- 대역폭이나 시간을 나누어 쓸 수 있다. (FDM: Frequency Division Multitasking, TDM: Time Division Multitasking)
- 이러한 특징 때문에 시간 단위로 비용을 계산한다.
패킷 교환, 패킷 스위칭, packet switching
데이터를 패킷 단위로 나누어 여러 경로로 전송하며, 데이터가 정상 데이터로 판별되면 다음 중계 노드/호스트로 전송한다.
- Time Sharing을 통해 회선 효율성이 높아진다.
- 트래픽이 많은 상황에서도, store-and-forward 방식으로 데이터 입출력 속도를 맞춰줄 필요가 없다.
- 새로운 요청에 대한 전송 지연이 줄고, 통신 안정성이 높아진다. 대신 전체적인 품질 저하가 발생할 수 있다.이러한 특징 때문에 데이터 사용량을 단위로 비용을 계산한다.
store-and-forward
입력 데이터를 버퍼에 담고 CRC 기법 등을 통해 에러 검출 및 처리 이후 전달하는 기법으로, 버퍼가 가득 찰 경우 먼저 들어온 데이터를 버리기 때문에 데이터 로스가 발생하는 상황이 생김
CRC, Cyclic Redundancy Check
- 임의의 CRC 발생코드를 정의한다.
- 전송 데이터에 최고차항의 차수만큼 0을 붙여 확장 데이터로 변환한다.
- 확장 데이터를 발생코드로 나눈다. 이때 modular-2 연산을 사용한다.
- modular-2 연산: 나누고 나머지를 구할 때, 값을 빼지 않고, XOR 연산을 한다.
- 확장 데이터에 나머지 값을 더해 전송한다.
- 수신자는 발신자와 동일한 CPC 발생코드로 수신 데이터를 나눈다.
- 나머지가 0이면 No Error, 0이 아니면 Error가 검출된다.
CRC 예시
- CRC P(x) = x^3 + x^2 + 1 => 1101, 전송 데이터: 110010을 가정
- 최고차항의 차수는 3이므로 000을 붙여 전송 데이터를 확장한다. 확장 데이터: 110010000
- 이를 발생코드로 나눈다. 나머지 100
- 확장 데이터 + 나머지 = 110010100을 전송한다.
- 수신 데이터가 110010100라고 가정한다. 이를 1101로 나눈다. 나머지는 0
- 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개의 필수 필드와 옵션 확장 필드로 구성되어 있으며, 각 필드의 정보는 다음과 같다.
- Source Port (16비트): 송신 포트
- Destination Port (16비트): 수신 포트
- Sequence Number (32비트):
- SYN 플래그가 1이면 초기 시퀀스 번호를 의미한다. 초기 시퀀스 번호에 대한 응답으로 전달되는 Acknowledgment Number는 (초기 시퀀스 번호 + 1)이다.
- SYN 플래그가 0이면 현재 세션의 초기 시퀀스 번호에서 송수신마다 1씩 누적된 시퀀스 번호이다.
- Acknowledgment Number (32비트):
- ACK 플래그가 1이면 수신자가 예상하는 다음 시퀀스 번호, 즉 요청받은 Sequence Number + 1 값으로 설정한다.
- 선행 바이트가 존재할 때 수신에 대한 응답 확인 목적으로 설정되는 필드이다.
- Data Offset (4비트):
- 32비트 워드 단위로 나타낸 TCP 헤더의 크기
- TCP 헤더의 크기는 기본 5워드 (20바이트), 옵션 값을 포함한다면 최대 20워드(60바이트)이다.
- Reserved (3비트): 예비 필드. 000으로 초기화 되어 있다.
- Flags (9비트):
- NS: ECN-nonce를 은폐 보호할 지 설정
- CWR(Congestion Window Reduced): 송신 측 호스트가 ECE 플래그가 포함된 TCP 세그먼트를 수신했고, 혼잡 제어 매커니즘에 의해 응답했음을 표시하는 플래그
- ECE(ECN-Echo):
- SYN=1이면 TCP 상대가 ECN(Explicit Congestion Notification, 명시적 혼잡 통지)이 가능함을 의미
- SYN=0이면 IP 헤더 셋에 CE(Congestion Experienced, 혼잡 경험) 플래그가 설정된 패킷이 정상 수신되었음을 의미
- URG: Urgent Pointer 필드의 값이 유효함을 나타냄
- ACK: Acknowledgment 필드의 값이 유효함을 나타냄. 클라이언트가 최초로 SYN 플래그를 설정한 이후 전송되는 모든 패킷은 이 플래그가 설정되어 있어야 함
- PSH: 수신 측에 버퍼링 된 데이터를 푸시할 지 나타냄
- RST: 커넥션 리셋 플래그
- SYN: 동기화 시퀀스 번호를 설정할 지 나타냄. 양쪽이 보낸 최초의 TCP 세그먼트에만 설정되어 있음. 다른 플래그의 의미가 SYN 플래그 값에 따라 변경됨. 일부 플래그는 SYN=1일 때 유효하며, 일부는 SYN=0일 때 유효함.
- FIN: 남은 송신 측 데이터 없음
- Window Size (16비트): 송신 측이 수신하고자 하는 윈도우 크기이며, 기본 단위는 바이트이다. Acknowledgment 필드의 시퀀스 번호보다 큰 값이어야 한다.
- Checksum (16비트): 헤더 및 데이터의 에러 확인을 위해 사용되는 16비트 체크섬 필드
- Urgent Pointer (16비트): URG=1이면 시퀀스 번호로부터 Urgent Pointer만큼 오프셋을 준 바이트가 마지막 긴급 데이터 바이트이다.
- Options (가변 0-320비트, 32의 배수로 설정됨)
TCP 프로토콜의 작동
- 연결 생성: 신뢰성 있는 연결을 위해 3-way handshake 방식을 사용
- 데이터 전송:
- 연결 종료: 할당 자원 반납을 위해 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 |
- SYN: 클라이언트가 서버에게 SYN 플래그가 포함된 포트 개방 요청 TCP 세그먼트를 전송한다. Sequence Number는 클라이언트가 임의로 생성한 값이다. (e.g. 0)
- SYN-ACK: 서버가 클라이언트의 SYN에 포트 개방 요청에 응답함과 동시에 클라이언트에게 포트 개방을 요청한다. SYN 플래그, ACK 플래그가 설정되어 있으며, Sequence Number는 서버가 임의로 생성한 값 (e.g. 50), Acknowledgment Number는 클라이언트가 요청한 Sequence Number + 1이다. (e.g. 0 + 1 = 1)
- 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 |
- FIN: 클라이언트가 서버에게 FIN 플래그가 포함된 연결 종료 요청 TCP 세그먼트를 전송한다. 연결은 서버 측에서 FIN 요청을 보내기 전까지 유효하다.
- ACK: 서버는 클라이언트에게 ACK 플래그가 포함된 TCP 세그먼트를 전송하여 수신 확인을 알린다. Acknowledgment Number 필드 값은 FIN 요청의 Sequence Number + 1
- FIN: 서버 측도 남은 데이터를 모두 전송했다면 클라이언트에 FIN 플래그를 전송한다.
- 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
'기술&정보' 카테고리의 다른 글
#WebRTC #RTCPeerConnection RealTime P2P Communication (0) | 2021.03.02 |
---|---|
UDP, RTP, RTCP 프로토콜, OSI 7계층, TCP/IP 계층 정리 (0) | 2021.02.23 |
ARCore SDK for Unity - HelloAR (0) | 2021.01.13 |
Voice User Interface: UI의 과거와 현재 (0) | 2020.11.24 |
Immersive Media가 지향해야 하는 점 (0) | 2020.11.24 |