TCPIP 18 TCPIP Computer Network Lab 1 18
TCP/IP 통신망 특론 제 18장 TCP/IP 연결 확립과 종료 Computer Network Lab. 1
18. 1 개요 q TCP는 연결형 프로토콜 : 종단이 서로 데이터를 송신하기 전에 이들 사이에 연결을 확립 q 이장은 연결의 확립 및 종료의 절차 18. 2 연결 확립과 종료 svr 4 % telnet bsdi discard Trying 192. 82. 148. 3 Connect to bsdi. Escape character is ‘^]’ ^] Discard service 서버는 클라이언트가 1 0. 0 보낸 모든 데이터를 무시한다. 2 0. 002402(0. 0024) 포트번호 : 7 telnet >quit Connection closed. 3 0. 007224(0. 0048) q 발신지(source) > 목적지(destination): 플래그(flag) 플래그 3문자 약어 S F R P. SYN FIN RST PSH 설명 순서번호의 동기 송신자는 데이터 송신을 종료 연결의 재설정 수신 프로세스가 가능한 빨리 데이터를 보낸다 위의 4개의 플래그가 설정된 것이 없다 Computer Network Lab. Tcpdump 출력 4 4. 155441(4. 1482) 5 4. 156747(0. 0013) 6 4. 158144(0. 0014) 7 4. 180662(0. 0225) svr 4. 1037 > bsdi. discard: S 1415531521 : 1415531521 (0) win 4096 <mss 1024> bsdi. discard > svr 4. 1037 : S 1823083521 : 1823083521 (0) ack 1415531522 win 4096 <mss 1024> svr 4. 1037 > bsdi. discard: . ack 1823083522 win 4096 svr 4. 1037 > bsdi. discard: F 1415531522 : 1415531522 (0) ack 1823083522 win 4096 bsdi. discard > svr 4. 1037. ack 1415531523 win 4096 bsdi. discard > svr 4. 1037 F 1823083522: 1823083522 (0) ack 1415531523 win 4096 svr 4. 1037 > bsdi. discard: . ack 182308353 win 4096 3
svr 4. 1037 0. 0 세그먼트 1 bsdi. discard SYN 1415531521 : 1415531521 (0) SYN 1823083521 : 1823083521 ack 1415531522, <mss 1024> 0. 002402(0. 0024) 0. 007224(0. 0048) 4. 155441(4. 1482) 세그먼트 2 세그먼트 3 세그먼트 4 ack 1823083522 FIN 1415531522 : 1415531522 (0) ack 1823083522 세그먼트 5 ack 1415531523 4. 156747(0. 0013) 4. 158144(0. 0014) 4. 180662(0. 0225) 세그먼트 7 세그먼트 6 FIN 1823083522 : 1823083522 (0) ack 1415531523 ack 1823083523 세그먼트 7 연결 확립과 종료의 타임 라인 Computer Network Lab. 4
8. 6 TCP 상태 천이도 시작점 CLOSED Appl : passive open Send : <아무것도 보내지 않는다> rev : ; SYN ST : R recv SYN-RCVD Send : <아 rec v 무것 도보 능동적 종료 recv : ACK send : <nothing> FIN-WAIT-2 : A CK recv : send FIN, AC K : AC K recv : FIN send : ACK LISTEN 수동적 개방 recv : SYN send : SYN, ACK 동시 개방 내지 않는 다 e > s o l c : appl FIN : d n se appl : close send : FIN-WAIT-1 ACK N, : SY send ESTABLISHED ap se pl : nd ac : S tiv YN e o pe app n l sen : s d : end SY da N ta CK N, A Y : S K recv : AC end recvs : FIN send : ACK 데이터 전송상태 동시종료 SYN-SENT 능동적 개방 CLOSE-WAIT appl : close send : FIN CLOSING recv : ACK send : <nothing> appl : close 또는 timeout LAST-ACK recv : ACK send : <아무것도 보내지않는다> 수동적 종료 TIME-WAIT 2 MSL timeout 클라이언트에 대한 정상적인 천이를 가리킴 서버의 대한 정상적인 천이를 가리킴 appl : 응용이 여기에 나타난 동작을 발행할 땡 일어나는 상태 천이를 가리킴 recv : 세그먼트를 수신할 때 취해지는 상태천이를 가리킴 send : 이 천이를 대해 보내지는 것 Computer Network Lab. 10
클라이언트 SYN-SENT 능동적 개방 서버 SYN J LISTEN 수동적 개방 SYN_RCVD SYN K, ack J+1 ESTABLISHED ack K+1 FIN_WAIT_1 능동적 종료 FIN M ack M+1 FIN _WAIT_2 TIME _WAIT ESTABLISHED CLOSE-WAIT 수동적 종료 LAST-ACK FIN N ack N+1 CLOSED 일반적인 연결 확립과 종료에 대한 TCP 상태 Computer Network Lab. 12
F 일반적으로 TIME_WAIT 상태는 client가 갖으나 server에서도 적용 - 만일 커넥션이 설정되어진 서버에서 connection을 제거하고 곧 이어 재시작을 시도할 경우 그 서버는 자신의 end point를 할당할 수 없게 됨 - 그 port 번호가 2 MSL wait 상태에 존재하는 connection의 일부분이기 때문 (서버의 재시작 시간은 1에서 4분 정도 소요) 예) 먼저 서버를 동작시키고 클라이언트로 이를 연결한 후 서버를 종료 sun % sock v -s 6666 connection on from 140. 252. 13. 35. 1081 to 140. 252. 13. 6666 ^? 클아이언트의 1081포트로 접속 sun % sock -s 6666 Can’t bind local address : Address already in use sun % netstat Active Internet connections Proto Recv-Q Send-Q Local Address tcp 0 0 sun. 6666 Computer Network Lab. Foreign Address bsdi. 1081 (State) TIME_WAIT 14
예) 클라이언트가 2 MSL_WAIT 상태에서 연결을 재시도한 경우 sun % sock v bsdi echo connection on from 140. 252. 13. 33. 1162 to 140. 252. 13. 35. 7 Hello there ^D sun % sock -b 1162 bsdi echo Can’t bind local address already in use q FIN_WAIT_2 상태는 FIN을 보내고 상대편 종단은 이에 대한 ACK를 보내고 난 후 FIN이 되돌아 오기를 기다리는 상태이다. FIN이 오면 FIN_WAIT_2 상태에서 TIME_WAIT상태로 변한다. Computer Network Lab. 15
18. 7 재설정 세그먼트 q 재설정은 참조 연결에 대해서 정확하지 않는 세그먼트 도착할 때 발생한다. q 존재하지 않는 포트에 대한 연결 요구 연결요구가 도착할 때에 목적지 포트상에 프로세스가 대기하고 있지 않는 경우 예) 목적지에 사용되지 않는 포트번호를 지정하여 연결 bsdi % telnet svr 4 20000 Trying 140. 252. 13. 34 telnet : Unable to connect remote host : Connection refused 1 0. 0 2 0. 003771(0. 0038) bsdi. 1087 > svr 4. 20000 : S 297416193 : 297416193 (0) win 4096 <mss 1024> [tos 0 x 10] svr 4. 20000 > bsdi. 1087 : R 0 : 0 (0) ack 297416194 win 0 Computer Network Lab. 16
q 연결 중단 - 정규해제(ordinary release) : 상대편에 FIN 신호를 보내서 연결을 종료한다. FIN은 큐에 대기한 데이터를 모두 전송한 후에 전송되어 데이터에 대한 손실이 없다. - 중단해제(abortive release) : FIN 대신에 재설정(RST)을 전송하여 연결을 종료한다. q 연결 중단 동작방법 - 대기중인 데이터를 폐기하고 즉시 재설정 신호를 전송 - RST의 수신측은 상대방에게 일방적인 해제 대신에 중단이 행해 졌다는 정보를 전달 bsdi % sock -L 0 svr 4 8888 hello, world ^D 1 svr 4 % sock -s 8888 hello, world read error : connection reset by peer 3 bsdi. 1099 > svr 4. 8888 : S 671112193 : 671112193 (0) 1 -3 번 TCP 연결 확립 <mss 1024> 0. 004975(0. 0050) svr 4. 8888 > bsdi. 1099 : S 322495489 : 322495489 (0) ack 671112194 <mss 1024> 0. 006656(0. 0017) bsdi. 1099 > svr 4. 8888 : . ack 4 5 4. 833024(4. 8263) 5. 026224(0. 1932) bsdi. 1099 > svr 4. 8888 : P 1: 14(13) ack 1 svr 4. 8888 > bsdi. 1099 : . ack 14 4 -5 번 데이터의 전송 6 9. 527634(4. 5014) bsdi. 1099 > svr 4. 8888 : R 14 : 14 (0) ack 1 6 번 클라이언트를 종료하기 위한 EOF문자 2 0. 0 Computer Network Lab. 17
q 절반 개방 연결의 발견 F 절반 개방 - 상대방의 확인 없이 자신의 연결만을 종료 또는 중단 - 절반 개방을 통해 데이터 전송이 시도되지 않는 동안에는 아직 연결을 유지하고 있는 단말쪽에서 상대방의 충돌을 감지하지 못함 bsdi % telnet svr 4 discard Trying 140. 252. 13. 34 Connection to srv 4 Escape character is ‘^]’ hi there Another line Connection closed by foreign host 1 2 0. 004811(0. 0048) 3 0. 006516(0. 0017) bsdi. 1102 > srv 4. discard : S 1591752193 : 1591752193 (0) srv 4. discard > bsdi. 1102 : S 26368001 : 26368001 (0) ack 1591752194 bsdi. 1102 > srv 4. discard : . ack 1 1 -3 연결 확립 4 -5 hi there 데이터 전송 4 5 5. 167679(5. 1612) 5. 201662(0. 0340) bsdi. 1102 > srv 4. discard : p 1: 11 (10) ack 1 srv 4. discard > bsdi. 1102 : . ack 11 6 7 8 9 194. 909929 (189. 7083) 194. 914957(0. 0050) 194. 915678(0. 0007) 194. 918225(0. 0025) bsdi. 1102 > srv 4. discard : P 11: 25 (14) ack 1 arp who-has bsdi tell srv 4 arp reply bsdi is-at 0: 0: c 0: 6 f: 2 d: 40 sr 4. discard > bsdi. 1102 : R 26368002 : 26368002 (0) Computer Network Lab. 6 another line 데이터 전송 7 -8 arp 요구와 응답 9 재설정 18
bsdi % sock v b 8888 vangogh. cs. berkeley. edu 7777 Connected on 140. 252. 13. 35. 8888 to 128. 32. 130. 2. 7777 TCP_MAXSEG = 512 hello, world and hi there connection closed by peer 1 2 3 4 5 6 7 8 9 10 11 12 0. 0 0. 213782(0. 2138) 0. 215399(0. 0016) 0. 340405(0. 1250) 5. 633142(5. 2927) 6. 10036 (0. 4 672) 9. 640214(3. 5398) 9. 796417(0. 1562) 13. 060395(3. 2640) 13. 061828(0. 0014) 13. 079769(0. 0179) 13. 299940(0. 2202) vangogh % sock v b 7777 bsdi. tuc. nao. edu 8888 Connected on 128. 32. 130. 2. 7777 to 140. 252. 13. 35. 8888 TCP_MAXSEG = 512 hello, world and hi there ^D bsdi. 8888 > vangogh. 7777 : S 91904001 : 91904001 (0) win 4096 <mss 512> vangogh. 7777 > bsdi. 8888 : S 1058199041 : 1058199041 (0) bsdi. 8888 > vangogh. 7777 : S 91904001 : 91904001 (0) ack 1058199042 win 4096 <mss 512> vangogh. 7777 > bsdi. 8888 : S 1058199041 : 1058199041 (0) ack 91904002 win 8192 <mss 512> bsdi. 8888 > vangogh. 7777 : P 1: 14(13) ack vangogh. 7777 > bsdi. 8888 : . ack 14 win 8192 vangogh. 7777 > bsdi. 8888 : P 1: 14(13) ack 14 win 8192 bsdi. 8888 > vangogh. 7777 : . ack 14 win 4096 vangogh. 7777 > bsdi. 8888 : F 1: 14(0) ack 14 win 8192 bsdi. 8888 > vangogh. 7777 : . ack 15 win 4096 bsdi. 8888 > vangogh. 7777 : F 1: 14(0) ack 15 win 4096 vangogh. 7777 > bsdi. 8888 : . ack 15 win 8192 동시에 bsdi의 8888포트와 vangogh의 7777포트를 동시 개방을 실행 1 -4 5 -6 : bsdi로부터 vangogh로 전송되는 입력 데이터와 확인응답 7 -8 : vangogh로부터 bsdi로 전송되는 입력 데이터와 확인응답 9 -10 : 일반적인 연결 종료 Computer Network Lab. 20
Proto Recv-Q tcp 0 Send-Q 0 0 Local Address 140. 252. 13. 33. 23 *. 23 Foreign Address 140. 252. 13. 65. 1029 *. * (State) ESTABLISHED LISTEN 상태는 병행서버가 나중에 연결요구를 받아들이기 위해 이용되는 종단점 Proto Recv-Q tcp 0 Send-Q 0 0 Local Address 140. 252. 1. 29. 23 140. 252. 13. 33. 23 *. 23 Foreign Address 140. 252. 1. 32. 34603 140. 252. 13. 65. 1030 140. 252. 13. 65. 1029 *. * (State) ESTABLISHED LISTEN 멀티홈드 호스트 sun에 slip 링크의 인터페이스(140. 252. 1. 29)와 이더넷 (140. 252. 13. 33)에 연결 된 상황 q 로컬 IP 주소의 제한 서버가 로컬 IP주소를 와일드 카드로 하지 않는 경우 지정된 로컬 IP주소외에는 연결을 거부 Sun % sock -s 140. 252. 1. 29 8888 140. 252. 1. 29 IP로 연결을 제한 Proto Recv-Q Foreign Address tcp 0 Send-Q 0 Computer Network Lab. Local Address 140. 252. 1. 3. 29. 8888 *. * (State) LISTEN 24
bsdi % sock -s -v -q 1 -030 7777 bsdi는 서버로 동작 q 1옵션은 백로그값을 1로 설정 : 2개의 연결요구를 받을 수 있다. o 30옵션은 프로그램을 30초간 정지 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 0. 002310(0. 0023) 0. 003098(0. 0008) 4. 291007(4. 2879) 4. 293349(0. 0023) 4. 294167 (0. 0008) 7. 131981(3. 4248) 10. 556787(3. 4248) 12. 695916(2. 1391) 16. 195772(3. 4999) 24. 695571(8. 4998) 28. 195454(3. 4999) 28. 197810(0. 0024) 28. 198639(0. 0008) 48. 694931(20. 4963) 48. 697297(0. 0024) 48. 698145(0. 0009) sun. 1090 > bsdi. 7777 : S 1617152000 : 1617152000 (0) bsdi. 7777 > sun. 1090 : S 4164096001 : 4164096001(0) ack 1617152001 sun. 1090 > bsdi. 7777 : . ack sun. 1091 > bsdi. 7777 : S 1617152000 : 1617152000 (0) bsdi. 7777 > sun. 1091 : S 4164720001 : 4164720001(0) ack 1617792001 sun. 1091 > bsdi. 7777 : . ack 1 sun. 1092 > bsdi. 7777 : S 1618176000 : 1618176000 (0) sun. 1093 > bsdi. 7777 : S 1618688000 : 1618688000 (0) bsdi. 7777 > sun. 1093 : S 4167808001 : 4167808001 (0) ack 161868001 sun. 1093 > bsdi. 7777 : . ack 1 sun. 1092 > bsdi. 7777 : S 1618176000 : 1618176000 (0) bsdi. 7777 > sun. 1092 : S 4170496001 : 4170496001(0) ack 1618176001 sun. 1092 > bsdi. 7777 : . ack 1 -6 : 큐에 두개의 클라이언트를 받는다 7 -13 : 서버 응용이 중단중이므로 SYN를 무시하여 클라이언트에서 SYN가 재전송된다. 13 -17 : 30초가 지난 후에 SYN요구를 받아 들인다. Computer Network Lab. 27
- Slides: 28