전송 계층의 기능
전송 계층은 데이터 링크 계층과 유사
- 오류 제어, 흐름 제어, 데이터 순서화
- 데이터 링크 계층은 물리적으로 1:1 연결된 호스트 사이의 전송
- 전송 계층은 논리적으로 1:1 연결된 호스트 사이의 전송
전송 계층의 주요 기능: 흐름제어, 오류제어, 분할과 병합, 서비스
전송 계층 설계시 고려 사항: 주소 표현, 멀티플렉싱, 연결 설정, 연결 해제
전송 계층의 주요 기능
흐름 제어
- 데이터 링크 계층
- Timeout, ACK, NACK, Sliding Window(Go-back-N, Selective Retransmit), Piggy-backing
- 전송 계층
- 데이터 링크 계층의 기법을 포트 간에 적용
- 수신 호스트가 슬라이딩 윈도우 프로토콜의 윈도우 하단 값을 조정
오류 제어
- 데이터 링크 계층
- 데이터 분실: 타임아웃 기능으로 재전송
- 데이터 변형: NAK 프레임을 수신하고 재전송
- 전송 계층
- 데이터 변형과 데이터 분실: 재전송에 의한 오류 제어 기능에 의해 복구
- 전송 계층의 오류는 대부분 데이터 분실
- (NAK 패킷) 수신 프로세스가 재전송을 요구할 수도 있고,
- (타임 이웃) 송신 프로세스가 스스로 판단해서 재전송 할 수도 있다.
분할과 병합
- 데이터 링크 계층
- 순서 번호: 0부터 N-1 까지 프레임에 부여되는 일련 번호
- 전송 계층
- 분할: 데이터를 전송하기 전에 적합한 크기로 나누는 과정
- 병합: 수신 프로세스가 수신한 데이터를 원래 크기로 다시 모으는 과정
- TCP 헤더에 Sequence Number 포함: 세그먼트를 보내는 프로세스가 부여
서비스 프리미티브
- 전송 계층 사용자가 전송 계층 서비스를 사용하기 위한 인터페이스
- 전송 계층이 상위 계층에게 지원하는 서비스
- 연결형 서비스(TCP)
- 비연결형 서비스(UDP)
전송 계층 설계시 고려 사항
주소 표현
- TSAP(Transmit Service Access Point): 전송 계층의 주소
- TCP/IP의 주소 표현: IP주소+포트번호
구조적 표현
- 여러 개의 계층적 필드로 구성되어 있어 호스트의 위치를 파악하기 쉽다
- ex) 도메인 주소
비구조적 표현
- 주소값을 해석해서 호스트의 논리적 위치를 파악하기 어렵다
- ex) IP주소: 네트워크와 호스트의 계층 정보를 제공하지만, 위치 정보와 관련해서는 비구조적
멀티플렉싱
- 상방향 멀티플렉싱
- 다수의 전송 계층 연결에 대해 하부의 네트워크 계층에서 연결이 하나 형성
- 네트워크 계층에서 만들어지는 가상 회선 연결의 개수를 줄일 수 있음
- 하방향 멀티플렉싱
- 하나의 전송 연결 설정을 의미하는 포트에 다수의 가상 회선 할당
- 전송 속도를 높이고 데이터의 특성에 따라 개별 가상 회선을 할당하여 효과적인 통신이 가능
- ex) 영화 파일: 영상, 음성, 자막으로 분리해서 연결 설정
연결 설정
- 개념적 연결 설정
- Conn_Req: 프로세스의 연결 설정 요구
- Conn_Ack: 상대편 프로세스에서 연결 수락을 의미
- 연결 요청은 양자의 합의에 의해서만 가능
- 3단계 연결 설정
- 오류 발생 가능성을 고려하여, 순서 번호를 사용한다.
연결 해제
- 일방적 연결 해제 절차 방식
- 한 개의 채널이 양방향 통신을 지원하는 것으로 생각한다.
- 통신하는 한쪽 프로세스가 일방적으로 Disc_Req를 전송해 연결 종료를 선언
- 전송이 진행중인 데이터의 처리가 완료되지 못함
- 점진적 연결 해제 절차 방식
- 두 개의 단방향 연결이 있는 것으로 생각한다.
- 연결을 해제하려면 두 프로세스 모두 Disc_Req를 전송해야 함(양쪽 합의 하에 해제)
UDP 프로토콜
UDP: 프로토콜 중 구조가 가장 간단
특징
- 비연결형 서비스를 제공
- 헤더와 전송 데이터에 대한 체크섬 기능을 제공
- Best Effort 전달 방식을 지원: 데이터그램이 목적지까지 도착했는지 확인하지 않는다.
용도
- 신뢰성이 떨어지지만
- 프로토콜을 처리하는 기능이 작아
- TCP보다 데이터 처리가 빠르므로
- 데이터 전송 시간에 민감한 응용 환경에서는 UDP를 사용하는 것이 유리
UDP 서비스
- 포트 번호 기반 다중화 서비스
- 서버 포트: well-known port
- 클라이언트 포트: Ephemeral port
- 비 연결형 전송 서비스
- 소켓 연결 설정이 없다.
- UDP(IP:Port) <---> 서버 UDP(IP:Port)
- 실시간 데이터그램 전송 서비스
- 각 데이터그램은 독립적으로 목적지 UDP 소켓으로 전송
응용 분야
- 인터넷 전화
- DNS: 크기가 작고 빠른 응답 필요
- 멀티캐스트: 1:N, N:1 데이터 그램 통신 서비스
UDP 헤더 구조
- Source Port/Destination Port
- 송수신 프로세스에 할당된 네트워크 포트 번호
- 프로세스 구분
- UDP 포트와 TCP 포트는 따로 관리된다.
- Length
- 프로토콜 헤더를 포함한 UDP 데이터그램의 전체 크기
- 바이트 단위, 최소값은 8 (헤더만 있을 때), 최대 크기는 2^16-1
- Checksum
- 프로토코 헤더와 데이터에 대한 체크섬 값을 제공
- Checksum = (16비트 단위 합)에 대한 1의 보수
UDP의 데이터그램 전송
- 비연결형 서비스를 이용하여 데이터그램을 전송
- 흐름 제어 기능이 없어 버퍼 오버플로에 의한 데이터 분실 오류가 발생할 수 있음
- 오류 유형
- 데이터 분실: 데이터가 목적지에 도착하지 못함
- 도착순서 변경: 데이터그램의 도착 순서가 변경
Transport layer checksum
방법
- 헤더 및 데이터를 16비트 단위로 분할
- 비트 합 (end-around-carry 적용)
- checksum = 비트 합에 대한 1의 보수
단점
- 변형된 데이터에 대한 checksum 값이
- 원본 checksum과 같으면 오류 검출 불가
TCP 프로토콜
TCP 주요 기능
- 연결형 서비스를 제공
- 전이중(Full Duplex) 방식의 양방향 가상 회선을 제공
- 신뢰성 있는 데이터 전송을 보장
- TCP는 데이터를 세그먼트라는 블록단위로 분할해 전송
TCP 헤더 구조
- Source Port/Destination Port(송신 포트/수신 포트)
- TCP로 연결되는 가상 회선 양단의 송수신 프로세스에 할당된 네트워크 포트 주소
- TCP, UDP가 별도의 주소 공간을 갖기 때문에 같은 번호를 사용할 수 있다.
- Source Port: 프로세스가 선택
- Destination Port: 서비스 프로세스 번호
- Sequence Number(순서 번호)
- 송신 프로세스가 지정하는 순서번호
- 세그먼트로 전송되는 바이트 수를 기준으로 증가
- 최초 데이터를 전송할 때는 임의의 순서번호 선택
- Acknowledgement Number(응답 번호)
- 수신 프로세스가 제대로 수신한 바이트 수
- ACK 비트가 세트되었을 때 유효
- ACK 응답을 받은 송신 프로세스는 수신 프로세스가 (Seq.No ~ SeqNo-1)을 올바로 수신했음을 알 수 있다.
- Data Offest
- TCP 세그먼트가 시작되는 위치를 기준으로 데이터 시작 위치
- TCP 헤더의 크기
- Reserved: 예약 필드
- Window
- 흐름 제어용
- 슬라이딩 윈도우 프로토콜에서 수신 윈도우의 크기 지정(수신 프로세스가 수신할 수 있는 바이트 수)
- 0이면, 수신 프로세스가 데이터를 받을 수 없다는 의미
- Checksum
- TCP 세그먼트에 포함되는 프로토콜 헤더와 데이터 모두에 대한 변형 오류를 검출하려고 사용
- Urgent Pointer(긴급 포인터)
- URG 플래그 비트가 세트되었을 때 유효
- ex) SeqNo =2000, Urgent Pointer= 100일 때, 2000~2099 까지 긴급 처리
TCP 헤더의 플래그 비트
- URG
- TCP는 기본적으로 데이터를 FIFO 형태로 처리한다.
- 긴급 데이터 전송: 먼저 제공한 데이터보다 우선 전송하라
- Urgent Pointer로 긴급 데이터의 크기를 표시한다.
- ACK
- Acknowledgement Number 필드가 유효한지를 나타냄(Piggybacking)
- PSH
- 송신 측: 다른 데이터를 기다리지 말고, 바로 전송하라(즉각 반응)
- 수신 측: 현재 세그먼트에 포함된 데이터를 상위 계층에 즉시 전달한다.
- RST
- 연결 리셋(비정상 연결 끊기): 즉시 연결을 끊고자 할 때 사용한다.
- SYN
- 연결 설정 요구를 의미하는 플래그 비트
- 가상 회선 연결을 설정하는 과정에서 사용
- FIN
- 한쪽 프로세스에서 더는 전송할 데이터가 없어 연결을 종료하고 싶다는 의사 표시
- 양쪽 프로세스가 모두 FIN을 전송해야 연결 해제 완료
혼잡 제어
- ECN(Explict Congestion Notification) 기능
- 라우터가 송신 프로세스에 명시적으로 혼잡 발생을 알려주어 송신 프로세스 스스로 트래픽을 완화하는 기술
- ECE(Explict Congestion Notification Echo)
- ECN-Echo로도 약칭되며,
- 네트워크 트래픽이 많아질 때 라우터가 송신 프로세스에 명시적으로 혼잡을 알리려고 사용
- CWR(Congestion Window Reduced)
- ECE 비트를 수신한 송신 프로세스가 전송 윈도우 크기를 줄였음을 통지함
캡슐화
- IP 패킷 데이터 = {TCP 헤더, 상위 계층 데이터}
- IP 헤더에 캡슐화되어 데이터 링크 계층으로 보내짐
포트 번호
- TCP와 UDP가 상위 계층에 제공하는 주소 표현 방식
- Well-known 포트: 인터넷 환경에서 많이 사용하는 포트 번호
- FTP(데이터 채널): 20
- FTP(제어 채널): 21
- Telnet: 23
- SMTP: 25
- DNS: 53
- TFTP: 69
- HTTP: 80
- rlogin: 513
- rsh: 514
- portmap: 111
TCP 프로토콜을 이용한 데이터 전송
TCP 프로토콜
- 전이중 방식의 양방향 통신을 지원
- 전송 데이터와 응답 데이터를 함께 전송한느 피기배킹 기능을 사용
- 데이터 전송: 연결 설정 -> 데이터 전송 -> 연결 해제
연결 설정
- 3단계 설정(Three-Way Handshake) 방식
데이터 전송
- 슬라이딩 윈도우 프로토콜 사용
- 흐름 제어
- 수신 프로세스는 응답 세그먼트 헤더의 Window 필드로 자신이 받을 수 있는 데이터 양을 송신 프로세스에게 알려준다.
- 윈도우 필드
- 수신 프로세스: 자신이 받을 수 있는 데이터 양으로 설정
- 송신 프로세스: Window 크기 이상 데이터를 전송하지 않는다.
- 데이터 전송 오류
- TCP는 NAK를 사용하지 않는다.
- 송신 세그먼트에 대한 ACK가 일정시간 안에 도착하지 않으면 재전송한다.
연결 해제
- 4-way Hankshake (ACK, FIN을 동시에 전송 가능)
- 연결을 해제하고자 하는 쪽에서 FIN 플래그를 지정해 요구
- 양쪽 프로세스의 동의하에 진행됨
혼잡 제어
- ECN 기능: TCP 혼잡 제어
- 혼잡 제어 과정
- SYN, ACK, ECE 플래그를 지정하여 응답: ECN 기능 사용
- SYN, ACK 플래그만 지정하여 응답: ECN 기능 사용하지 않음
- ECN의 동작
- 수신 프로세스의 중개를 거쳐 간접적으로 송신 프로세스에 혼잡을 통지
- 혼잡을 인지한 라우터 다음의 라우터들이 ECN 기능을 반복적으로 수행하지 못하도록 함