1 / 28

제 18 장

제 18 장. TCP/IP 연결 확립과 종료. 목 차. 1. 개요 2. 연결 확립과 종료 3. 연결 확립의 타임아웃 4. 최대 세그먼트 크기 5. TCP 절반 종료 6. TCP 상태 천이도. 7. 재설정 세그먼트 8. 동시 개방 9. 동시 종료 10. TCP 옵션 11. TCP 서버 설계 12. 요약. 플래그. 3 문자 약어. 설명. S F R P. SYN FIN RST PSH. 순서번호의 동기 송신자는 데이터 송신을 종료 연결의 재설정

Download Presentation

제 18 장

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 제 18 장 TCP/IP 연결 확립과 종료

  2. 목 차 1. 개요 2. 연결 확립과 종료 3. 연결 확립의 타임아웃 4. 최대 세그먼트 크기 5. TCP 절반 종료 6. TCP 상태 천이도 7. 재설정 세그먼트 8. 동시 개방 9. 동시 종료 10. TCP 옵션 11. TCP 서버 설계 12. 요약

  3. 플래그 3문자 약어 설명 S F R P . SYN FIN RST PSH 순서번호의 동기 송신자는 데이터 송신을 종료 연결의 재설정 수신 프로세스가 가능한 빨리 데이터를 보낸다 위의 4개의 플래그가 설정된 것이 없다 18.1 개요 • TCP는 연결형 프로토콜 : 종단이 서로 데이터를 송신하기 전에 이들 사이에 연결을 확립 • 이장은 연결의 확립 및 종료의 절차 18.2 연결 확립과 종료 Tcpdump 출력 1 0.0 svr4.1037 > bsdi.discard: S 1415531521 : 1415531521 (0) win 4096 <mss 1024> 2 0.002402(0.0024) bsdi.discard > svr4.1037 : S 1823083521 : 1823083521 (0) ack 1415531522 win 4096 <mss 1024> 3 0.007224(0.0048) svr4.1037 > bsdi.discard: .ack 1823083522 win 4096 4 4.155441(4.1482) svr4.1037 > bsdi.discard: F 1415531522 : 1415531522 (0) ack 1823083522 win 4096 5 4.156747(0.0013) bsdi.discard > svr4.1037 .ack 1415531523 win 4096 6 4.158144(0.0014) bsdi.discard > svr4.1037 F 1823083522: 1823083522 (0) ack 1415531523 win 4096 7 4.180662(0.0225) svr4.1037 > bsdi.discard: .ack 182308353 win 4096 svr4 % telnet bsdi discard Trying 192.82.148.3 Connect to bsdi. Escape character is ‘^]’ ^] telnet >quit Connection closed. Discard service 서버는 클라이언트가 보낸 모든 데이터를 무시한다. 포트번호 : 7 • 발신지(source) > 목적지(destination): 플래그(flag)

  4. svr4.1037 bsdi.discard 세그먼트 1 0.0 SYN 1415531521 : 1415531521 (0) 세그먼트 2 SYN 1823083521 : 1823083521 ack 1415531522, <mss 1024> 0.002402(0.0024) 세그먼트 3 ack 1823083522 0.007224(0.0048) 세그먼트 4 4.155441(4.1482) FIN 1415531522 : 1415531522 (0) ack 1823083522 세그먼트 5 ack 1415531523 세그먼트 6 4.156747(0.0013) 4.158144(0.0014) FIN 1823083522 : 1823083522 (0) ack 1415531523 4.180662(0.0225) 세그먼트 7 ack 1823083523 세그먼트 7 연결 확립과 종료의 타임 라인

  5. 연결 확립 프로토콜 • 1. 요구측의 종단은 접속하고자 하는 서버의 포트번호와 클라이언트의 초기순서번호(Init Sequence Number, • ISN)를 지정한 SYN 세그먼트를 보낸다. • 2. 서버는 서버의 초기순서번호(ISN)를 포함한 자신의 SYN 세그먼트로 응답한다. 또 서버는 클라이언트의 • ISN+1 ACK 를 보냄으로써 클라이언트의 SYN에 확인 응답한다. • 3. 클라이언트는 서버로부터 보내 온 SYN에 대하여 서버의 ISN+1 ACK 로 확인응답을 보내야 한다. • 위와 같이 3개의 세그먼트에 의해 연결이 설정되며 이것을 three-way handshake라 부름 • 연결 종료 프로토콜 1.클라이언트 TCP는 FIN을 보내고, 클라이언트로부터 서버로 데이터 흐름을 종료한다. 2. 서버가 FIN을 수신하면 수신한 순서번호(ISN)+1의 ACK를 보낸다. 3. 서버 TCP는 FIN을 보낸다. 4. 클라이언트는 수신한 순서번호(ISN)에 1을 더한 ACK를 보낸다. TCP 연결은 전이중 방식으로 각 방향으로의 shutdown이 독립적으로 이루어 져야 한다.

  6. 8.3 연결 확립의 타임아웃 • 연결 확립할 수 없는 예 : 서버 호스트의 다운 1 0.0 bsdi.1024 > svr4.discard: S 291008001 : 291008001 (0) win 4096 <mss 1024> [tos 0x10] 2 5.814797(5.8148) bsdi.1024 > svr4.discard: S 291008001 : 291008001 (0) win 4096 <mss 1024> [tos 0x10] 3 29.81543(24.0006) bsdi.1024 > svr4.discard: S 291008001 : 291008001 (0) win 4096 <mss 1024> [tos 0x10] • [tos 0x10] : IP 데이터그램의 서비스 유형필드 telnet, rlogin에서 대화용 로그인이기 때문에 클라이언트의 지연을 최소화하기 위함 • 클라이언트의 TCP가 연결을 설정하기 위해 SYN를 보낸다. - 첫 번째 세그먼트를 보낸 후 2번째 연결을 위한 시도는 5.8초 후에 보낸다. - 두 번째 세그먼트를 보낸 후 3번째 연결을 위한 시도는 24초 후에 보낸다. 일반적으로 버클리 시스템의 경우는 최대 76초 동안 연결을 시도한다.

  7. MTU = 1500 MTU = 1500 1 0.0 sun.1093 > slip.discard : S 517312000: 517312000 (0) <mss 1460> 2 0.10(0.00) slip.discard > sun.1093: S 509556225 : 509556225 (0) ack 517312001 <mss 256> 3 0.10(0.00) sun.1093 > slip.discard : .ack 1 SLIP slip bsdi sun MTU = 296 MTU = 296 SYN<mss1460> SYN<mss256> 8.4 최대 세그먼트 크기 • TCP가 상대편에 한번에 보낼 수 있는 데이터의 최대 크기 • 연결이 확립될 때 각 종단은 MSS를 통지 • MSS = MTU- IP 헤더 - TCP 헤더 예 이더넷 : 1460바이트, IEEE 802.3 : 1452바이트 • Default Mss 설정 : 각 종단은 받기를 원하는 MSS를 알리는 option을 갖는다. - 상대편에서 MSS를 통지하지 않으면 MSS는 536바이트로 설정 - 시스템 별 default MSS BSD/386 : 512바이트, SunOS 4.1.3, AIX 3.2.2 : 1406 • sun에서 MSS를 1460으로 보냈으나 slip에서 MSS를 256으로 통지하였기 때문에 sun은 통신시에 데이터를 256바이트 이상으로 보낼 수 없다. • 통신상의 중간 라우터가 양단간의 MSS보다 작은 MTU를 갖는다면 전송되는 데이터는 단편화가 발생한다.

  8. 8.5 절반 종료 • TCP 연결의 한 쪽 종단이 다른쪽 종단으로부터 데이터를 전송 받고 있는 상태에서도 데이터의 출력을 종료할 수 있는 기능 • 소켓 API는 응용이 close를 호출하지 않고 shutdown을 호출하여 절반 종료를 수행할 수 있다. • 일반적인 응용에서의 종료는 close를 이용하여 양방향 종료를 수행한다. 클라이언트 서버 FIN 응용 shutdown 응용에 EOF 전달 FIN의 ack 응용에 write 데이터 응용에 read 데이터 ack 응용에 close FIN 응용에 EOF 전달 FIN의 ack

  9. 동작 원리 - 클라이언트에서 절반종료를 서버측에 전송하고 연결을 닫는다. - 서버측에서는 ack를 클라이언트에 전송한다. - 서버에서 데이터 전송이 끝나면 종료신호를 만들어 클라이언트에 전송하고 연결을 닫는다. - 클라이언트에서는 종료신호에 대한 ack 를 서버에 전송한다. • 절반 종료 예 • sun % rsh bsdi sort < datafile 호스트 bsdi 호스트 sun 표준 데이터 파일 TCP 접속 입력 rsh sort 터미널 표준 출력 • sort 프로그램은 입력되는 데이터가 읽혀질 때까지 데이터는 bsdi 서버에 전달된다. 입력데이터의 EOF에 도달하면 sun 클라이언트는 TCP연결상에서 절반종료를 실행한다. • bsdi 서버는 파일을 정렬하고 결과를 sun 클라이언트 표준출력의 데이터로 전달한다. • bsdi 서버는 클라이언트에 데이터전달을 종료하면 종료를 수행한다.

  10. 8.6 TCP 상태 천이도 시작점 CLOSED Appl : passive open Send : <아무것도 보내지 않는다> appl : active open send : SYN LISTEN rev : SYN; send : SYN, ACK appl : send data send : SYN 수동적 개방 recv : RST recv : SYN send : SYN, ACK 동시 개방 appl : close 또는 timeout SYN-RCVD SYN-SENT recv : ACK recv : SYN, ACK send : ACK 능동적 개방 Send : <아무것도 보내지 않는다> appl : close send : FIN recv : FIN send : ACK ESTABLISHED CLOSE-WAIT appl : close send : FIN 능동적 종료 데이터 전송상태 appl : close send : FIN 동시종료 FIN-WAIT-1 CLOSING recv : ACK send : <아무것도 보내지않는다> LAST-ACK recv : ACK send : <nothing> recv : FIN, ACK send : ACK recv : ACK send : <nothing> 수동적 종료 recv : FIN send : ACK FIN-WAIT-2 TIME-WAIT 2MSL timeout 클라이언트에 대한 정상적인 천이를 가리킴 서버의 대한 정상적인 천이를 가리킴 appl : 응용이 여기에 나타난 동작을 발행할 땡 일어나는 상태 천이를 가리킴 recv : 세그먼트를 수신할 때 취해지는 상태천이를 가리킴 send : 이 천이를 대해 보내지는 것

  11. client의 천이 : 실선으로 표시 • server의 천이 : 점선으로 표시 • Established state - 양단간의 데이터 전송이 가능한 상태 - input : 연결의 시작에 대응 - output : 두개의 천이가 연결을 해제하는 것을 의미 • closed state는 사실상 상태가 아닌 가상의 상태 • LISTEN state에서 SYN_SENT 상태로의 천이는 가능하나 버클리-드라이브 구현에서는 제공되지 않음 • SYN_RCVD에서 상태 LISTEN로의 천이는 SYN_SENT로 부터가 아닌 LISTEN state로 부터 SYN_RCVD 가 만들어 졌을 때만 가능 • Active close • Passive close

  12. 클라이언트 서버 SYN-SENT 능동적 개방 LISTEN 수동적 개방 SYN J SYN_RCVD SYN K, ack J+1 ESTABLISHED ack K+1 ESTABLISHED FIN_WAIT_1 능동적 종료 FIN M CLOSE-WAIT 수동적 종료 ack M+1 LAST-ACK FIN _WAIT_2 FIN N TIME _WAIT ack N+1 CLOSED 일반적인 연결 확립과 종료에 대한 TCP 상태

  13. 2MSL Wait State(대기상태) • Time wait 상태로서 모든 동작 구현은 maximum segment lifetime(MSL)을 선택함 • MSL은 어떤 segment가 버려지기 전까지 존재할 수 있는 최대시간으로서 TCP segment들이 • IP datagram과 같이 전송되어지고 IP 데이터그램은 생존시간이 한정된 TTL 필드를 • 갖으므로 TCP 세그먼트 또한 시간 제한이 존재 • - RCF 793에서는 2분으로 정의 • 동작구현 • - MSL값이 주어진 경우 TCP가 능동적 종료를 하고 마지막 ack를 보낸 경우, • 그 연결의 두배의 MSL동안 TIME_WAIT 상태에 머므르게 함. • - 이러한 동작은 TCP로 하여금 ACK를 잃어버렸을 경우 ACK의 재전송을 • 가능케 함(이러한 경우 반대편 end에서는 Timeout이 발생하고 FIN을 재전송) • 2MSL Wait의 또다른 결과는 TCP connection이 2MSL 상태에 있는 동안 그 connection 쌍으로 정의된 소켓의 재사용을 금지 시킴 • - client IP address, client port number, server IP address, server port number • - 모든 구현에 있어 엄격히 제한이 부여됨. 즉 이미 결정된 결과에 의해 어떤 port number에 • 있어 그 port number가 2MSL Wait 상태에 있는 소켓쌍의 local port number인 경우 재사용 • 할 수 없음

  14. 일반적으로 TIME_WAIT 상태는 client가 갖으나 server에서도 적용 • - 만일 커넥션이 설정되어진 서버에서 connection을 제거하고 곧 이어 재시작을 시도할 경우 • 그 서버는 자신의 end point를 할당할 수 없게 됨 • - 그 port 번호가 2MSL 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 Foreign Address (State) tcp 0 0 sun.6666 bsdi.1081 TIME_WAIT

  15. 예) 클라이언트가 2MSL_WAIT 상태에서 연결을 재시도한 경우 sun % sock v bsdi echo connection on from 140.252.13.33.1162 to 140.252.13.35.7 Hello there Hello there ^D sun % sock -b1162 bsdi echo Can’t bind local address already in use • FIN_WAIT_2 상태 FIN_WAIT_2 상태는 FIN을 보내고 상대편 종단은 이에 대한 ACK를 보내고 난 후 FIN이 되돌아 오기를 기다리는 상태이다. FIN이 오면 FIN_WAIT_2 상태에서 TIME_WAIT상태로 변한다.

  16. 18.7 재설정 세그먼트 • 재설정은 참조 연결에 대해서 정확하지 않는 세그먼트 도착할 때 발생한다. • 존재하지 않는 포트에 대한 연결 요구 연결요구가 도착할 때에 목적지 포트상에 프로세스가 대기하고 있지 않는 경우 예) 목적지에 사용되지 않는 포트번호를 지정하여 연결 bsdi % telnet svr4 20000 Trying 140.252.13.34 telnet : Unable to connect remote host : Connection refused 1 0.0 bsdi.1087 > svr4.20000 : S 297416193 : 297416193 (0) win 4096 <mss 1024> [tos 0x10] 2 0.003771(0.0038) svr4.20000 > bsdi.1087 : R 0 : 0 (0) ack 297416194 win 0

  17. bsdi % sock -L0 svr4 8888 hello, world ^D svr4 % sock -s 8888 hello, world read error : connection reset by peer • 연결 중단 - 정규해제(ordinary release) : 상대편에 FIN 신호를 보내서 연결을 종료한다. FIN은 큐에 대기한 데이터를 모두 전송한 후에 전송되어 데이터에 대한 손실이 없다. - 중단해제(abortive release) : FIN 대신에 재설정(RST)을 전송하여 연결을 종료한다. • 연결 중단 동작방법 - 대기중인 데이터를 폐기하고 즉시 재설정 신호를 전송 - RST의 수신측은 상대방에게 일방적인 해제 대신에 중단이 행해 졌다는 정보를 전달 1 0.0 bsdi.1099 > svr4.8888 : S 671112193 : 671112193 (0) <mss 1024> 2 0.004975(0.0050) svr4.8888 > bsdi.1099 : S 322495489 : 322495489 (0) ack 671112194 <mss 1024> 3 0.006656(0.0017) bsdi.1099 > svr4.8888 : . ack 4 4.833024(4.8263) bsdi.1099 > svr4.8888 : P 1:14(13) ack 1 5 5.026224(0.1932) svr4.8888 > bsdi.1099 : .ack 14 6 9.527634(4.5014) bsdi.1099 > svr4.8888 : R 14 : 14 (0) ack 1 1-3 번 TCP 연결 확립 4-5 번 데이터의 전송 6 번 클라이언트를 종료하기 위한 EOF문자

  18. bsdi % telnet svr4 discard Trying 140. 252. 13. 34 Connection to srv4 Escape character is ‘^]’ hi there Another line Connection closed by foreign host • 절반 개방 연결의 발견 • 절반 개방 - 상대방의 확인 없이 자신의 연결만을 종료 또는 중단 • - 절반 개방을 통해 데이터 전송이 시도되지 않는 동안에는 아직 연결을 유지하고 있는 • 단말쪽에서 상대방의 충돌을 감지하지 못함 1 0.0 bsdi.1102 > srv4.discard : S 1591752193 : 1591752193 (0) 2 0.004811(0.0048) srv4. discard > bsdi.1102 : S 26368001 : 26368001 (0) ack 1591752194 3 0.006516(0.0017) bsdi.1102 > srv4.discard : .ack 1 4 5.167679(5.1612) bsdi.1102 > srv4.discard : p 1:11 (10) ack 1 5 5.201662(0.0340) srv4.discard > bsdi.1102 : .ack 11 6 194.909929 (189.7083) bsdi.1102 > srv4.discard : P 11:25 (14) ack 1 7 194.914957(0.0050) arp who-has bsdi tell srv4 8 194.915678(0.0007) arp reply bsdi is-at 0:0:c0:6f:2d:40 9 194.918225(0.0025) sr4.discard > bsdi.1102 : R 26368002 : 26368002 (0) 1-3 연결 확립 4-5 hi there 데이터 전송 6 another line 데이터 전송 7-8 arp 요구와 응답 9 재설정

  19. 18.8 동시 개방 • 각 종단은 SYN을 전송하고 2개의 SYN이 네트워크를 통해 상대방에 전송한다. • 각 종단은 상대편 종단에 대해서 잘 알려진 로컬 포트 번호를 갖는다. 능동적개방 SYN_SENT 능동적개방 SYN_SENT SYN J SYN K SYN_RCVD SYN K, ack J +1 SYN_RCVD SYN J, ack K+1 ESTABLISHED ESTABLISHED 동시 개방에 따른 세그먼트 교환

  20. vangogh % sock v b7777 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 % sock v b8888 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 0.0 bsdi.8888 > vangogh.7777 : S 91904001 : 91904001 (0) win 4096 <mss 512> 2 0.213782(0.2138) vangogh.7777 > bsdi.8888 : S 1058199041 : 1058199041 (0) 3 0.215399(0.0016) bsdi.8888 > vangogh.7777 : S 91904001 : 91904001 (0) ack 1058199042 win 4096 <mss 512> 4 0.340405(0.1250) vangogh.7777 > bsdi.8888 : S 1058199041 : 1058199041 (0) ack 91904002 win 8192 <mss 512> 5 5.633142(5.2927) bsdi.8888 > vangogh.7777 : P 1:14(13) ack 6 6.10036 (0.4 672) vangogh.7777 > bsdi.8888 : .ack 14 win 8192 7 9.640214(3.5398) vangogh.7777 > bsdi.8888 : P 1:14(13) ack 14 win 8192 8 9.796417(0.1562) bsdi.8888 > vangogh.7777 : .ack 14 win 4096 9 13.060395(3.2640) vangogh.7777 > bsdi.8888 : F 1:14(0) ack 14 win 8192 10 13.061828(0.0014) bsdi.8888 > vangogh.7777 : .ack 15 win 4096 11 13.079769(0.0179) bsdi.8888 > vangogh.7777 : F 1:14(0) ack 15 win 4096 12 13.299940(0.2202) vangogh.7777 > bsdi.8888 : .ack 15 win 8192 동시에 bsdi의 8888포트와 vangogh의 7777포트를 동시 개방을 실행 1-4 5-6 : bsdi로부터 vangogh로 전송되는 입력 데이터와 확인응답 7-8 : vangogh로부터 bsdi로 전송되는 입력 데이터와 확인응답 9-10 : 일반적인 연결 종료

  21. 18.9 동시 종료 • 양쪽 종단으로부터 능동적 종료를 수행 • 동시종료는 일반적인 종료와 같은 수의 세그먼트 교환 능동적종료 FIN_WAIT_1 능동적종료 FIN_WAIT_1 FIN J FIN K CLOSING CLOSING ack K+1 ack J +1 TIME_WAIT TIME_WAIT 동시 종료 중의 세그먼트 교환

  22. 18.10 TCP 옵션 • TCP 헤더에 옵션을 추가 • RFC 793, 1323 은 추가적인 TCP 옵션을 정의 • 옵션의 유형은 kind의 값으로 구분 • NOP(no operation) : 송신측이 필드를 4바이트의 배수가 되도록 채우기 위함 예 : <mss 512, nop, wscale 0, nop, nop, timestamp 146647 0> 옵션 리스트의 끝 kind=0 1 바이트 동작 없음 kind=1 1 바이트 최대 세그먼트 크기 (MSS) 최대 세그먼트의 크기 kind=2 len=4 1 바이트 1 바이트 2 바이트 윈도우 스케일 계수 kind=3 len=3 이동 카운트 1 바이트 1 바이트 1 바이트 타임스탬프 kind=8 len=10 타임스탬프 값 타임스탬프 에코 응답 1 바이트 1 바이트 4 바이트 4 바이트

  23. 18.11 TCP 서버 설계 • TCP 서버 포트는 병행처리가 가능하다. 서버는 새로운 연결요구가 도착하면 서버는 그 연결을 받아들이고 새로운 클라이언트를 처리하기위해 새로운 프로세스를 가동시킨다. • TCP 서버 포트 번호 netstat 옵션 - a : 네트워크상의 모든 종단점을 표시 - n : DNS서버를 사용하여 IP주소를 dotted decimal로 출력하고 서비스이름을 숫자로 포트번호를 출력 -f inet : TCP와 UCP 종단점만 표시 Sun % netstat -a -n -f inet Active Internet connections (including servers) Proto Recv-Q Send-Q Local Address Foreign Address (State) tcp 0 0 *.23 *.* LISTEN 로컬주소 *.23는 임의의 로컬 인터페이스에서 받아들이는 의미 외부주소 *.*는 외부 IP주소와 포트를 알지 못하고 있으며 종단점은 연결의 도착을 기다림

  24. Proto Recv-Q Send-Q Local Address Foreign Address (State) tcp 0 0 140.252.13.33.23 140.252.13.65.1029 ESTABLISHED tcp 0 0 *.23 *.* LISTEN LISTEN 상태는 병행서버가 나중에 연결요구를 받아들이기 위해 이용되는 종단점 Proto Recv-Q Send-Q Local Address Foreign Address (State) tcp 0 0 140.252.1.29.23 140.252.1.32.34603 ESTABLISHED tcp 0 0 140.252.13.33.23 140.252.13.65.1030 ESTABLISHED tcp 0 0 140.252.13.33.23 140.252.13.65.1029 ESTABLISHED tcp 0 0 *.23 *.* LISTEN 멀티홈드 호스트 sun에 slip 링크의 인터페이스(140.252.1.29)와 이더넷 (140.252.13.33)에 연결된 상황 • 로컬 IP 주소의 제한 서버가 로컬 IP주소를 와일드 카드로 하지 않는 경우 지정된 로컬 IP주소외에는 연결을 거부 • Sun % sock -s 140.252.1.29 8888 140.252.1.29 IP로 연결을 제한 • Proto Recv-Q Send-Q Local Address Foreign Address (State) • tcp 0 0 140.252.1.3.29.8888 *.* LISTEN

  25. 외부 IP 주소의 제한 TCP 서버가 자신에 대해 확립할 수 있는 제한 형식 lports는 서버의 알려진 포트, localIP는 로컬 인터페이스의 IP의 주소 로컬 주소 외부 주소 설명 localIP.lport localIP.lport *.lport foreignIP.fport *.* *.* 하나의 클라이언트에 제한(보통은 지원되지 않는다) 하나의 로컬 인터페이스(localIP)에 도착하는 연결에 제한 lport에 보내는 모든 연결을 수신 • 수신 연결 요구 큐 - 병행서버는 클라이언트의 연결요구에 대해 처리할 수 있도록 대기하고 있다. 운영체제가 우선순위를 갖는 프로세스를 수행 중에 복수의 클라이언트로부터 연결요구가 도착할 때 대기중인 응용이 바쁠 때에 TCP의 연결요구 처리는 1. 대기중인 종단점은 TCP에 의해 받아들이지만 응용에는 아직 수신되지 않은 연결의 고정길이의 큐를 갖는다. 2. 응용은 큐에 대해 한계를 설정하고 있으며 이것을 백로그(baglog)라 부름 (대부분 최대치 5로 설정)

  26. 3. 연결요구(SYN)가 도착하면 큐에 들어간 연결의 현재수를 파악하여 연결을 판단한다. 4. 대기중인 종단점이 새로운 연결에 대한 큐에 공간이 있으면 TCP모듈은 SYN 에 대해 ACK를 보내고 연결을 완성한다. 5. 새로운 연결을 위한 큐의 공간이 없으면 수신된 SYN는 무시되고 되돌려지는 값은 없다. 큐에 들어가는 연결의 최대값 백로그 값 전통적인 BSD 솔라리스 2.2 0 1 2 3 4 5 1 2 4 5 7 8 0 1 2 3 4 5

  27. bsdi % sock -s -v -q1 -030 7777 bsdi는 서버로 동작 q1옵션은 백로그값을 1로 설정 : 2개의 연결요구를 받을 수 있다. o30옵션은 프로그램을 30초간 정지 1 0.0 sun.1090 > bsdi.7777 : S 1617152000 : 1617152000 (0) 2 0.002310(0.0023) bsdi.7777 > sun.1090 : S 4164096001 : 4164096001(0) ack 1617152001 3 0.003098(0.0008) sun.1090 > bsdi.7777 : .ack 4 4.291007(4.2879) sun.1091 > bsdi.7777 : S 1617152000 : 1617152000 (0) 5 4.293349(0.0023) bsdi.7777 > sun.1091 : S 4164720001 : 4164720001(0) ack 1617792001 6 4.294167 (0.0008) sun.1091 > bsdi.7777 : .ack 1 7 7.131981(3.4248) sun.1092 > bsdi.7777 : S 1618176000 : 1618176000 (0) 8 10.556787(3.4248) sun.1093 > bsdi.7777 : S 1618688000 : 1618688000 (0) 9 12.695916(2.1391) sun.1092 > bsdi.7777 : S 1618176000 : 1618176000 (0) 10 16.195772(3.4999) sun.1093 > bsdi.7777 : S 1618688000 : 1618688000 (0) 11 24.695571(8.4998) sun.1092 > bsdi.7777 : S 1618176000 : 1618176000 (0) 12 28.195454(3.4999) sun.1093 > bsdi.7777 : S 1618688000 : 1618688000 (0) 13 28.197810(0.0024) bsdi.7777 > sun.1093 : S 4167808001 : 4167808001 (0) ack 161868001 14 28.198639(0.0008) sun.1093 > bsdi.7777 : .ack 1 15 48.694931(20.4963) sun.1092 > bsdi.7777 : S 1618176000 : 1618176000 (0) 16 48.697297(0.0024) bsdi.7777 > sun.1092 : S 4170496001 : 4170496001(0) ack 1618176001 17 48.698145(0.0009) sun.1092 > bsdi.7777 : .ack 1-6 : 큐에 두개의 클라이언트를 받는다 7-13 : 서버 응용이 중단중이므로 SYN를 무시하여 클라이언트에서 SYN가 재전송된다. 13-17 : 30초가 지난 후에 SYN요구를 받아 들인다.

  28. 8.12 요약 • TCP 연결확립과 종료 절차 • TCP 의 절반 개방 및 종료, 동시개방과 동시종료 절차 • 상태 천이도를 통한 TCP동작 이해 • tcpdump 명령을 이용한 TCP의 연결과 종료

More Related