Contents Introductions Motivation Scope Operation Header Format TCP

  • Slides: 41
Download presentation

Contents § Introductions – Motivation – Scope – Operation § Header Format – TCP

Contents § Introductions – Motivation – Scope – Operation § Header Format – TCP protocol header – Header fields § Terminology – – – Transmission Control Block (TCB) Send sequence variables Receive sequence variables Current segment variables Connection states Events § TCP connection state diagram 2

Contents § Sequence Numbers – Sequence number and acknowledgement – Sequence number space –

Contents § Sequence Numbers – Sequence number and acknowledgement – Sequence number space – Sequence number comparison – Initial Sequence Number (ISN) selection – Knowing when to keep quiet – The TCP quiet time concept § Establishing A Connection – Basic 3 -way handshake – Simultaneous connection synchronization – Recovery from old duplicate SYN – Half-open connections – Half-open connection discovery – Active side causes half-open connection discovery – Old duplicate SYN – Reset generation – States for reset – Reset processing 3

Contents § Closing A Connection – – Close operation case 1: Local user initiates

Contents § Closing A Connection – – Close operation case 1: Local user initiates the close case 2: TCP receives a FIN from the network case 3: Both users close simultaneously § Precedence and Security – Security/Compartment – Rejecting a connection – Sending security parameters § Data Communication – – Data transmission Retransmission timeout The communication of urgent information Managing the window § References 4

Header Format § TCP protocol header – TCP segment는 internet datagram으로 전송 – IP

Header Format § TCP protocol header – TCP segment는 internet datagram으로 전송 – IP header는 source, destination 주소를 비롯한 여러 가지 정보를 포함 – IP header 뒤에 TCP에 관련된 정보를 가진 header를 붙임 7

Header Format § Header Fields – Source Port (16 bits) ü Source port number

Header Format § Header Fields – Source Port (16 bits) ü Source port number – Destination Port (16 bits) ü Destination port number – Sequence Number (32 bits) ü Segment의 첫 번째 data octet의 sequence number ü ‘SYN’이 포함 된 경우는 예외 • SYN의 sequence number는 initial sequence number (ISN)이며 첫 번째 data octet은 ISN+1 – Acknowledge Number (32 bits) ü ACK control bit이 켜져 있는 경우 이 번호는 ack의 송신자가 다음 수신 할 sequence number를 나타냄 ü Connection이 맺어진 다음부터는 이 값을 항상 보냄 – Data Offset (4 bits) ü 32 bit word 단위로 나타낸 TCP header의 길이로 data가 시작되는 위치 를 가리킴 • TCP header의 길이는 항상 32 bit의 배수 8

Header Format § Header Fields – Reserved (6 bits) ü Reserved for future use

Header Format § Header Fields – Reserved (6 bits) ü Reserved for future use ü 항상 0으로 채움 – Control Bits (6 bits) ü ü ü URG: Urgent Pointer field를 사용 ACK: Acknowledgement Number field를 사용 PSH: Push Function을 사용 RST: Connection을 reset SYN: Sequence number를 동기화 FIN: 발신자는 보낼 data가 더 이상 없음 – Window (16 bits) ü 송신자가 받아줄 수 있는 data octet의 수 ü 수신되는 data octet은 ack number field에 들어 있는 sequence number의 octet 부터 시작되어야 함 – Checksum (16 bits) ü TCP header와 data 전체를 16 bit 단위로 1의 보수의 합을 구하고, 그 결과의 1의 보수를 checksum 값으로 사용 (실제 구현에서는 같은 결과를 만드는 더 간단한 code를 사용) ü 전체 octet 수가 홀수인 경우 0으로 padding하여 16 bit word를 맞춤 • Padding 된 octet은 checksum을 만드는 목적으로만 사용되고 실제로 전송 되지 는 않음 ü Checksum 계산에 들어가는 TCP header의 checksum field는 0으로 채우고 계산 9

Header Format § Header Fields – Checksum (16 bits) ü TCP header 앞에 96

Header Format § Header Fields – Checksum (16 bits) ü TCP header 앞에 96 bit pseudo header를 붙여 checksum을 계산 • Source Address, Destination Address, Protocol은 IP header로부터 가 져옴 • TCP Length는 header와 data의 길이를 더하여 계산 (pseudo header 길 이는 포함하지 않음) – Urgent Pointer (16 bits) ü Segment의 sequence number로부터의 offset ü 긴급히 처리 해야 하는 data의 뒤에 오는 octet의 sequence number 를 나타냄 • 즉, 이 segment에 포함된 data의 첫 번째 octet부터 urgent pointer 바 로 앞 octet까지가 긴급히 처리해야 하는 data ü URG control bit가 켜진 경우에만 사용 10

Terminology § Transmission Control Block (TCB) – TCP connection을 유지하는 데 필요한 정보들을 가지고

Terminology § Transmission Control Block (TCB) – TCP connection을 유지하는 데 필요한 정보들을 가지고 있는 (가상의) 저장 공간 ü Local & remote socket number, connection의 security와 precedence 정보, user 의 송신/수신 buffer pointer, 재전송 queue pointer, current segment pointer 등 을 포함 § Send Sequence Variables – – – SND. UNA - send unacknowledged SND. NXT - send next SND. WND - send window SND. UP - send urgent pointer SND. WL 1 - segment sequence number used for last window update SND. WL 2 - segment acknowledgment number used for last window update – ISS - initial send sequence number 12

Terminology § Receive Sequence Variables – RCV. NXT - receive next – RCV. WND

Terminology § Receive Sequence Variables – RCV. NXT - receive next – RCV. WND - receive window – RCV. UP - receive urgent pointer – IRS - initial receive sequence number § Current Segment Variables – SEG. SEQ - segment sequence number – SEG. ACK - segment acknowledgment number – SEG. LEN - segment length – SEG. WND - segment window – SEG. UP - segment urgent pointer – SEG. PRC - segment precedence value 13

Sequence Numbers § Sequence number and Acknowledgement – TCP connection을 통해 전달되는 모든 octet은

Sequence Numbers § Sequence number and Acknowledgement – TCP connection을 통해 전달되는 모든 octet은 sequence number를 가짐 – Cumulative ack를 사용 ü Sequence number X에 대한 ack는 X보다 작은 sequence number의 모든 octet들 을 받았음을 나타냄 (X는 포함하지 않음) § Sequence Number Space – Field의 길이가 32 bits이므로 0부터 232 -1까지의 범위를 가짐 ü Modulo 232 ü 232 -1 다음에는 0으로 되돌아 감 § Sequence number comparison – 수신된 ack가 전송 후 아직 ack를 받지 못한 sequence number 중에 있는가 ü SND. UNA < SEG. ACK =< SND. NXT – Segment에 포함된 모든 sequence number들이 ack를 받았는가 (재전송 queue에서 segment를 제거 하는 것과 같은 경우에 필요) – 수신된 segment의 sequence number가 올바른 범위 안에 있는가 (즉, segment가 receive window에 포함 되는가) ü RCV. NXT =< SEG. SEQ < RCV. NXT+RCV. WND ü RCV. NXT =< SEG. SEQ+SEG. LEN-1 < RCV. NXT+RCV. WND ü Segment length나 receive window size가 0인 경우에는 이에 대한 고려가 추가로 필요 17

Sequence Numbers § Initial Sequence Number (ISN) Selection – Connection 초기화를 위한 seq number

Sequence Numbers § Initial Sequence Number (ISN) Selection – Connection 초기화를 위한 seq number 동기화 ü Initial send sequence number (ISS)는 송신 TCP가 선택하고, initial receive sequence number (IRS)는 상대 TCP로부터 받음 ü SYN control bit을 가진 segment에 자신의 ISN을 실어 host 간에 교 환함으로써 seq number 동기화가 이루어짐 ü 각 host는 자신의 ISN을 전송하고 그에 대한 ack를 받아야 함 1) 2) 3) 4) A A --> <-<---> B B SYN ACK my sequence number is X your sequence number is X my sequence number is Y your sequence number is Y ü Step 2, 3는 하나의 message로 전송 가능하므로 3 개의 message 교 환을 통해 seq number 동기화가 완료 됨 (3 way handshake) ü 상대 host로부터 첫 번째 SYN을 수신 했을 때 거기 포함 된 seq number가 새로운 것인지 이전 connection의 segment가 늦게 도착 한 것인지 판단이 불가능하므로, 수신 된 seq number를 ack를 통해 상대방에게 재확인하는 3 way handshake이 필요 19

Establishing A Connection TCP B TCP A CLOSED SEQ=100 CTL= SYN LISTEN SYN-SENT 1

Establishing A Connection TCP B TCP A CLOSED SEQ=100 CTL= SYN LISTEN SYN-SENT 1 CTL=SYN, ACK SEQ=300 ACK=10 ESTABLISHED SYN-RECEIVED SEQ=101 ACK=30 1 CTL=ACK DATA ESTABLISHED § Basic 3 -way handshake – TCP A가 자신의 ISN이 100임을 알리는 SYN을 보냄 – TCP B가 상대의 SYN에 대한 ACK와 자신의 SYN을 보냄 ü ACK field는 다음 수신할 sequence가 101임을 표시함으로써 sequence 100인 SYN을 받았음을 확인함 – TCP A가 상대의 SYN에 대한 ACK를 보냄 – TCP A가 data 전송을 시작 ü ACK는 sequence space를 소비하지 않으므로 바로 앞의 ACK와 seq number가 같음 22

Establishing A Connection TCP A TCP B CLOSED SYN-SENT SYN-RECEIVED CLOSED N SEQ=300 CTL=SY

Establishing A Connection TCP A TCP B CLOSED SYN-SENT SYN-RECEIVED CLOSED N SEQ=300 CTL=SY SEQ=10 0 CTL= SYN SEQ=100 ACK=30 1 CTL=SYN, ACK SYN-SENT SYN-RECEIVED 1 CTL=SYN, ACK SEQ=300 ACK=10 ESTABLISHED SEQ=101 ACK=30 1 CTL=ACK ESTABLISHED § Simultaneous Connection Synchronization – 양 TCP 모두 CLOSED SYN-SENT SYN-RECEIVED ESTABLISHED의 순서를 거침 – SYN-SENT 상태에서 상대의 SYN을 받으면 이에 대한 ack를 전송 하고 SYN-RECEIVED 상태에서 자신의 SYN에 대한 ack를 계속 기 다림 § RFC 793에서는 위와 같이 정리하고 있으나, 최초 양쪽에서 SYN을 주고 받은 다음 단순히 각각 ack만 보냄으로써 위의 절차보다 간단하게 연결이 성립되는 case를 보여주고 있는 자료도 찾을 수 있음 23

Establishing A Connection TCP A CLOSED SYN-SENT SEQ TCP B SEQ =90 =1 00

Establishing A Connection TCP A CLOSED SYN-SENT SEQ TCP B SEQ =90 =1 00 CT L= LISTEN CTL SY =SY N CTL=SYN, ACK SEQ=300 ACK=91 N SYN-RECEIVED SEQ=91 CTL=RS T 1 CTL=SYN, ACK SEQ=400 ACK=10 ESTABLISHED LISTEN SYN-RECEIVED SEQ=101 ACK=40 1 CTL=ACK ESTABLISHED § Recovery from Old Duplicate SYN – LISTEN 상태인 TCP B에 TCP A가 이전에 송신한 duplicate SYN이 도착 ü TCP B는 이 SYN이 duplicate인지 정상인지 판단할 수 없음 – TCP B는 정상적으로 SYN, ACK로 응답 – TCP A는 TCP B가 전송한 ACK가 비정상임을 확인하고 RST를 전송 ü 이 때 seq number는 비정상 ACK에 맞춰 줌 – TCP A가 보낸 정상 SYN이 TCP B에 도착하면 이후 정상 연결 과정 수행 – TCP A의 정상 SYN이 RST보다 먼저 TCP B에 도착하면 TCP B도 RST를 전송 하면서 좀 더 복잡한 과정이 진행 24

Establishing A Connection TCP A (CRASH) CLOSED SYN-SENT SEQ=400 CTL= SYN 0 CTL=ACK SEQ=300

Establishing A Connection TCP A (CRASH) CLOSED SYN-SENT SEQ=400 CTL= SYN 0 CTL=ACK SEQ=300 ACK=10 (!!) SEQ=100 CTL=RS T SEQ=400 CTL= SYN § Half-Open Connection Discovery TCP B (send 300, receive 100) ESTABLISHED (? ? ) SYN-RECEIVED (abort!!) CLOSED – TCP B는 A로부터 받은 segment의 seq number(400)가 window 바깥에 있음 을 확인하고 자신이 다음 수신을 원하는 seq number를 알리는 ACK(100)를 전송 – TCP A는 수신한 ACK가 자신이 전송한 적 없는 seq number에 대한 ACK이며 현재 connection의 sync가 맞지 않음을 확인 – TCP A는 현재 connection이 half-open 상태임을 알고 RST를 전송하고 이를 수신한 TCP B는 connection을 abort 함 – TCP A는 새로운 connection 수립을 다시 시도하고 이후는 basic 3 -way handshake 과정을 따름 26

Establishing A Connection TCP A TCP B (CRASH) (? ? ) ACK 0 DATA=10

Establishing A Connection TCP A TCP B (CRASH) (? ? ) ACK 0 DATA=10 CTL= SEQ=300 ACK=10 (send 300, receive 100) ESTABLISHED SEQ=100 CTL=RS T (abort!!) § Active Side Causes Half-Open Connection Discovery – TCP A가 crash 된 후에 이를 모르는 TCP B가 data를 전송 – TCP A에게는 해당 connection이 존재하지 않으므로 RST 전송 – RST를 받은 TCP B는 connection abort 27

Establishing A Connection TCP A LISTEN (? ? ) TCP B SEQ =Z CTL

Establishing A Connection TCP A LISTEN (? ? ) TCP B SEQ =Z CTL LISTEN =SY 1 CTL=SYN, ACK SEQ=X ACK=Z+ N SYN-RECEIVED SEQ=Z+1 CTL=RS T (return to LISTEN!) LISTEN § Old Duplicate SYN – TCP A와 B 모두 SYN을 기다리는 LISTEN 상태 – 이전의 duplicate SYN을 수신한 TCP B가 그에 대한 SYN, ACK를 TCP A로 송신 – TCP A는 TCP B가 보낸 ACK가 올바르지 않음을 확인하고 RST를 전송 – TCP B는 RST를 받고 다시 LISTEN 상태로 돌아감 28

Establishing A Connection § States for Reset 2. Connection이 non-synchronized 상태 (LISTEN, SYN-SENT, SYNRECEIVED)에

Establishing A Connection § States for Reset 2. Connection이 non-synchronized 상태 (LISTEN, SYN-SENT, SYNRECEIVED)에 있을 때 ü 다음과 같은 segment를 수신하는 경우 reset을 전송 • 수신 segment의 ack가 아직 보내지 않은 seq number에 대한 것일 때 • 현재 connection의 security level, 또는 compartment와 일치하지 않는 segment 를 수신했을 때 ü ü 송신한 SYN에 대한 ack가 아직 오지 않았고, 수신 된 segment의 precedence level이 요청된 precedence level보다 높은 경우 • (TCP user와 system에서 허용 된다면) local precedence level을 높이거나 • Reset을 송신 송신한 SYN에 대한 ack가 아직 오지 않았고, 수신 된 segment의 precedence level이 요청된 precedence level보다 낮은 경우 • Precedence level이 일치하는 경우와 똑같이 동작 • 상대 TCP가 local TCP의 precedence에 맞도록 level을 올리지 못하는 경우 (다 음 수신 segment를 보고 판단) connection을 종료 송신한 SYN에 대한 ack가 도착한 경우(현재 수신 segment가 바로 그 ack인 경 우도 포함) • 수신 segment와 local의 precedence level이 정확히 일치 해야 함 • 일치하지 않는 경우 reset 전송 ü 수신 segment에 ACK field가 있는 경우 reset segment의 seq number는 이 ACK 를 사용 ü 수신 segment에 ACK field가 없는 경우에는 reset segment의 seq number는 0, ack number는 수신 seq number + 수신 data 길이로 함 ü 처리 후에 connection은 이전 상태를 유지 ü 30

Establishing A Connection § States for Reset 3. Connection이 synchronized 상태 (ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2,

Establishing A Connection § States for Reset 3. Connection이 synchronized 상태 (ESTABLISHED, FIN-WAIT-1, FIN-WAIT-2, CLOSE-WAIT, CLOSING, LAST-ACK, TIME-WAIT) 에 있을 때 ü 올바르지 않은 segment (seq number가 window를 벗어난 경우, ack number가 틀린 경우)를 수신했을 때 • • • ü ACK segment를 전송 ACK의 seq number는 현재 seq number, ack number는 수신되기를 기다리고 있는 다음 ack number Connection은 현재의 상태를 유지 수신 된 segment의 security level, compartment, precedence 중 하나가 요청된 level, compartment, precedence와 일치하지 않는 경우에 reset을 전송 • • Connection은 CLOSED 상태로 넘어 감 Reset segment의 seq number는 수신 segment의 ack number를 사 용 31

Closing A Connection TCP A ESTABLISHED (Close) FIN-WAIT-1 TCP B ESTABLISHED SEQ=100 AC K=300

Closing A Connection TCP A ESTABLISHED (Close) FIN-WAIT-1 TCP B ESTABLISHED SEQ=100 AC K=300 CTL=FI N, ACK 1 CTL=ACK SEQ=300 ACK=10 FIN-WAIT-2 TIME-WAIT (2 MSL) CLOSED 1 CTL=FIN, ACK SEQ=300 ACK=10 CLOSING TIME-WAIT (2 MSL) CLOSED (Close) LAST-ACK SEQ=101 ACK=30 1 CTL=ACK CLOSED Normal Close Sequence TCP A ESTABLISHED (Close) FIN-WAIT-1 CLOSE-WAIT TCP B ESTABLISHED 0 CTL=FIN, ACK (Close) SEQ=300 ACK=10 SEQ=1 00 AC K=300 CTL=F IN, ACK CLOSING 1 CTL=ACK SEQ=301 ACK=10 SEQ=1 01 AC K=301 CTL=A CK Simultaneous Close Sequence 35 TIME-WAIT (2 MSL) CLOSED

Precedence and Security § 이 페이지의 내용은 RFC 793에 정의 되어 있으나 이 기능을

Precedence and Security § 이 페이지의 내용은 RFC 793에 정의 되어 있으나 이 기능을 실질적으로 담당하는 IP에서 해당 기능을 현재 거의 사용하지 않고 있으므로 현실적으로는 의미 없는 내용임 § Security/Compartment – Security와 compartment 값이 정확히 일치하는 포트들 사이에서만 connection을 허용 – 두 port들 간에 요청된 level 보다 높은 precedence를 사용 – TCP의 precedence와 security parameter들은 IP의 그것을 그대로 사용 ü TCP spec. (RFC 793)의 “security/compartment”라는 단어는 IP에서 사용되는 security parameter들을 나타냄 (security, compartment, user group, handling restriction 등) § Rejecting a connection – Security/compartment 값이 맞지 않거나 precedence 값이 낮은 연결 요청은 모두 reset을 보냄으로써 거부 – 너무 낮은 precedence로 인한 연결 거부는 SYN에 대한 ack가 도착한 뒤에만 이루어질 수 있음 § Sending security parameters – Non-secure network에서도 security parameter가 전송 될 수 있음 ü 그러므로 non-secure network에 있는 host라도 security parameter를 수신할 수 있어야 함 ü Security parameter의 송신을 반드시 해야 할 필요는 없음 36

Data Communication § Retransmission Timeout – Retransmission timeout의 결정 ü Internetwork을 이루는 network의 종류가

Data Communication § Retransmission Timeout – Retransmission timeout의 결정 ü Internetwork을 이루는 network의 종류가 다양하며, TCP가 활용되는 영역도 매우 넓으므로 이를 고려하여 동적으로 결정 § The Communication of Urgent Information – TCP urgent mechanism의 목적 ü 송신 user가 수신 user에게 일반 data와 다른 urgent data를 전달 할 수 있게 함 ü 모든 urgent data가 수신 user에게 전달 되면 수신 TCP가 이를 수신 user에게 알 릴 수 있게 함 – “End of urgent information” pointer ü 수신 TCP는 이 pointer가 receive seq number (RCV. NXT)보다 뒤에 있는 것을 확 인하면 user가 “urgent mode”로 들어가도록 통보 ü 수신 seq number가 이 pointer에 다다르면 수신 TCP는 user에게 “normal mode” 로 돌아오도록 알림 ü User가 “urgent mode”에 있는 동안 이 pointer가 update 되어도 user에게는 이 사실을 알릴 필요 없음 – Urgent field ü TCP header의 URG control flag이 켜져 있으면 segment seq number와 urgent field의 값을 더해 urgent pointer의 값을 계산 ü URG flag이 켜져 있지 않으면 urgent data가 없음을 나타냄 – Push function과 함께 사용되면 urgent data를 더욱 정확히 전달할 수 있음 38

References § RFC 793: TRANSMISSION CONTROL PROTOCOL – IETF – Sep. 1981 § TCP/IP

References § RFC 793: TRANSMISSION CONTROL PROTOCOL – IETF – Sep. 1981 § TCP/IP 완벽 가이드 (일부) – Charles M. Kozierok – 에이콘 출판 (국내 번역판) – 2006년 1월 41