.
1. 전송 계층
1.1 전송 계층 개요
•
시스템 종단(end-to-end)에서 투명한 데이터를 양방향으로 전달하는 계층
•
네트워크 계층(IP)은 데이터 전송의 신뢰성을 보장하지 않음
•
오류 발생 시 재전송을 요청함으로써 신뢰성 제공
1.2 전송 계층 프로토콜
•
인터넷에서 가장 많이 사용되는 두 프로토콜: UDP, TCP
•
연결형 통신 vs 비연결형 통신
구분 | UDP | TCP |
연결 방식 | 비연결형 | 연결형 |
신뢰성 | 없음 | 있음 |
속도 | 빠름 | 상대적으로 느림 |
적합한 용도 | 간단한 메시지 | 방대한 데이터 전송 |
1.3 전송 계층의 통신 방식
•
연결형 통신 (TCP)
◦
① 데이터를 보내도 되나요?
◦
② 네, 보내세요.
◦
③ 보냅니다.
◦
④ 받았습니다.
◦
⑤ 확인했습니다.
•
비연결형 통신 (UDP)
◦
사전 협상 없이 바로 데이터 전송
◦
수신 확인 없음
2. UDP
2.1 UDP 비연결형 서비스
•
정의: User Datagram Protocol
◦
전송 계층 프로토콜 (process-to-process)
◦
IP는 host-to-host
•
특징
◦
비연결성과 비신뢰성
◦
기본 IP 전달 서비스 + 프로세스 간 통신 + 검사합(checksum)
◦
연결 설정/해제 오버헤드 없음
◦
간단한 메시지 송수신에 유리
•
UDP의 한계
◦
수신 여부 미확인 → 데이터 손실 가능
◦
도착 순서 재조정 없음 → 순서 오류 가능
◦
흐름 제어 없음 → 수신 버퍼 초과 가능
•
장단점
◦
장점: TCP보다 전송 속도 빠름, 응용 프로그램 구조 단순
◦
단점: 메시지 손실·중복·지연·순서 오류를 응용 계층에서 직접 처리해야 함
2.2 UDP 사용자 데이터그램
•
UDP 데이터그램 = 헤더(8 bytes) + 데이터
필드 | 크기 | 설명 |
UDP 발신지 포트 | 16 bits | 발신지 프로세스 포트 번호 |
UDP 목적지 포트 | 16 bits | 목적지 프로세스 포트 번호 |
UDP 전체 길이 | 16 bits | 헤더 + 데이터 전체 길이 |
UDP 검사합 | 16 bits | 데이터그램 전체 오류 검사 |
2.3 UDP 가짜 헤더 (Pseudo Header)
•
검사합 계산을 위해 12바이트 가짜 헤더 사용
•
UDP 데이터그램이 정확히 목적지에 도착했는지 이중 인증
◦
UDP 헤더에는 포트번호만 있고 IP 주소 정보가 없음
◦
→ IP 헤더에서 주소 정보를 빌려와 검사합 계산
필드 | 크기 |
발신지 IP 주소 | 32 bits |
목적지 IP 주소 | 32 bits |
0 + 프로토콜(17) + UDP 길이 | 32 bits |
•
가짜 헤더와 패딩은 실제로 전송되지 않으며 길이에 포함되지 않음
•
수신자는 검사합 필드를 '0'으로 저장한 후, 가짜 헤더 + UDP 헤더 + 데이터 전체로 검사합 계산
2.4 UDP 포트 번호
•
소켓 주소 = IP 주소 + 포트 번호 → 프로세스 식별
•
서버 프로세스: 잘 알려진 포트(Well-known) 사용
•
클라이언트 프로세스: 임시 포트(Ephemeral) 사용
포트 번호 | 서비스 | 설명 |
7 | echo | UDP 데이터그램 에코 |
9 | discard | 수신 데이터그램 폐기 |
13 | daytime | 날짜 및 시간 반환 |
53 | nameserver | DNS 네임 서버 |
67 | bootps | Bootstrap 프로토콜 서버 |
68 | bootpc | Bootstrap 프로토콜 클라이언트 |
69 | tftp | TFTP 서버 |
3. TCP
3.1 전송제어 프로토콜 (TCP 정의)
•
정의: Transmission Control Protocol
◦
전송 계층 프로토콜 (process-to-process)
◦
연결지향(connection-oriented) 전송 서비스
•
연결 흐름: 연결 설정 → 데이터 전송 → 연결 해제
•
TCP 연결 식별자: 송신측 TCP 종점 주소 + 수신측 TCP 종점 주소
•
신뢰성 보장 방식
◦
UDP: 응용 프로그램에서 신뢰성 처리
◦
TCP: 전송 계층에서 신뢰성 처리
•
방대한 데이터 전송 → TCP / 간단한 메시지 → UDP
3.2 신뢰성 제공 방법
•
연결지향 데이터 전송
•
Segment 단위 전송 (MSS: Maximum Segment Size)
•
흐름 제어 — 슬라이딩 윈도우(Sliding Window)
◦
수신자의 버퍼 용량에 맞게 송신 속도 조절
◦
응답(ACK) 수신 시 윈도우가 오른쪽으로 이동
•
오류 제어 — ACK + 타이머 + 재전송
◦
패킷 손실: 타이머 종료 → 자동 재전송
◦
응답 손실: 동일하게 재전송 처리
•
Checksum, 순서 보장, 중복 패킷 방지
3.3 TCP 세그먼트 형식
•
TCP 세그먼트 = 헤더(20~60 bytes) + 데이터
필드 | 크기 | 설명 |
발신지 포트 | 2 bytes | 발신지 프로세스 식별 |
목적지 포트 | 2 bytes | 목적지 프로세스 식별 |
순서 번호 (Sequence Number) | 4 bytes | 데이터 첫 번째 바이트의 순서 번호 |
응답 번호 (ACK Number) | 4 bytes | 다음에 받기를 기대하는 순서 번호 (seq=x → ACK=x+1) |
헤더 길이 (HLEN) | 4 bits | 4바이트 단위, 값 5~15 → 20~60 bytes |
예약 | 6 bits | 미사용 |
제어 비트 (Flags) | 6 bits | URG, ACK, PSH, RST, SYN, FIN |
윈도우 크기 | 2 bytes | 흐름 제어용, 최대 65,535 bytes |
TCP 검사합 | 2 bytes | 오류 검사 |
긴급 포인터 | 2 bytes | URG=1일 때 긴급 데이터 마지막 바이트 위치 |
옵션 | 0~40 bytes | MSS, 윈도우 스케일, timestamp 등 |
제어 비트 (Flag Bits) 6종
플래그 | 설명 |
URG | 긴급 포인터 필드 유효 |
ACK | 응답 번호 유효 |
PSH | 즉시 상위 계층 전달 |
RST | 연결 재설정 |
SYN | 연결 초기화, 순서번호 동기화 |
FIN | 마지막 데이터, 연결 해제 |
3.4 TCP 연결형 서비스
•
전이중(full-duplex) 데이터 전송 서비스
•
소켓 주소 = IP 주소 + 포트 번호로 TCP 종단 식별
연결 설정 — 3-way Handshaking
•
1단계: 클라이언트 → 서버 SYN (seq=14531) 연결 요청, ISN 전달
•
2단계: 서버 → 클라이언트 SYN+ACK (seq=35731, ACK=14532) 수락 및 서버 ISN 전달
•
3단계: 클라이언트 → 서버 ACK (ACK=35732) 확인, 연결 완료
※ ISN(Initial Sequence Number)은 난수 발생기로 생성, 양 방향이 서로 다른 값 사용
연결 종료 — 4-way Handshaking
•
1단계: 클라이언트 → 서버 FIN (seq=x) 종료 요청
•
2단계: 서버 → 클라이언트 ACK (x+1) 확인, 서버 측 EOF 전달
•
3단계: 서버 → 클라이언트 FIN (seq=y) 서버 측 종료 요청
•
4단계: 클라이언트 → 서버 ACK (y+1) 확인, 양방향 종료 완료