강의는 몇 번 들었지만 전처럼 기록을 열심히 해 두지는 않아서 몇 개월이 지난 후에 다시 쓴다. (250414)
TCP 통신 단계
- TCP는 통신(데이터 송수신)하기 전에 연결을 수립하고 통신이 끝나면 연결을 종료한다
MSS (Maximum Segment Size) 단위
- MSS - TCP로 전송할 수 있는 최대 페이로드 크기
- TCP 헤더 크기는 제외 (MTU는 헤더의 크기까지 포함)
TCP 세그먼트 구조
- 송신지 포트, 수신지 포트
- 순서 번호
- 확인 응답 번호
- 제어 비트 - ACK, SYN, FIN
- 윈도우
① 송신지 포트, 수신지 포트
- 송수신하는 포트 번호
② 순서 번호 (sequence number)
- 순서 번호가 명시되는 필드
- 순서 번호 = 초기 순서 번호 + 송신한 바이트 수
- 송수신되는 세그먼트 데이터의 첫 바이트에 부여되는 번호
- 세그먼트의 올바른 송수신 순서를 보장하기 위한 번호
- 초기 순서 번호는 무작위 값
③ 확인 응답 번호 (acknowledgment number)
- 수신자가 다음으로 받기를 기대하는 순서 번호 (일반적으로 수신한 순서 번호 + 1)
- 확인 응답 번호 값을 보내기 위해서는 제어 비트에서 승인을 나타내는 비트인 ACK 플래그를 1로 설정
④ 제어 비트 (control bits) 또는 플래그 비트 (flag bits)
- 현재 세그먼트에 대한 부가 정보
- 기본적으로 8비트로 구성
- ACK: 세그먼트의 승인을 나타내기 위한 비트
- SYN: 연결을 수립하기 위한 비트
- FIN: 연결을 종료하기 위한 비트
⑤ 윈도우 (window)
- 수신 윈도우(한 번에 수신하고자 하는 데이터 양)의 크기가 명시
TCP 연결 수립과 종료
- 액티브 오픈(active open): 연결 시작 호스트의 연결 수립 과정
- 패시브 오픈(passive open): 연결 수락 호스트의 연결 수립 과정
- 액티브 클로즈(active close): 종료 시작 호스트의 종료 과정
- 패시브 클로즈(passive close): 종료 수락 호스트의 종료 과정
- 연결 종료: 네 단계로 연결을 종료한다는 점에서 포 웨이 핸드셰이크(four-way handshake)라고 부르기도 함
- 상태(state): 현재 어떤 통신 과정에 있는지를 나타내는 정보
- TCP는 상태를 유지하고 활용하는 프로토콜: stateful
TCP 상태의 유형
- 연결이 수립되지 않은 상태 - CLOSED, LISTEN
- 연결 수립 과정에서 주로 볼 수 있는 상태 - SYN-SENT, SYN-RECEIVED, ESTABLISHED
- 연결 종료 과정에서 주로 볼 수 있는 상태
- FIN-WAIT-1, CLOSE-WAIT, FIN-WAIT-2, LAST-ACK, TIME-WAIT, CLOSING
-1. 연결이 수립되지 않은 상태
- CLOSED: 아무런 연결이 없는 상태
- LISTEN: 일종의 연결 대기 상태(SYN 세그먼트를 기다리는 상태)
- 서버로서 동작하는 패시브 오픈 호스트는 일반적으로 LISTEN 상태 유지
- LISTEN 호스트에게 SYN 세그먼트를 보내면 3-way handshake 시작
-2. 연결 수립 상태
- SYN-SENT: 연결 요청을 보낸 뒤 대기하는 상태, 액티브 오픈 호스트가 SYN 세그먼트를 보낸 뒤 그에 대한 응답인 SYN + ACK 세그먼트를 기다리는 상태
- SYN-RECEIVED: 패시브 오픈 호스트가 SYN + ACK 세그먼트를 보낸 뒤 그에 대한 세그먼트를 기다리는 상태
- ESTABLISHED: 연결이 확립되었음을 나타내는 상태
-3. 연결 종료 상태
- FIN-WAIT-1: 일반적인 TCP 연결 종료 과정에 있어 FIN-WAIT-1은 연결 종료의 첫 단계
- CLOSE-WAIT: 종료 요청인 FIN 세그먼트를 받은 패시브 클로즈 호스트가 그에 대한 응답으로 ACK 세그먼트를 보낸 후 대기하는 상태
- FIN-WAIT-2: FIN-WAIT-1 상태에서 ACK 세그먼트를 받고 상대 호스트의 FIN 세그먼트를 기다리는 상태
- LAST-ACK: CLOSE-WAIT 상태에서 FIN 세그먼트를 전송한 뒤 이에 대한 ACK 세그먼트를 기다리는 상태
- TIME-WAIT
- 액티브 클로즈 호스트가 FIN 세그먼트를 수신한 뒤, 이에 대한 ACK 세그먼트를 전송한 뒤 접어드는 상태
- 패시브 클로즈 호스트는 마지막 ACK 세그먼트를 수신하면 CLOSED 상태로 전이
- TIME-WAIT 상태의 액티브 클로즈 호스트는 일정 시간을 기다린 뒤 CLOSED 상태로 전이
TIME-WAIT 상태에서 ACK 세그먼트를 보낸 후 일정 시간을 기다려야 하는 이유는 마지막 ACK 세그먼트를 보낼 때 중간에 유실되거나, 잘못 전송될 수 있기 때문이다. 이에 반해 호스트 B는 마지막 ACK 세그먼트를 수신한 후 바로 CLOSED 상태로 접어든다.
UDP 데이터 그램의 구조
- UDP는 TCP와 달리 비연결형 통신을 수행하는 신뢰할 수 없는 프로토콜
- 그래서 연결 수립 및 해제, 재전송을 통한 오류 제어, 혼잡 제어, 흐름 제어 등을 수행하지 않음
- 상태를 유지하지 않음: stateless
- UDP는 TCP에 비해 적은 오버헤드로 패킷을 빠르게 처리
- 주로 실시간 스트리밍 서비스, 인터넷 전화처럼 실시간성이 강조되는 상황에서 TCP보다 더 많이 쓰임
'network' 카테고리의 다른 글
[network] 혼자 공부하는 네트워크 4-3 ECN: 명시적 혼잡 알림 (0) | 2025.01.06 |
---|---|
[network] 혼자 공부하는 네트워크 04-3 TCP의 오류, 흐름, 혼잡 제어 (0) | 2025.01.06 |
[network] 혼자 공부하는 네트워크 04-1 추가 2: ICMP (241201) (0) | 2024.12.01 |
[network] 혼자 공부하는 네트워크 04-1 추가: 포트 포워딩 (241129) (0) | 2024.11.29 |
[network] 혼자 공부하는 네트워크 04-1 전송 계층 개요: IP의 한계와 포트(241017) (2) | 2024.10.17 |