전송 계층은 신뢰할 수 있는 연결형 통신이 가능한 프로토콜(TCP)를 제공하며, 포트를 통해 응용 계층의 특정 애플리케이션을 식별한다.
실시간성 필요
: 패킷 손실을 감수하더라도 빠른 전송이 필요할 수 O
: 동영상 스트리밍 등
IP의 성능
: IP 통신의 경우 매 통신마다 신뢰성을 점검하고 연결을 수립하는 과정이 비효율적
포트 종류 | 포트 번호 범위 |
---|---|
잘 알려진 포트 | 0 ~ 1023 |
등록된 포트 | 1024 ~ 49151 |
동적 포트 | 49152 ~ 65535 |
잘 알려진 포트 (well known port)
: 시스템 포트
: 범용적으로 사용되는 애플리케이션 프로토콜이 사용
: 서버로 동작하는 프로그램이 해당 포트로 동작됨
등록된 포트 (registered port)
: 애플리케이션 프로토콜에 할당하기 위함
: 큰 기업의 제품이나 오픈 소스 등
: 서버로 동작하는 프로그램이 해당 포트로 동작됨
동적 포트 (dynamic port)
: 사설 포트, 임시 포트
: 특별히 관리 X 자유롭게 사용 가능
: 클라이언트로 동작하는 프로그램이 해당 포트로 동작됨
IP 주소:포트 번호
의 형식으로 표현네트워크 외부 | 네트워크 내부 |
---|---|
1.2.3.4:6200 | 192.168.0.5:1025 |
1.2.3.4:6201 | 192.168.0.6:1026 |
같은 1.2.3.4
라는 공인 IP 주소여도, 포트번호 6200
, 6201
이냐에 따라 사설 IP 주소를 구분지을 수 있다.
따라서, 공인 IP 주소와 사설 IP 주소를 1:N으로 관리할 수 있다.
TCP 프로토콜은 호스트 간 사전 연결을 수립하여 연결형 통신을 가능하게 한다.
사진 출처 : https://www.geeksforgeeks.org/computer-networks/services-and-segment-structure-in-tcp/
ACK
: 세그먼트의 승인을 나타내기 위함 (특정 세그먼트에 대한 응답 시 사용)SYN
: 연결 수립 (TCP 연결 시작 시 사용)FIN
: 연결 종료사진 출처 : https://afteracademy.com/blog/what-is-a-tcp-3-way-handshake-process
단계 | 호스트 A 상태 | 호스트 B 상태 | 전송된 세그먼트 |
---|---|---|---|
시작 전 | CLOSED | LISTEN | |
1단계 | SYN-SENT | LISTEN | SYN이 1인 세그먼트 (A -> B) |
2단계 | SYN-SENT | SYN-RECEIVED | SYN, ACK가 1인 세그먼트 (B -> A) |
3단계 | ESTABLISHED | SYN-RECEIVED | ACK가 1인 세그먼트 (A -> B) |
연결 수립 | ESTABLISTED | ESTABLISTED |
액티브 오픈
: 처음 연결을 시작하는 호스트의 연결 수립 과정
: 클라이언트가 SYN
세그먼트를 보내는 시점부터
패시브 오픈
: 연결 시작 요청을 받은 뒤 연결을 수립하는 과정
: 서버가 클라이언트의 SYN
세그먼트를 받고, SYN
과 ACK
비트를 1로 설정한 세그먼트를 보내는 시점부터
사진 출처 : https://www.geeksforgeeks.org/computer-networks/tcp-connection-termination/
단계 | 호스트 A 상태 | 호스트 B 상태 | 전송된 세그먼트 |
---|---|---|---|
시작 전 | ESTABLISHED | ESTABLISHED | |
1단계 | FIN-WAIT-1 | ESTABLISHED | FIN이 1인 세그먼트 (A -> B) |
2단계 | FIN-WAIT-2 | CLOSE-WAIT | ACK가 1인 세그먼트 (B -> A) |
3단계 | FIN-WAIT-2 | LAST-ACK | FIN이 1인 세그먼트 (B -> A) |
4단계 | TIME-WAIT | LAST-ACK | ACK가 1인 세그먼트 (A -> B) |
연결 종료 | CLOSED | CLOSED |
액티브 클로즈
: 연결을 종료하려는 호스트의 연결 종료 과정
: 특정 호스트가 FIN
세그먼트를 보내는 시점부터
패시브 클로즈
: 연결 종료 요청을 받은 뒤 연결을 종료하는 과정
: 연결을 종료하려는 호스트의 FIN
세그먼트를 받고, ACK
세그먼트를 보내는 시점부터
TCP는 잘못된 세그먼트를 재전송하는 방법으로 오류를 제어한다.
SACK
허용 필드TCP는 슬라이딩 윈도우를 사용해, 송신 호스트가 수신 호스트의 처리 속도를 고려해 송수신 속도를 균일하게 유지하도록 한다.
윈도우
: 수신 호스트가 한 번에 처리할 수 있는 세그먼트의 양
Go-Back-N ARQ와 Selective Repeat ARQ의 경우, 슬라이딩 윈도우를 사용
사진 출처 : https://dev.to/mwong068/sliding-window-technique-in-ruby-3og4
특정 세그먼트에 대한 확인 응답을 받으면, 윈도우를 한 칸씩 이동한 뒤 송신할/수신할 세그먼트에 대한 정보를 주고받는다.
TCP 헤더의 윈도우
필드에 수신 윈도우의 크기를 명시하고, 확인 응답 번호 값을 통해 슬라이딩 윈도우를 이동시킨다.
TCP 프로토콜에서 송신 호스트는, 네트워크 혼잡도를 판단해 유동적으로 전송량을 조절한다.
혼잡 윈도우
: 송신 호스트가 혼잡 없이 전송할 수 있을 법한 데이터 양
혼잡 윈도우의 적당한 크기를 구하기 위해 혼잡 제어 알고리즘 사용
혼잡 윈도우를 1부터 시작해, 문제 없이 수신된 ACK 세그먼트 1개당 1씩 증가시킨다.
: RTT마다 혼잡 윈도우가 지수적으로 증가
: 초기 전송 속도 확보
혼잡 윈도우를 증가시키다 보면, 혼잡이 감지될 수 있다.
상황 분류 | 해결 방법 |
---|---|
타임 아웃 | 혼잡 윈도우 = 1, 느린 시작 임계치 = 이전의 절반, 느린시작 재개 |
혼잡 윈도우 >= 느린 시작 임계치 | 느린 시작 종료, 혼잡 회피 |
3번의 중복 ACK 세그먼트 | 빠른 재전송 후, 빠른 회복 |
상황 분류 | 해결 방법 |
---|---|
타임 아웃 | 혼잡 윈도우 = 1, 느린 시작 임계치 = 이전의 절반, 느린시작 재개 |
3번의 중복 ACK 세그먼트 | 혼잡 윈도우&느린 시작 임계치 = 이전의 절반, 빠른 회복 |
상황 분류 | 해결 방법 |
---|---|
타임 아웃 | 혼잡 윈도우 = 1, 느린 시작 임계치 = 이전의 절반, 느린시작 재개 |
사진 출처 : https://www.geeksforgeeks.org/computer-networks/user-datagram-protocol-udp/
206p 1번
IP와 연관된 통신 특성으로 알맞은 단어 : 비신뢰성
. 비연결형
225p 2번
TCP의 쓰리 웨이 핸드셰이크 과정 중, 괄호 안에 들어갈 말 : ACK
작업관리자의 프로세스 창에 들어가면, 각 프로세스의 PID를 확인할 수 있다.
디스코드 앱 하위 프로세스들의 PID는 7144, 11036 ... 17660이고, 캡처 툴의 PID는 21160이다. (나머지 앱은 설명 생략)