제 18 장

28
1 Computer Network Lab. 제 18 제 TCP/IP 연연 연연연 연연

Upload: gabrielle-moreau

Post on 30-Dec-2015

34 views

Category:

Documents


1 download

DESCRIPTION

제 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. 순서번호의 동기 송신자는 데이터 송신을 종료 연결의 재설정 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 제  18  장

1Computer Network Lab.

제 18 장

TCP/IP 연결 확립과 종료

Page 2: 제  18  장

2Computer Network Lab.

1. 개요

2. 연결 확립과 종료

3. 연결 확립의 타임아웃

4. 최대 세그먼트 크기

5. TCP 절반 종료

6. TCP 상태 천이도

7. 재설정 세그먼트

8. 동시 개방

9. 동시 종료

10. TCP 옵션

11. TCP 서버 설계

12. 요약

목 차

Page 3: 제  18  장

3Computer Network Lab.

18.1 개요 TCP 는 연결형 프로토콜 : 종단이 서로 데이터를 송신하기 전에 이들 사이에 연결을 확립 이장은 연결의 확립 및 종료의 절차

18.2 연결 확립과 종료svr4 % telnet bsdi discardTrying 192.82.148.3Connect to bsdi.Escape character is ‘^]’^]

telnet >quitConnection closed.

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 40964 4.155441(4.1482) svr4.1037 > bsdi.discard: F 1415531522 : 1415531522 (0) ack 1823083522 win 40965 4.156747(0.0013) bsdi.discard > svr4.1037 .ack 1415531523 win 40966 4.158144(0.0014) bsdi.discard > svr4.1037 F 1823083522: 1823083522 (0) ack 1415531523 win 40967 4.180662(0.0225) svr4.1037 > bsdi.discard: .ack 182308353 win 4096

발신지 (source) > 목적지 (destination): 플래그 (flag)

플래그 3 문자 약어 설명

SFRP.

SYNFINRSTPSH

순서번호의 동기송신자는 데이터 송신을 종료연결의 재설정수신 프로세스가 가능한 빨리 데이터를 보낸다위의 4 개의 플래그가 설정된 것이 없다

Discard service

서버는 클라이언트가보낸 모든 데이터를 무시한다 .

포트번호 : 7

Page 4: 제  18  장

4Computer Network Lab.

svr4.1037 bsdi.discard

SYN 1415531521 : 1415531521 (0)

FIN 1415531522 : 1415531522 (0) ack 1823083522

4.180662(0.0225)4.158144(0.0014)4.156747(0.0013)

4.155441(4.1482)

0.007224(0.0048)

0.002402(0.0024)

0.0

SYN 1823083521 : 1823083521

ack 1415531522, <mss 1024>

ack 1823083522

ack 1415531523

FIN 1823083522 : 1823083522 (0) ack 1415531523

ack 1823083523

세그먼트 7

세그먼트 6

세그먼트 5

세그먼트 3

세그먼트 7

세그먼트 1

세그먼트 2

세그먼트 4

연결 확립과 종료의 타임 라인

Page 5: 제  18  장

5Computer Network Lab.

연결 확립 프로토콜

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 이 독립적으로 이루어 져야 한다 .

Page 6: 제  18  장

6Computer Network Lab.

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]

8.3 연결 확립의 타임아웃 연결 확립할 수 없는 예 : 서버 호스트의 다운

[tos 0x10] : IP 데이터그램의 서비스 유형필드 telnet, rlogin 에서 대화용 로그인이기 때문에 클라이언트의 지연을 최소화하기 위함 클라이언트의 TCP 가 연결을 설정하기 위해 SYN 를 보낸다 .

- 첫 번째 세그먼트를 보낸 후 2 번째 연결을 위한 시도는 5.8 초 후에 보낸다 .

- 두 번째 세그먼트를 보낸 후 3 번째 연결을 위한 시도는 24 초 후에 보낸다 .

일반적으로 버클리 시스템의 경우는 최대 76 초 동안 연결을 시도한다 .

Page 7: 제  18  장

7Computer Network Lab.

8.4 최대 세그먼트 크기

slip bsdi sun

SYN<mss256>

SYN<mss1460>

MTU = 296 MTU = 296

MTU = 1500 MTU = 1500SLIP

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

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

sun 에서 MSS 를 1460 으로 보냈으나 slip 에서 MSS 를 256 으로 통지하였기 때문에 sun 은 통신시에 데이터를 256 바이트 이상으로 보낼 수 없다 .

통신상의 중간 라우터가 양단간의 MSS 보다 작은 MTU 를 갖는다면 전송되는 데이터는 단편화가 발생한다 .

Page 8: 제  18  장

8Computer Network Lab.

8.5 절반 종료

클라이언트 서버

응용 shutdown응용에 EOF 전달

응용에 EOF 전달

응용에 close

응용에 read

응용에 write

FIN 의 ack

FIN 의 ack

FIN

FIN

데이터

데이터 ack

TCP 연결의 한 쪽 종단이 다른쪽 종단으로부터 데이터를 전송 받고 있는 상태에서도 데이터의 출력을 종료할 수 있는 기능

소켓 API 는 응용이 close 를 호출하지 않고 shutdown 을 호출하여 절반 종료를 수행할 수 있다 .

일반적인 응용에서의 종료는 close 를 이용하여 양방향 종료를 수행한다 .

Page 9: 제  18  장

9Computer Network Lab.

동작 원리 - 클라이언트에서 절반종료를 서버측에 전송하고 연결을 닫는다 .

- 서버측에서는 ack 를 클라이언트에 전송한다 .

- 서버에서 데이터 전송이 끝나면 종료신호를 만들어 클라이언트에 전송하고 연결을 닫는다 .

- 클라이언트에서는 종료신호에 대한 ack 를 서버에 전송한다 .

절반 종료 예

sun % rsh bsdi sort < datafile

호스트 bsdi호스트 sun

rsh터미널

데이터 파일 표준입력

출력표준

sortTCP 접속

sort 프로그램은 입력되는 데이터가 읽혀질 때까지 데이터는 bsdi 서버에 전달된다 .

입력데이터의 EOF 에 도달하면 sun 클라이언트는 TCP 연결상에서 절반종료를 실행한다 .

bsdi 서버는 파일을 정렬하고 결과를 sun 클라이언트 표준출력의 데이터로 전달한다 .

bsdi 서버는 클라이언트에 데이터전달을 종료하면 종료를 수행한다 .

Page 10: 제  18  장

10Computer Network Lab.

LISTEN

SYN-SENT

ESTABLISHED

SYN-RCVD

CLOSE-WAIT

CLOSINGFIN-WAIT-1

TIME-WAITFIN-WAIT-2

LAST-ACK

CLOSED

클라이언트에 대한 정상적인 천이를 가리킴 서버의 대한 정상적인 천이를 가리킴appl : 응용이 여기에 나타난 동작을 발행할 땡 일어나는 상태 천이를 가리킴recv : 세그먼트를 수신할 때 취해지는 상태천이를 가리킴send : 이 천이를 대해 보내지는 것

시작점

능동적 종료

Appl : passive openSend : < 아무것도 보내지 않는다 >

데이터 전송상태

Send : < 아무것도 보내지 않는다 >appl : closesend : FIN

동시종료

recv : ACKsend : <nothing>

recv : ACKsend : <nothing>

recv : FINsend : ACK

2MSL timeout

수동적 종료

recv : ACKsend : < 아무것도보내지않는다 >

appl : closesend : FIN

appl : close또는 timeout

recv : SYNsend : SYN, ACK

동시 개방

recv : RSTrev : SYN; send : SYN, ACK

appl : active open

send : SYNappl : send data

send : SYN

recv : SYN, ACK

send : ACK

능동적 개방

수동적 개방

appl : close

send : FIN

recv : FIN, ACKsend : ACK

recv : FINsend : ACK

recv : ACK

8.6 TCP 상태 천이도

Page 11: 제  18  장

11Computer Network Lab.

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

Page 12: 제  18  장

12Computer Network Lab.

클라이언트 서버

SYN J

FIN M

SYN K, ack J+1

ack K+1

ack M+1

FIN N

ack N+1

TIME _WAIT

LAST-ACK

CLOSE-WAIT수동적 종료

ESTABLISHED

CLOSED

SYN-SENT능동적 개방

LISTEN수동적 개방

FIN_WAIT_1능동적 종료

ESTABLISHED

FIN _WAIT_2

SYN_RCVD

일반적인 연결 확립과 종료에 대한 TCP 상태

Page 13: 제  18  장

13Computer Network Lab.

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 인 경우 재사용 할 수 없음

Page 14: 제  18  장

14Computer Network Lab.

일반적으로 TIME_WAIT 상태는 client 가 갖으나 server 에서도 적용 - 만일 커넥션이 설정되어진 서버에서 connection 을 제거하고 곧 이어 재시작을 시도할 경우 그 서버는 자신의 end point 를 할당할 수 없게 됨 - 그 port 번호가 2MSL wait 상태에 존재하는 connection 의 일부분이기 때문 ( 서버의 재시작 시간은 1 에서 4 분 정도 소요 )

예 ) 먼저 서버를 동작시키고 클라이언트로 이를 연결한 후 서버를 종료

sun % sock v -s 6666connection on from 140.252.13.35.1081 to 140.252.13.6666 클아이언트의 1081 포트로 접속^?

sun % sock -s 6666Can’t bind local address : Address already in use

sun % netstatActive Internet connectionsProto Recv-Q Send-Q Local Address Foreign Address (State)tcp 0 0 sun.6666 bsdi.1081 TIME_WAIT

Page 15: 제  18  장

15Computer Network Lab.

예 ) 클라이언트가 2MSL_WAIT 상태에서 연결을 재시도한 경우

sun % sock v bsdi echo connection on from 140.252.13.33.1162 to 140.252.13.35.7Hello thereHello there^D

sun % sock -b1162 bsdi echoCan’t bind local address already in use

FIN_WAIT_2 상태 FIN_WAIT_2 상태는 FIN 을 보내고 상대편 종단은 이에 대한 ACK 를 보내고 난 후 FIN 이 되돌아 오기를 기다리는 상태이다 . FIN 이 오면 FIN_WAIT_2 상태에서 TIME_WAIT 상태로 변한다 .

Page 16: 제  18  장

16Computer Network Lab.

18.7 재설정 세그먼트

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

bsdi % telnet svr4 20000

Trying 140.252.13.34

telnet : Unable to connect remote host : Connection refused

존재하지 않는 포트에 대한 연결 요구

연결요구가 도착할 때에 목적지 포트상에 프로세스가 대기하고 있지 않는 경우

예 ) 목적지에 사용되지 않는 포트번호를 지정하여 연결

재설정은 참조 연결에 대해서 정확하지 않는 세그먼트 도착할 때 발생한다 .

Page 17: 제  18  장

17Computer Network Lab.

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 15 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

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-3 번 TCP 연결 확립

4-5 번 데이터의 전송

6 번 클라이언트를 종료하기 위한 EOF 문자

Page 18: 제  18  장

18Computer Network Lab.

bsdi % telnet svr4 discardTrying 140. 252. 13. 34Connection to srv4Escape character is ‘^]’hi there

Another lineConnection 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 15 5.201662(0.0340) srv4.discard > bsdi.1102 : .ack 11

6 194.909929 (189.7083) bsdi.1102 > srv4.discard : P 11:25 (14) ack 17 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 재설정

절반 개방 - 상대방의 확인 없이 자신의 연결만을 종료 또는 중단 - 절반 개방을 통해 데이터 전송이 시도되지 않는 동안에는 아직 연결을 유지하고 있는 단말쪽에서 상대방의 충돌을 감지하지 못함

Page 19: 제  18  장

19Computer Network Lab.

18.8 동시 개방 각 종단은 SYN 을 전송하고 2 개의 SYN 이 네트워크를 통해 상대방에 전송한다 .

각 종단은 상대편 종단에 대해서 잘 알려진 로컬 포트 번호를 갖는다 .

능동적개방SYN_SENT

SYN_RCVD

SYN J SYN K

능동적개방SYN_SENT

SYN_RCVD

ESTABLISHEDESTABLISHED

SYN J, ack K+1 SYN K, ack J +1

동시 개방에 따른 세그먼트 교환

Page 20: 제  18  장

20Computer Network Lab.

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 : 일반적인 연결 종료

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

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

Page 21: 제  18  장

21Computer Network Lab.

18.9 동시 종료

양쪽 종단으로부터 능동적 종료를 수행

동시종료는 일반적인 종료와 같은 수의 세그먼트 교환

능동적종료FIN_WAIT_1

CLOSING

FIN J FIN K

능동적종료FIN_WAIT_1

CLOSING

TIME_WAITTIME_WAIT

ack K+1 ack J +1

동시 종료 중의 세그먼트 교환

Page 22: 제  18  장

22Computer Network Lab.

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

kind=1

kind=2

kind=3

kind=8

len=4

len=3

len=10

최대 세그먼트 크기(MSS)

이동 카운트

타임스탬프 값 타임스탬프 에코 응답

1 바이트

1 바이트

1 바이트

1 바이트

1 바이트

1 바이트 1 바이트

1 바이트 4 바이트 4 바이트

1 바이트 2 바이트

옵션 리스트의 끝

동작 없음

최대 세그먼트의 크기

윈도우 스케일 계수

타임스탬프

Page 23: 제  18  장

23Computer Network Lab.

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 주소와 포트를 알지 못하고 있으며 종단점은 연결의 도착을 기다림

Page 24: 제  18  장

24Computer Network Lab.

Proto Recv-Q Send-Q Local Address Foreign Address (State)tcp 0 0 140.252.13.33.23 140.252.13.65.1029 ESTABLISHEDtcp 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 ESTABLISHEDtcp 0 0 140.252.13.33.23 140.252.13.65.1030 ESTABLISHEDtcp 0 0 140.252.13.33.23 140.252.13.65.1029 ESTABLISHEDtcp 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

Page 25: 제  18  장

25Computer Network Lab.

외부 IP 주소의 제한 TCP 서버가 자신에 대해 확립할 수 있는 제한 형식 lports 는 서버의 알려진 포트 , localIP 는 로컬 인터페이스의 IP 의 주소

로컬 주소 외부 주소 설명

localIP.lport

localIP.lport

*.lport

하나의 클라이언트에 제한 ( 보통은 지원되지 않는다 )

하나의 로컬 인터페이스 (localIP) 에 도착하는 연결에 제한lport 에 보내는 모든 연결을 수신

foreignIP.fport

*.*

*.*

수신 연결 요구 큐 - 병행서버는 클라이언트의 연결요구에 대해 처리할 수 있도록 대기하고 있다 .

운영체제가 우선순위를 갖는 프로세스를 수행 중에 복수의 클라이언트로부터 연결요구가 도착할 때 대기중인 응용이 바쁠 때에 TCP 의 연결요구 처리는 1. 대기중인 종단점은 TCP 에 의해 받아들이지만 응용에는 아직 수신되지 않은 연결의 고정길이의 큐를 갖는다 .

2. 응용은 큐에 대해 한계를 설정하고 있으며 이것을 백로그 (baglog) 라 부름 ( 대부분 최대치 5 로 설정 )

Page 26: 제  18  장

26Computer Network Lab.

큐에 들어가는 연결의 최대값백로그 값 전통적인 BSD 솔라리스 2.2

124578

012345

012345

3. 연결요구 (SYN) 가 도착하면 큐에 들어간 연결의 현재수를 파악하여 연결을 판단한다 .

4. 대기중인 종단점이 새로운 연결에 대한 큐에 공간이 있으면 TCP 모듈은 SYN 에 대해 ACK 를 보내고 연결을 완성한다 .

5. 새로운 연결을 위한 큐의 공간이 없으면 수신된 SYN 는 무시되고 되돌려지는 값은 없다 .

Page 27: 제  18  장

27Computer Network Lab.

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 요구를 받아 들인다 .

bsdi % sock -s -v -q1 -030 7777

bsdi 는 서버로 동작 q1옵션은 백로그값을 1 로 설정 : 2 개의 연결요구를 받을 수 있다 .

o30옵션은 프로그램을 30 초간 정지

Page 28: 제  18  장

28Computer Network Lab.

8.12 요약

TCP 연결확립과 종료 절차

TCP 의 절반 개방 및 종료 , 동시개방과 동시종료 절차

상태 천이도를 통한 TCP 동작 이해

tcpdump 명령을 이용한 TCP 의 연결과 종료