Skip to content

Latest commit

Β 

History

History
71 lines (41 loc) Β· 3.28 KB

TCP_Connection_Termination.md

File metadata and controls

71 lines (41 loc) Β· 3.28 KB

TCP

TCP(전솑 μ œμ–΄ ν”„λ‘œν† μ½œ) : 인터넷을 톡해 데이터λ₯Ό μ „μ†‘ν•˜κΈ° μœ„ν•΄ 널리 μ‚¬μš©λ˜λŠ” ν”„λ‘œν† μ½œμž…λ‹ˆλ‹€.
μ΄λŠ” μ‹ λ’°ν•  수 μžˆλŠ” μ—°κ²° 지ν–₯ ν”„λ‘œν† μ½œλ‘œ, 데이터λ₯Ό μ „μ†‘ν•˜κΈ° 전에 두 μž₯치 간에 연결이 μ„€μ •λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
μ—°κ²° μ„€μ • ν”„λ‘œμ„ΈμŠ€μ—λŠ” HandShake라고 ν•˜λŠ” 일련의 단계가 ν¬ν•¨λ©λ‹ˆλ‹€.

TCP 3-way handshake

두 μž₯치 간에 연결을 μ„€μ •ν•˜λŠ” 3단계 ν”„λ‘œμ„ΈμŠ€ μž…λ‹ˆλ‹€.

image

  1. SYN : 첫 번째 λ‹¨κ³„λŠ” SYN(동기화) νŒ¨ν‚·μž…λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ— SYN νŒ¨ν‚·μ„ 보내 연결을 μ‹œμž‘ν•˜λ €κ³  함을 λ‚˜νƒ€λƒ…λ‹ˆλ‹€. νŒ¨ν‚·μ—λŠ” 연결을 μ‹λ³„ν•˜λŠ” 데 μ‚¬μš©λ˜λŠ” μž„μ˜μ˜ μ‹œν€€μŠ€ λ²ˆν˜Έκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

  2. SYN-ACK : 두 번째 λ‹¨κ³„λŠ” SYN-ACK(synchronize-acknowledge) νŒ¨ν‚·μž…λ‹ˆλ‹€. μ„œλ²„κ°€ SYN νŒ¨ν‚·μ„ μˆ˜μ‹ ν•˜λ©΄ SYN-ACK νŒ¨ν‚·μ„ λ‹€μ‹œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ λ³΄λƒ…λ‹ˆλ‹€. νŒ¨ν‚·μ—λŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 것과 λ™μΌν•œ μ‹œν€€μŠ€ λ²ˆν˜Έμ™€ 자체 μž„μ˜ μ‹œν€€μŠ€ λ²ˆν˜Έκ°€ ν¬ν•¨λ©λ‹ˆλ‹€.

  3. ACK : μ„Έ 번째 λ‹¨κ³„λŠ” ACK(승인) νŒ¨ν‚·μž…λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ SYN-ACK νŒ¨ν‚·μ„ μˆ˜μ‹ ν•˜λ©΄ ACK νŒ¨ν‚·μ„ λ‹€μ‹œ μ„œλ²„λ‘œ λ³΄λƒ…λ‹ˆλ‹€. 이 νŒ¨ν‚·μ—λŠ” SYN-ACK νŒ¨ν‚·μ˜ μ‹œν€€μŠ€ λ²ˆν˜Έμ— 1을 λ”ν•œ 값이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

μš”μ•½

3 way handshakeλŠ” 두 λŒ€μ˜ 컴퓨터가 일련의 λ©”μ‹œμ§€λ₯Ό κ΅ν™˜ν•˜μ—¬ μ„œλ‘œ 연결을 μ„€μ •ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€.

마치 두 μ‚¬λžŒμ΄ μ „ν™”λ‘œ 

C - "μ—¬λ³΄μ„Έμš”? λ‚΄ 말 λ“€λ €μš”?"

S - "λ„€, λ“€λ €μš”."

C - "μ’‹μ•„μš”. 이야기λ₯Ό μ‹œμž‘ν•΄ λ³ΌκΉŒμš”?"

라고 λ§ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.

TCP 4-way handshake

연결을 μ’…λ£Œν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” 4단계 ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€.

image

  1. FIN : 첫 번째 λ‹¨κ³„λŠ” FIN(μ’…λ£Œ) νŒ¨ν‚·μž…λ‹ˆλ‹€. 연결을 μ’…λ£Œν•˜λ €κ³  ν•  λ•Œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ FIN νŒ¨ν‚·μ„ μ„œλ²„λ‘œ λ³΄λƒ…λ‹ˆλ‹€.

  2. ACK : 두 번째 λ‹¨κ³„λŠ” ACK νŒ¨ν‚·μž…λ‹ˆλ‹€. μ„œλ²„κ°€ FIN νŒ¨ν‚·μ„ μˆ˜μ‹ ν•˜λ©΄ ACK νŒ¨ν‚·μ„ λ‹€μ‹œ ν΄λΌμ΄μ–ΈνŠΈλ‘œ λ³΄λƒ…λ‹ˆλ‹€. (μ΄λ•Œ λͺ¨λ“  데이터λ₯Ό 보내기 μœ„ν•΄ CLOSE_WAIT μƒνƒœκ°€ λ©λ‹ˆλ‹€.)

  3. FIN : 그런 λ‹€μŒ μ„œλ²„λŠ” μžμ‹ μ˜ FIN νŒ¨ν‚·μ„ ν΄λΌμ΄μ–ΈνŠΈλ‘œ 보내 연결을 μ’…λ£Œν•  κ²ƒμž„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

  4. ACK : λ§ˆμ§€λ§‰μœΌλ‘œ ν΄λΌμ΄μ–ΈνŠΈλŠ” FIN νŒ¨ν‚·μ„ μˆ˜μ‹ ν•˜κ³  ν™•μΈν–ˆλ‹€λŠ” ACK νŒ¨ν‚·μ„ μ„œλ²„λ‘œ λ‹€μ‹œ μ „μ†‘ν•©λ‹ˆλ‹€. (아직 μ„œλ²„λ‘œλΆ€ν„° 받지 λͺ»ν•œ 데이터가 μžˆμ„ 수 μžˆμœΌλ―€λ‘œ TIME_WAIT을 톡해 κΈ°λ‹€λ¦½λ‹ˆλ‹€.)

    • μ„œλ²„λŠ” ACKλ₯Ό 받은 이후 μ†ŒμΌ“μ„ λ‹«μŠ΅λ‹ˆλ‹€ (Closed)
    • IME_WAIT μ‹œκ°„μ΄ λλ‚˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈλ„ λ‹«μŠ΅λ‹ˆλ‹€ (Closed)

μ΄λ ‡κ²Œ 4번의 톡신이 μ™„λ£Œλ˜λ©΄ 연결이 ν•΄μ œλ©λ‹ˆλ‹€.

μš”μ•½

4 way handshakeλŠ” 두 λŒ€μ˜ 컴퓨터가 일련의 λ©”μ‹œμ§€λ₯Ό κ΅ν™˜ν•˜μ—¬ μ„œλ‘œ 연결을 μ’…λ£Œν•˜λŠ” κ³Όμ •μž…λ‹ˆλ‹€.

마치 두 μ‚¬λžŒμ΄ μ „ν™”λ‘œ 

C - "μ’‹μ•„, μ–˜κΈ° λ‹€ ν–ˆμ–΄."

S - "μ•Œμ•˜μ–΄, λ“€μ—ˆμ–΄"

S - "사싀 λ‚˜λ„ 끝났어"

C - "μ•Œμ•˜μ–΄, μ•ˆλ…•!"

라고 λ§ν•˜λŠ” 것과 κ°™μŠ΅λ‹ˆλ‹€.

Reference

https://sjlim5092.tistory.com/35