Transmission Control Protocol (TCP) Chapter 12 Transmission Control Protocol (TCP)
CONTENTS PROCESS-TO-PROCESS COMMUNICATION TCP SERVICES NUMBERING BYTES FLOW CONTROL SILLY WINDOW SYNDROME ERROR CONTROL TCP TIMERS
CONTENTS (continued) CONGESTION CONTROL SEGMENT OPTIONS CHECKSUM CONNECTION STATE TRANSITION DIAGRAM TCP OERATION TCP PACKAGE
TCP/IP 프로토콜에서 TCP의 위치
전송 계층(TCP)이 제공하는 기능 프로세스간 통신 개설(포트 번호 이용) 전송 단계에서 흐름 제어 메커니즘 제공(슬라이딩 윈도우 프로토콜 이용) 전송 단계에서 오류 제어 메커니즘 제공(응답 패킷, 시간-초과, 재전송 방식 이용) 연결 지향의 신뢰성 있는 프로토콜
12.1 PROCESS TO COMMUNICATION
12.1 프로세스간 통신 TCP-대-IP
12.1 프로세스간 통신 클라이언트/서버 통신에 필요한 사항 로컬 클라이언트 프로그램 원격 서버 프로그램 로컬 호스트 원격 호스트 포트번호 IP 주소
12.1 프로세스간 통신 포트 번호
12.1 프로세스간 통신 TCP에서 사용되는 잘 알려진 포트 Port Protocol Description 7 Echo Echoes a received datagram back to the sender 9 Discard Discards any datagram that is received 11 Users Active users 13 Daytime Returns the data and the time 17 Quote Returns a quote of the day 19 Chargen Return a string of characters 20 FTP, Data File Transfer Protocol (data connection) 21 FTP, Control File Transfer Protocol (control connection) 23 TELNET Terminal Network 25 SMTP Simple Mail Transfer Protocol 53 DNS Domain Name Server 67 BOOTP Bootstrap protocol 79 Finger 80 HTTP Hypertext Transfer Protocol 111 RPC Remote Procedure Call
12.1 프로세스간 통신 소켓 주소 IP 주소와 포트 번호의 조합 종단간 연결 설정에 사용 클라이언트와 서버 소켓 주소 필요 IP 헤더(IP 주소)와 TCP 헤더(포트 번호)에 들어있음
12.2 TCP SERVICES
12.2 TCP 서비스 스트림 배달 서비스 전이중 서비스 연결 지향 서비스 신뢰성 서비스
12.2 TCP 서비스 스트림 배달
12.2 TCP 서비스 스트림 배달 서비스 송신 TCP 수신 TCP 송신 응용 프로그램으로부터 문자 스트림 수신(송신 버퍼 이용) 적절한 크기인 세그먼트를 만들어 네트워크를 통하여 전송 수신 TCP 세그먼트를 수신(수신 버퍼 이용) 데이터를 추출하여 문자 스트림으로 수신 응용 프로그램에 전달
12.2 TCP 서비스 송신 버퍼와 수신 버퍼
12.2 TCP 서비스 TCP 세그먼트
12.2 TCP 서비스 전이중 서비스 연결-지향 서비스 신뢰성 서비스 동시에 양방향 전송 송신 데이터와 수신 데이터에 대한 확인 응답을 함께 보내는 피기백킹(piggybacking) 연결-지향 서비스 TCP는 연결지향 프로토콜 물리적 연결이 아닌 가상의 연결 요청→승인 → 데이터 교환 → 해제 순으로 진행 신뢰성 서비스 확인 응답 메커니즘 이용
12.3 NUMBERING BYTES
12.3 바이트 순서 각 방향으로 전송되는 바이트는 TCP에 의해서 번호가 매겨진다. 번호는 임의의 값에서 시작한다.
12.3 바이트 순서 Example 1 TCP 연결이 6,000 바이트의 파일을 전송한다고 가정해보자. 첫 번째 바이트는 10010 번호를 가지고 있다. 만일 처음 네 개의 세그먼트는 1,000 바이트를 운반하고 마지막 세그먼트는 2,000 바이트를 운반하는 다섯 개의 세그먼트로 데이터가 전송된다면, 각 세그먼트의 순서 번호는 어떻게 되는가?
12.3 바이트 순서 Solution 세그먼트 3 순서번호 12,010 (범위 : 12,010 에서 13,009) 다음은 각 세그먼트의 순서 번호를 보여준다. 세그먼트 1 순서번호 10,010 (범위 : 10,010 에서 11,009) 세그먼트 2 순서번호 11,010 (범위 : 11,010 에서 12,009) 세그먼트 3 순서번호 12,010 (범위 : 12,010 에서 13,009) 세그먼트 4 순서번호 13,010 (범위 : 13,010 에서 14,009) 세그먼트 5 순서번호 14,010 (범위 : 14,010 에서 16,009)
12.3 바이트 순서 순서번호 확인응답번호 세그먼트 내의 순서번호 필드의 값은 그 세그먼트에 포함되는 첫 번째 데이터 바이트의 번호를 나타낸다. 세그먼트 내의 확인응답 번호의 값은 수신하기를 기대하는 다음 바이트의 번호를 나타낸다. 확인응답 번호는 누적된다.
12.4 FLOW CONTROL
12.4 흐름제어 슬라이딩 윈도우는 좀 더 효율적으로 전송을 하고 또한 목적지에서 데이터가 슬라이딩 윈도우 프로토콜 슬라이딩 윈도우는 좀 더 효율적으로 전송을 하고 또한 목적지에서 데이터가 넘치지 않도록 데이터의 흐름을 조절하기 위하여 사용된다. TCP 슬라이딩 윈도우는 바이트 단위이다.
12.4 흐름제어 송신자 버퍼
12.4 흐름제어 수신자 버퍼
12.4 흐름제어 송신자 버퍼와 송신자 윈도우
12.4 흐름제어 송신자 윈도우 슬라이딩
12.4 흐름제어 송신자 윈도우 확장 수신 프로세스가 수신속도보다 빠르게 데이터를 처리
12.4 흐름제어 송신자 윈도우 수축(Shrinking) 수신 프로세스가 수신 속도보다 느리게 데이터 처리
12.4 흐름제어 TCP에서 송신윈도우 크기는 전적으로 수신윈도우의 크기(수신 버퍼에 있는 빈 공간의 수)로 조절된다. 그렇지만, 실제의 윈도우의 크기는 망에 혼잡현상이 발생하면 더 작아질 수 있다.
12.4 흐름제어 TCP의 슬라이딩 윈도우에 대한 사항 1. 발신지는 전체 윈도우 크기에 해당하는 데이터를 전송할 필요는 없다. 2. 윈도우 크기는 목적지에 의해서 증가되거나 감소한다. 3. 목적지는 언제든지 확인 세그먼트를 전송 할 수 있다.
12.5 SILLY WINDOW SYNDROME
12.5 silly 윈도우 신드롬 silly 윈도우 신드롬 송신측에서 발생하는 신드롬 전송/수신 응용 프로그램이 데이터를 천천히 생성하거나 천천히 처리할 때 발생 예 : 1 바이트 데이터 + 20 바이트 TCP 헤더 + 20 바이트 IP 헤더 송신측에서 발생하는 신드롬 가능한 한 바이트 데이터를 전송하지 못하게 함 데이터를 취합하여 큰 블록 데이터로 만들어 전송 Nagle 알고리즘 적용 : 송신 TCP에서 실행하는 알고리즘
12.5 silly 윈도우 신드롬 Nagle 알고리즘 송신 TCP는 응용 프로그램으로부터 수신한 첫 데이터를 세그먼트로 만들어 전송한다. 첫 번째 세그먼트를 전송한 후 송신 TCP는 수신 TCP로부터 확인 응답을 수신하거나 최대 크기의 세그먼트를 구성할 정도로 데이터가 출력버퍼에 저장되면 세그먼트를 전송한다. 2번째 단계를 계속 반복한다.
12.5 silly 윈도우 신드롬 수신측에서 발생하는 신드롬 Clark 해결 방법 : 충분한 공간이 생기거나 적어도 버퍼가 반 이상 비어있을 때까지 윈도우 크기를 0 으로 통일 확인 응답 송신 지연 : 수신 버퍼가 충분한 공간이 생길 때까지 확인 응답 보류
12.6 ERROR CONTROL
12.6 오류 제어 오류 감지 메커니즘 훼손 세그먼트 손실 세그먼트 순서가 어긋난 세그먼트 중복 세그먼트 오류 정정 메커니즘
12.6 오류 제어 오류 발견과 정정 오류 발견 도구 : 검사합, 확인응답, 시간-초과 세그먼트의 검사합 필드 이용 훼손 여부 확인 수신을 송신측에 알려주는 확인응답 이용 시간-초과 전까지 확인응답 되지 않으면 훼손 또는 손실 간주 오류 정정 : 시간-초과 카운터 이용 - 재전송
12.6 오류 제어 훼손 세그먼트
12.6 오류 제어 손실 세그먼트
12.6 오류 제어 중복 세그먼트 순서가 잘못된 세그먼트 시간-초과 이전에 확인응답이 도착하지 않는 송신 같은 순서번호를 가진 세그먼트는 폐기 순서가 잘못된 세그먼트 데이터그램의 서로 다른 경로를 통한 전달로 인하여 발생 이전의 세그먼트로 모두 수신하기까지 확인응답을 전송하지 않음 시간-초과가 발생하면 세그먼트가 재전송 됨
12.6 오류 제어 확인응답 손실
12.7 TCP TIMERS
12.7 TCP 타이머 TCP 타이머
12.7 TCP 타이머 재전송 타이머(retransmission timer) 재전송 시간 : 세그먼트 전송 후 확인응답을 기다리는 시간 타이머가 끝나기 전 확인응답이 수신되면 타이머 소멸 확인응답이 수신되기 전 타이머가 종료되면 해당 세그먼트는 재전송되고 타이머 초기화 재전송 시간 = 2 * RTT(round-trip time)
12.7 TCP 타이머 Karn 알고리즘 영속 타이머(persistence timer) 전송된 세그먼트에 대해 확인 응답되지 않아 재전송된 경우 이전 세그먼트에 대한 확인응답인지 재전송에 대한 확인응답인지 여부 판단이 애매하다 RTT 값은 재전송 없이 확인응답 수신 전까지 변동이 없음 영속 타이머(persistence timer) 윈도우 크기가 0 인 경우를 처리하기 위한 타이머 수신 TCP가 윈도우 크기 0 을 통보했는데, 송신 TCP가 이에 대한 확인응답을 보냈지만 수신 TCP가 이를 수신하지 못함 양쪽 TCP가 서로 기다리는 교착상태(deadlock) 해결
12.7 TCP 타이머 Keepalive 타이머 시간-대기 타이머(time-waited timer) 두 TCP 간에 설정된 연결이 오랫동안 휴지(idle) 상태에 있는 것을 방지하기 위한 타이머 시간-종료 : 2 시간 2 시간이 지나도록 세그먼트를 수신하지 못하면 75초 간격으로 10 개의 프루브(probe) 전송 응답이 없으면 다운으로 간주하고 연결 종료 시간-대기 타이머(time-waited timer) 연결 종료 동안에 사용
12.8 CONGESTION CONTROL
TCP는 손실 세그먼트의 원인이 망의 혼잡에 기인한 것이라고 가정한다. 12.8 혼잡제어 혼잡(Congestion) 현상 라우터가 패킷을 처리할 수 있는 속도보다 더 빨리 패킷을 수신하는 경우 발생 TCP는 손실 세그먼트의 원인이 망의 혼잡에 기인한 것이라고 가정한다.
12.8 혼잡제어 혼잡 윈도우 혼잡회피 실제 윈도우 크기 = 최소(수신측에서 알려주는 윈도우 크기, 혼잡 윈도우 크기) 느린 시작 : 임계치 설정(최대 윈도우 크기의 반), 임계치에 도달할 때까지 확인응답이 도착하면 지수형태로 윈도우 크기를 증가 가산증가 : 임계치까지 도달하면, 확인응답이 도착하면 혼잡 윈도우 크기를 하나씩 증가 지수 감소 : 혼잡이 발생하면 임계치를 현재 윈도우 크기의 반으로 줄여서 느린 시작을 수행
만일 손실 세그먼트의 이유가 혼잡 때문이라면, 세그먼트의 재전송은 원인을 제거하는 것이라기 보다는 더욱 악화시킨다. 12.8 혼잡제어 만일 손실 세그먼트의 이유가 혼잡 때문이라면, 세그먼트의 재전송은 원인을 제거하는 것이라기 보다는 더욱 악화시킨다.
12.8 혼잡제어 지수적(Multiplicative) 증가
12.1 프로세스간 통신(계속) 혼잡회피 전략
12.9 SEGMENT
12.9 TCP 세그먼트 TCP 세그먼트 형태 TCP를 이용하여 두 개의 장치간에 전달되는 데이터 단위
12.3 세그먼트 세그먼트 발신지 포트 번호(source port address) : 전송 호스트 응용 프로그램의 포트 번호 목적지 포트 번호(destination port address) : 수신 호스트 응용 프로그램의 포트 번호 순서 번호(sequence number) : 세그먼트에 포함된 데이터의 첫번째 바이트에 부여된 번호 확인 응답 번호(acknowledgement number) : 상대방 노드로부터 수신하고자 하는 바이트의 번호 헤더길이(header length) : TCP 헤더 길이의 4바이트 워드 값 제어(control) : 제어 또는 플래그
12.9 세그먼트 제어 필드
12.9 세그먼트 세그먼트(계속) 윈도우 크기(window size) : 상대방이 유지해야 하는 바이트 단위의 윈도우 크기 검사합(checksum) : 오류 제어 긴급 포인터(urgent pointer) : 긴급 데이터 옵션(option) : 옵션 정보
12.10 OPTIONS
12.10 옵션 옵션
12.10 옵션 옵션-끝(end of option) 맨 끝에 패딩을 위해 사용되는 한 바이트 옵션
12.10 옵션 무 동작(no operation) 맨 끝에 패딩을 위해 사용되는 한 바이트 옵션
12.10 옵션 최대 세그먼트 크기(maximum segment size : MSS) 목적지에서 수신할 수 있는 데이터 세그먼트의 최대 크기 연결 설정 단계 중에 목적지에 의해 결정
12.10 옵션 윈도우 확장 인자 윈도우 크기를 증가시키기 위해 사용 최대 설정값 : 16 새로운 윈도우 크기 = 헤더에서 정의된 윈도우 크기 Χ2 윈도우확장인자 최대 설정값 : 16 최대 윈도우 크기 : 216Χ216=232(순서번호 값과 동일)
12.10 옵션 타임 스탬프(timestamp) 10바이트 길이 옵션 왕복시간(round-trip time) 계산에 사용
12.11 CHECKSUM
12.11 검사합 의사 헤더를 TCP 데이터그램에 추가
12.12 CONNECTION
12.12 연결 TCP : 연결-지향 프로토콜 발신지와 목적지 간에 가상 경로 설정 연결 설정과 연결 종료를 통하여 이루어짐
12.12 연결 연결 설정 4 단계 수행 호스트 A는 호스트 B에게 연결 설정 세그먼트를 전송(초기화 정보) 호스트 B는 호스트 A에게 확인응답 세그먼트 전송 호스트 B는 호스트 A에게 초기화 정보 세그먼트 전송 호스트 A는 호스트 B에게 확인응답 세그먼트 전송
12.12 연결 3 단계 핸드쉐이크(three-way handshaking)
12.12 연결 연결 종료 호스트 A는 연결 종료를 알리고 세그먼트 전송 호스트 B는 A의 요구에 대해 확인 응답하는 세그먼트 전송 호스트 B는 연결 종료를 알리는 세그먼트 전송 호스트 A는 B의 요구에 대해 확인응답
12.12 연결 4단계 핸드쉐이크(Four-way handshaking)
12.13 STATE TRANSITION DIAGRAM
12.13 상태 천이 다이어그램 유한 상태 기기(finite state machine) 이용 구현 TCP 상태 State Description CLOSED There is no connection LISTEN The server is waiting for calls from the client SYN-SENT A connection request is sent; waiting for acknowledgment SYN-RCVD A connection request is received ESTABLISHED Connection is established FIN-WAIT-1 The application has requested the closing of the connection FIN-WAIT-2 The other side has accepted the closing of the connection CLOSING Both sides have decided to close simultaneously TIME-WAIT Waiting for retransmitted segments to die CLOSE-WAIT The server is waiting for the application to close LAST-ACK The server is waiting for the last acknowledgement
12.13 상태 천이 다이어그램 상태 천이 다이어그램
12.13 상대 천이 다이어그램 상태 천이 다이어그램 상태(state) : 타원형 한 상태에서 다른 상태로의 천이 : 지시선 사선으로 나누어지는 두 개의 문자열 첫번째 열 : TCP가 수신하는 입력 두번째 열 : TCP가 전송하는 출력 점선 : 서버 실선 : 클라이언트 가는선 : 비 정상적인 상황
12.13 상태 천이 다이어그램 클라이언트 상태
12.13 상태 천이 다이어그램 서버 상태
12.14 TCP OPERATION
12.14 TCP 동작 캡슐화와 역 캡슐화
12.14 TCP 동작 다중화와 역 다중화
12.15 TCP PACKAGE
12.15 TCP 설계 전송 제어 블록(TCB : Transmission Control Block) 타이머(Timer) 메인 모듈(Main Module) 입력 프로세스 모듈(Input Process Module) 출력 프로세스 모듈(Output Process Module)
12.15 TCP 설계 TCP 설계
12.15 TCP 설계 전송 제어 블록(TCB) 연결 제어에 대한 정보 보관
12.15 TCP 설계 전송 제어 블록(TCB) 상태(state) 프로세스(process) 로컬 IP 주소 로컬 포트 번호 원격지 포트 번호 인터페이스 로컬 윈도우
12.15 TCP 설계 전송 제어 블록(TCB)(계속) 원격지 윈도우 송신순서번호 수신순서번호 왕복(round-trip)시간 시간 초과 값 버퍼 크기 버퍼 포인터
12.15 TCP 설계 타이머 메인 모듈 입력 처리 모듈 출력 처리 모듈 TCP 동작을 처리하기 위한 여러 가지 타이머 시간-초과 이벤트 발생 응용 프로그램으로부터 메시지가 들어오는 경우 입력 처리 모듈 연결 설정 상태에서 수신하는 데이터나 확인응답을 처리하기 위해 필요한 기능담당 출력 처리 모듈 연결 설정 상태에서 응용 프로그램으로부터 수신한 데이터를 전송하기 위해 필요한 기능 담당