✏️기본 미션
Ch.04(04-1) 확인 문제 1번(p.206), (04-2) 확인 문제 2번(p.225) 풀고 설명하기
❓Ch.04(04-1) 확인 문제 1번(p.206)
IP는 성능을 위해 비신뢰성, 비연결성 통신 특성을 가지고 있습니다.
❓ Ch.04 (04-2) 확인 문제 2번(p.225)
TCP 쓰리 웨이 핸드셰이크는 세 개의 단계로 이루어진 TCP의 연결 수립 과정으로 아래와 같습니다.
- SYN 세그먼트 (A ➡️ B)
- SYN + ACK 세그먼트 (B ➡️ A)
- ACK 세그먼트 (A ➡️ B)
✏️선택 미션
작업 관리자에서 프로세스별 PID 확인해 보기
📜내용 정리
Chap04. 전송계층
4.1 전송 계층 개요 : IP의 한계와 포트
1) 신뢰할 수 없는 통신과 비연결형 통신
- IP의 한계로 볼 수 있는 특징 2가지 : 성능을 위해 신뢰성 포기
- 신뢰할 수 없는(비신뢰성) 프로토콜 (unreliable protocol)
- IP 프로토콜이 패킷이 수신지까지 제대로 전송되었다는 보장을 하지 않는다.
- 패킷의 손실 여부, 중복 여부 확인 X, 재전송 X, 순서대로 도착 보장 X
- 최선형 전달 (best effort delivery)
- 비연결형 통신 (connectionless protocol)
- 송수신 호스트 간에 사전 연결 수립 작업을 하지 않는다.
2) IP의 한계를 보완하는 전송 계층 ➡️ 연결형 프로토콜 : TCP
- 전송 계층은 연결형 통신을 가능하게 한다.
- 전송 계층은 신뢰성 있는 통신을 가능하게 한다.
3) 응용 계층과의 연결 다리, 포트
- 포트 : 패킷에 포함된 특정 애플리케이션을 식별할 수 있는 정보
- 포트의 분류 : 포트 번호를 통해 특정 애플리케이션을 식별한다.
- TCP와 UDP는 모두 포트 번호 필드인 송신지 포트 번호와 수신지 포트 번호를 포함한다.
- 포트 번호는 16비트로 표현 가능하며, 할당 가능한 포트 번호는 0~65535번이다.
- 잘 알려진 포트(well-known, system port) : 0 ~ 1023
- 등록된 포트 (registered port) : 1024 ~ 49151
- 동적 포트(dynamic port), 사설 포트(private port), 임시 포트(ephemeral port) : 49152 ~ 65535
- 서버로서 동작하는 프로그램의 포트번호는 사전에 암묵적으로 정해진 경우가 많다.
- 클라이언트로서 동작하는 프로그램의 포트번호는 동적 포트 번호 중에서 임의의 번호가 할당되는 경우가 많다.
- IP주소와 포트 번호가 주어지면 특정 호스트에서 실행 중인 특정 애플리케이션 프로세스를 식별할 수 있다.
- 포트 번호는 IP주소:포트번호 형식으로 표기되는 경우가 많다.
4) 포트 기반 NAT
- NAT : IP주소를 변환하는 기술
- 사설 IP주소와 공인 IP주소를 변환하기 위해 NAT 변환 테이블을 이용
- NAT는 변환하고자 하는 IP 주소를 1:1 대응하지 않는 경우가 많다. (여러 사설 IP주소 : 하나의 공인 IP주소)
- NAPT (Network Address Port Translation)
- 포트 기반의 NAT
- 포트를 활용해 하나의 공인 IP주소를 여러 사설 IP주소가 공유할 수 있도록 한다.
📍 포트 포워딩 (port forwarding)
: 네트워크 내 특정 호스트에 IP주소와 포트 번호를 미리 할당하고, 해당 IP주소:포트 번호로서 해당 호스트에게 패킷을 전달하는 기술
📍ICMP (Internet Control Message Portocol)
- IP 패킷의 전송 과정에 대한 피드백 메시지를 얻기 위해 사용하는 프로토콜
- IP의 신뢰할 수 없는 전송 특성과 비연결형 전송 특성을 보완하기 위한 네트워크 계층의 프로토콜
4.2 TCP와 UDP
1) TCP 통신 단계와 세그먼트 구조
- TCP는 통신 전 연결을 수립하고, 통신이 끝나면 연결을 종료한다.
- 데이터 송수신 과정에서 재전송을 통한 오류 제어, 흐름 제어, 혼잡 제어 등의 기능을 제공한다.
- MSS (Maximum Segment Size) : TCP로 전송할 수 있는 최대 페이로드 크기
- TCP 세그먼트 구조
- 송신지 포트와 수신지 포트 : 송신지 또는 수신지 애플리케이션을 식별하는 포트 번호가 명시되는 필드
- 순서 번호 : 순서 번호가 명시되는 필드
- 확인 응답 번호 : 상대 호스트가 보낸 세그먼트에 대한 응답으로, 다음으로 수신하기를 기대하는 순서 번호 명시
- 제어 비트 : 플래그 비트라고도 하며, 현재 세그먼트에 대한 부가 정보 명시
- 윈도우 : 수신 윈도우의 크기(한 번에 수신하고자 하는 데이터의 양)
(1) 제어 비트
- 제어 비트 필드는 8비트로 구성
- ACK : 세그먼트의 승인을 나타내기 위한 비트
- SYN : 연결을 수립하기 위한 비트
- FIN : 연결을 종료하기 위한 비트
(2) 순서 번호와 확인 응답 번호
- TCP의 신뢰성을 보장하기 위해 사용되는 필드
- 순서 번호는 세그먼트의 올바른 송수신 순서를 보장하기 위한 번호이다.
- MSS 단위로 전송 가능
- 초기 순서 번호 : 처음 통신을 위해 연결을 수립한 경우 순서 번호는 무작위 값이 된다.
- 순서 번호 : 초기 순서 번호 + 송신한 바이트 수
- 확인 응답 번호 : 순서 번호에 대한 응답
2) TCP 연결 수립과 종료
(1) 연결 수립 : 쓰리 웨이 핸드셰이크
- 세 개의 단계로 이루어진 TCP의 연결 수립 과정
- 액티브 오픈 : SYN 세그먼트 (A ➡️ B)
- 패시브 오픈 : SYN + ACK 세그먼트 (B ➡️ A)
- ACK 세그먼트 (A ➡️ B)
(2) 연결 종료
- 송수신 호스트가 각자 한 번씩 FIN과 ACK를 주고받으며 이루어진다.
- 액티브 클로즈 : FIN 세그먼트 (A ➡️ B)
- 패시브 클로즈 : ACK 세그먼트 (B ➡️ A)
- 패시브 클로즈 : FIN 세그먼트 (B ➡️ A)
- ACK 세그먼트 (A ➡️ B)
3) TCP 상태
- 상태 : 현재 어떤 통신 과정에 있는지를 나타내는 정보
- 연결이 수립되지 않은 상태 : CLOSED, LISTEN
- 연결 수립 과정에서 주로 볼 수 있는 상태 : SYN-SENT, SYN-RECEIVED, ESTABLISHED
- 연결 종료 과정에서 주로 볼 수 있는 상태 : FIN-WAIT-1, CLOSE-WAIT, FIN-WAIT-2, LAST-ACK, TIME-WAIT, CLOSING
(1) 연결이 수립되지 않은 상태
- CLOSED : 아무런 연결이 없는 상태
- LISTEN : 일종의 연결 대기 상태
(2) 연결 수립 상태
- SYN-SENT : 액티브 오픈 호스트가 SYN 세그먼트를 보낸 뒤 그에 대한 응답인 SYN+ACK 세그먼트를 기다리는 상태
- SYN-RECEIVED : 패시브 오픈 호스트가 SYN+ACK 세그먼트를 보낸 뒤 그에 대한 ACK 세그먼트를 기다리는 상태
- ESTABLISHED : 연결이 확립됨을 나타내는 상태
(3) 연결 종료 상태
- FIN-WAIT-1 : FIN 세그먼트로서 연결 종료 요청을 보낸 액티브 클로즈 호스트는 해당 상태가 된다.
- CLOSE-WAIT : 종료 요청인 FIN 세그먼트를 받은 패시브 클로즈 호스트가 응답으로 ACK 세그먼트를 보낸 후 대기하는 상태
- FIN-WAIT-2 : FIN-WAIT-1 상태에서 ACK 상태를 받고, 상대 호스트의 FIN 세그먼트를 기다리는 상태
- LAST-ACK : CLOSE-WAIT 상태에서 FIN 세그먼트를 전송한 뒤 이에 대한 ACK 세그먼트를 기다리는 상태
- TIME-WAIT : 액티브 클로즈 호스트가 FIN 세그먼트를 수신한 뒤 이에 대한 ACK 세그먼트를 전송하고 접어드는 상태
- CLOSING : 동시에 연결을 종료하려고 할 때 전이되는 상태
4) UDP 데이터그램 구조
- UDP : 비연결형 통신을 수행하는 신뢰할 수 없는 프로토콜
- 구성
- 송신지 포트와 수신지 포트
- 길이 : 헤더를 포함한 UDP 데이터그램의 바이트
- 체크섬 : 데이터그램 전송 과정에서 오류가 발생했는지 검사하기 위한 필드
4.3 TCP의 오류·흐름 ·혼잡 제어
1) 오류 제어 : 재전송 기법
(1) 오류 검출과 재전송
- 중복된 ACK 세그먼트를 수신했을 때
- 타임아웃이 발생했을 떄
(2) ARQ : 재전송 기법
- 수신 호스트의 답변과 타임아웃 발생을 토대로 문제를 진단하고 문제가 생신 메시지를 재전송해서 신뢰성을 확보하는 방법
- Stop-and-Wait ARQ
- 제대로 전달했음을 확인할 때까지 새로운 메시지를 보내지 않는다.
- 단순하지만 높은 신뢰성을 보장한다.
- 네트워크의 이용 효율이 낮아질 수 있다.
- Go-Back-N ARQ
- 파이프라이닝 방식을 이용해 여러 세그먼트를 전송하고, 도중에 잘못 전송된 세그먼트가 발생할 경우 해당 세그먼트부터 다시 전송하는 방식
- Go-Back-N ARQ의 ACK 세그먼트를 누적 확인 응답(CACK)이라고 한다.
- Selective Repeat ARQ
- 선택적으로 재전송하는 기법
- Selective Repeat ARQ의 ACK 세그먼트를 개별 확인 응답이라고 한다.
- 대부분의 호스트가 TCP 통신에서 지원한다.
2) 흐름 제어 : 슬라이딩 윈도우
- 수신 버퍼 : 수신된 세그먼트가 애플리케이션 프로세스에 의해 읽히지 전에 임시로 저장되는 공간
- 오버플로우 : 버퍼가 넘치는 현상
- 수신 호스트는 TCP 헤더(윈도우 필드)를 통해 송신 호스트의 처리 속도와 균일한 속도로 세그먼트를 전송한다.
3) 혼잡 제어
- 혼잡 윈도우
- 혼잡 없이 전송할 수 있을 만한 데이터의 양
- 혼잡 제어 알고리즘을 통해 결졍한다.
- 혼잡 제어 알고리즘
(1) AIMD
- 혼잡이 감지되지 않는다면 혼잡 윈도우를 RTT마다 1씩 선형적으로 증가시키고, 혼잡이 감지되면 혼잡 윈도우를 절반으로 떨어뜨린다.
- 톱니 모양으로 변화
- 기본적인 아이디어
(2) 느린 시직
- 혼잡 윈도우를 1부터 시작해 문제없이 수신된 ACK 세그먼트 하나당 1씩 증가시키는 방식
- RTT마다 혼잡윈도우는 2배씩 지수적으로 증가
- 혼잡 윈도우 값이 계속 증가하다가 느린 시작 임계치(slow start threshold) 이상이 되거나, 타임아웃이 발생하거나, 세 번의 중복된 ACK 세그먼트가 발생하여 혼잡이 감지되면 아래의 방법을 수행한다.
- 타임아웃 발생 시 : 혼잡 윈도우 값을 1로, 느린 시작 임계치를 혼잡이 감지되었을 시점의 혼잡 윈도우 값의 절반으로 초기화한 후 느린 시작 재개
- 혼잡 윈도우 >= 느린 시작 임계치 : 느린 시작 종료, 혼잡 윈도우를 절반으로 초기화 후 혼잡 회피 수행
- 세 번의 중복된 ACK 발생 : (빠른 재전송 후) 빠른 회복 수행
(3) 혼잡 회피
- RTT마다 혼잡 윈도우를 1MSS씩 증가시키는 알고리즘
(4) 빠른 회복
- 느린 시작은 건너뛰고 혼잡 회피를 수행하는 알고리즘
📍 명시적 혼잡 알림 (ECN)
: 네트워크 중간 장치의 도움을 받아 혼잡을 회피하는 방법
🤔느낀 점
TCP 통신에서 그림이 꼼꼼해서 빠르게 이해할 수 있었습니다. 슬라이딩 윈도우는 알고리즘 문제를 풀 때 미리 접해봐서 그런지 반가웠습니다.
'독학 > [책] 네트워크' 카테고리의 다른 글
[혼공학습단 12기 혼공네트🌐] 혼자 공부하는 네트워크 week6 (0) | 2024.08.13 |
---|---|
[혼공학습단 12기 혼공네트🌐] 혼자 공부하는 네트워크 week5 (0) | 2024.08.08 |
[혼공학습단 12기 혼공네트🌐] 혼자 공부하는 네트워크 week3 (1) | 2024.07.16 |
[혼공학습단 12기 혼공네트🌐] 혼자 공부하는 네트워크 week2 (1) | 2024.07.13 |
[혼공학습단 12기 혼공네트🌐] 혼자 공부하는 네트워크 week1 (0) | 2024.07.01 |