[Computer Science][Network] πŸš€ TCP 3-way & 4-way Handshake μ™„λ²½ 정볡!

κΉ€μƒμš±Β·2024λ…„ 8μ›” 17일
post-thumbnail

πŸ“‘ [TCP] 3-way Handshake & 4-way Handshake: μ™„λ²½ κ°€μ΄λ“œ

TCP(Transmission Control Protocol)μ—μ„œ 데이터 전솑 전에 연결을 μ„€μ •ν•˜κ³  μ’…λ£Œν•˜λŠ” 과정은 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. 이 κΈ€μ—μ„œλŠ” 3-way Handshake와 4-way Handshake에 λŒ€ν•΄ μžμ„Ένžˆ μ„€λͺ…ν•©λ‹ˆλ‹€. 이 과정듀은 TCP의 μ‹ λ’°μ„± μžˆλŠ” 톡신을 보μž₯ν•˜λŠ” 데 핡심적인 역할을 ν•©λ‹ˆλ‹€.


TCP 헀더

  • TCP ν—€λ”λŠ” μ†‘μ‹ μžμ™€ μˆ˜μ‹ μž 간에 데이터λ₯Ό μ „λ‹¬ν•˜λ©΄μ„œ κ·Έ κ³Όμ •μ—μ„œ λ°œμƒν•  수 μžˆλŠ” λ‹€μ–‘ν•œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” 데 ν•„μš”ν•œ 정보λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€. TCP ν—€λ”λŠ” κ³ μ •λœ 20 λ°”μ΄νŠΈμ˜ κΈ°λ³Έ 헀더와 선택적인 μΆ”κ°€ μ˜΅μ…˜ ν•„λ“œλ‘œ κ΅¬μ„±λ©λ‹ˆλ‹€.

μ£Όμš” ν•„λ“œ

  1. μΆœλ°œμ§€ 포트 (Source Port, 16λΉ„νŠΈ)
    • 데이터λ₯Ό μ†‘μ‹ ν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‚¬μš©ν•œ 포트 λ²ˆν˜Έμž…λ‹ˆλ‹€.
    • ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„ κ°„μ˜ ν†΅μ‹ μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈ μΈ‘ 포트 번호둜 μ‚¬μš©λ©λ‹ˆλ‹€.
  2. λͺ©μ μ§€ 포트 (Destination Port, 16λΉ„νŠΈ)
    • 데이터λ₯Ό μˆ˜μ‹ ν•  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ‚¬μš©ν•  포트 λ²ˆν˜Έμž…λ‹ˆλ‹€.
    • μ„œλ²„ μΈ‘μ—μ„œ νŠΉμ • μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ 데이터λ₯Ό 전달할 λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€.(예: HTTPλŠ” 80번 포트, HTTPSλŠ” 443번 포트)
    • 포트 λ²ˆν˜ΈλŠ” 즉, μ–΄λ–€ μ„œλΉ„μŠ€(μ—¬κΈ°μ„œλŠ” HTTPλ‚˜ HTTPS)
  3. μˆœμ„œ 번호 (Sequence Number, 32λΉ„νŠΈ)
    • μ†‘μ‹ λœ λ°μ΄ν„°μ˜ λ°”μ΄νŠΈ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ²ˆν˜Έμž…λ‹ˆλ‹€.
    • TCPλŠ” 데이터 μŠ€νŠΈλ¦Όμ„ μž‘μ€ μ„Έκ·Έλ¨ΌνŠΈλ‘œ λ‚˜λˆ„μ–΄ μ „μ†‘ν•˜λ―€λ‘œ, μˆœμ„œ 번호λ₯Ό 톡해 각 μ„Έκ·Έλ¨ΌνŠΈμ˜ μœ„μΉ˜λ₯Ό μΆ”μ ν•˜κ³  μ˜¬λ°”λ₯Έ μˆœμ„œλ‘œ μž¬μ‘°λ¦½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  4. 확인 응닡 번호 (Acknowledgement Number, 32λΉ„νŠΈ)
    • μˆ˜μ‹ μžκ°€ λ‹€μŒμ— μˆ˜μ‹ ν•˜κΈ°λ₯Ό κΈ°λŒ€ν•˜λŠ” κΈ°λŒ€ν•˜λŠ” λ°”μ΄νŠΈμ˜ μˆœμ„œ λ²ˆν˜Έμž…λ‹ˆλ‹€.
    • μ†‘μ‹ μžλŠ” 이 번호λ₯Ό ν™•μΈν•¨μœΌλ‘œμ¨ μˆ˜μ‹ μžκ°€ 데이터λ₯Ό μ •μƒμ μœΌλ‘œ λ°›μ•˜λŠ”μ§€ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
  5. 데이터 μ˜€ν”„μ…‹ (Data Offset, 4λΉ„νŠΈ)
    • TCP ν—€λ”μ˜ 길이λ₯Ό λ‚˜νƒ€λ‚΄λŠ” ν•„λ“œμž…λ‹ˆλ‹€. 이 값은 TCP ν—€λ”μ˜ μ‹œμž‘λΆ€ν„° 데이터가 μ‹œμž‘λ˜λŠ” μœ„μΉ˜κΉŒμ§€μ˜ 기링λ₯Ό 4λ°”μ΄νŠΈ λ‹¨μœ„λ‘œ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • μ΅œμ†Œ 값은 5(20λ°”μ΄νŠΈ)둜, κΈ°λ³Έ TCP 헀더 크기λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  6. μ˜ˆμ•½ (Reserved, 3λΉ„νŠΈ)
    • 미래의 μ‚¬μš©μ„ μœ„ν•΄ μ˜ˆμ•½λœ ν•„λ“œμž…λ‹ˆλ‹€.
    • ν˜„μž¬λŠ” μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ©°, 항상 0으둜 μ„€μ •λ©λ‹ˆλ‹€.
  7. **ν”Œλž˜κ·Έ (Flags, 9λΉ„νŠΈ)
    • TCP μ„Έκ·Έλ¨ΌνŠΈμ˜ μƒνƒœλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ œμ–΄ λΉ„νŠΈμž…λ‹ˆλ‹€. 각 ν”Œλž˜κ·ΈλŠ” νŠΉμ • μ œμ–΄ κΈ°λŠ₯을 μˆ˜ν–‰ν•©λ‹ˆλ‹€.
      • URG (Urgent) : κΈ΄κΈ‰ 포인터 ν•„λ“œκ°€ μœ νš¨ν•¨μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
      • ACK (Acknowledgment) : 확인 응닡 번호 ν•„λ“œκ°€ μœ νš¨ν•¨μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
      • PSH (Push) : 데이터λ₯Ό μ¦‰μ‹œ μ „λ‹¬ν•˜λ„λ‘ μš”μ²­ν•©λ‹ˆλ‹€.
      • RST (Reset) : 연결을 μž¬μ„€μ •ν•©λ‹ˆλ‹€.
      • SYN (Synchronize) : μ—°κ²° 섀정을 μ‹œμž‘ν•©λ‹ˆλ‹€.
      • FIN (Finish) : 연결을 μ’…λ£Œν•©λ‹ˆλ‹€.
  8. **μœˆλ„μš° 크기 (Window Size, 16λΉ„νŠΈ)
    • μˆ˜μ‹ μžκ°€ μˆ˜μ‹ ν•  수 μžˆλŠ” μ΅œλŒ€ 데이터 크기λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • TCP의 흐름 μ œμ–΄ λ©”μ»€λ‹ˆμ¦˜μ˜ μΌλΆ€λ‘œ, μ†‘μ‹ μžκ°€ λ„ˆλ¬΄ λ§Žμ€ 데이터λ₯Ό 보내지 μ•Šλ„λ‘ μ‘°μ ˆν•©λ‹ˆλ‹€.
  9. **체크섬 (Checksum, 16λΉ„νŠΈ)
    • TCP 헀더와 데이터λ₯Ό ν¬ν•¨ν•œ μ„Έκ·Έλ¨ΌνŠΈμ˜ 였λ₯˜λ₯Ό κ²€μΆœν•˜κΈ° μœ„ν•œ ν•„λ“œμž…λ‹ˆλ‹€.
    • 솑신 μΈ‘μ—μ„œ κ³„μ‚°λœ 체크섬이 μˆ˜μ‹  μΈ‘μ—μ„œ λ‹€μ‹œ κ³„μ‚°λœ κ°’κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠμœΌλ©΄ 였λ₯˜κ°€ λ°œμƒν•œ κ²ƒμœΌλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€.
  10. κΈ΄κΈ‰ 포인터 (Urgent Pointer, 16λΉ„νŠΈ)
  • URG ν”Œλž˜κ·Έκ°€ μ„€μ •λœ 경우 μ‚¬μš©λ˜λ©°, κΈ΄κΈ‰ 데이터λ₯Ό ν‘œμ‹œν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • 데이터 슀트림 λ‚΄μ˜ κΈ΄κΈ‰ 데이터가 λλ‚˜λŠ” μœ„μΉ˜λ₯Ό μ§€μ •ν•©λ‹ˆλ‹€.
  1. μ˜΅μ…˜ (Options, κ°€λ³€ 길이)
  • TCP ν—€λ”μ˜ κΈ°λ³Έ ν•„λ“œ 외에 좔가적인 κΈ°λŠ₯을 μ œκ³΅ν•˜κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.
  • 예: 선택적 ACK(SACK), μ΅œλŒ€ μ„Έκ·Έλ¨ΌνŠΈ 크기(MSS) μ§€μ • 등이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
  1. νŒ¨λ”© (Padding, κ°€λ³€ 길이)
  • TCP ν—€λ”μ˜ 길이가 32λΉ„νŠΈ(4λ°”μ΄νŠΈ)의 λ°°μˆ˜κ°€ λ˜λ„λ‘ μ±„μ›Œμ§€λŠ” ν•„λ“œμž…λ‹ˆλ‹€.
  • μ΄λŠ” 데이터 정렬을 λ§žμΆ”κΈ° μœ„ν•΄ μ‚¬μš©λ©λ‹ˆλ‹€.

🀝 3-way Handshake - μ—°κ²° 성립

TCPλŠ” 데이터λ₯Ό μ •ν™•ν•˜κ²Œ μ „μ†‘ν•˜κΈ° μœ„ν•΄ 연결을 μ„±λ¦½ν•˜λŠ” 과정이 ν•„μš”ν•©λ‹ˆλ‹€. 이 과정이 λ°”λ‘œ 3-way Handshakeμž…λ‹ˆλ‹€.

  1. SYN (Synchronize):

    • ν΄λΌμ΄μ–ΈνŠΈ(연결을 μ‹œμž‘ν•˜λ €λŠ” μž₯치)κ°€ μ„œλ²„(연결을 받을 μž₯치)μ—κ²Œ SYN νŒ¨ν‚·μ„ λ³΄λƒ…λ‹ˆλ‹€. 이 νŒ¨ν‚·μ€ 연결을 μ‹œμž‘ν•˜κ³  μ‹Άλ‹€λŠ” μ‹ ν˜Έλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
    • μ΄λ•Œ, ν΄λΌμ΄μ–ΈνŠΈλŠ” 초기 μ‹œν€€μŠ€ 번호(Sequence Number)λ₯Ό μ„€μ •ν•˜μ—¬ μ „μ†‘ν•©λ‹ˆλ‹€. 이 λ²ˆν˜ΈλŠ” λ°μ΄ν„°μ˜ μˆœμ„œλ₯Ό κ΄€λ¦¬ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. ( seq = x )
    • μ‹œν€€μŠ€ λ²ˆν˜ΈλŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈ‘μ—μ„œ 데이터 전솑이 μ‹œμž‘λ  λ•Œ μ‚¬μš©ν•˜λŠ” 첫 번째 νŒ¨ν‚· 번호λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€.
  2. SYN-ACK (Synchronize-Acknowledge):

    • μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° SYN νŒ¨ν‚·μ„ λ°›μœΌλ©΄, 이λ₯Ό μˆ˜λ½ν•˜λŠ” 의미둜 SYN-ACK νŒ¨ν‚·μ„ λ³΄λƒ…λ‹ˆλ‹€.
    • 이 νŒ¨ν‚·μ—λŠ” μ„œλ²„μ˜ μ‹œν€€μŠ€ 번호 ( seq = y ) 와 ν΄λΌμ΄μ–ΈνŠΈμ˜ SYN μš”μ²­μ„ ν™•μΈν–ˆλ‹€λŠ” 의미의 ACK(Acknowledgment) 번호 ( ack = x+1 ) κ°€ ν¬ν•¨λ©λ‹ˆλ‹€.
    • seq = yλŠ” μ„œλ²„ μΈ‘μ—μ„œ 데이터 전솑이 μ‹œμž‘λ  λ•Œ μ‚¬μš©ν•˜λŠ” 첫 번째 번호λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. λ™μ‹œμ—, ACK λ²ˆν˜ΈλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 μ‹œν€€μŠ€ 번호 xλ₯Ό 잘 λ°›μ•˜κ³ , λ‹€μŒμ— 받을 λ°μ΄ν„°λŠ” x+1λΆ€ν„°λΌλŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
    • SYN-ACK νŒ¨ν‚·μ€ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ "λ‚˜λ„ μ€€λΉ„κ°€ λ˜μ—ˆκ³ , λ„ˆμ˜ μš”μ²­μ„ λ°›μ•˜μ–΄"λΌλŠ” 응닡을 μ˜λ―Έν•©λ‹ˆλ‹€.
  3. ACK (Acknowledge):

    • ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„λ‘œλΆ€ν„° SYN-ACK νŒ¨ν‚·μ„ λ°›μœΌλ©΄, 연결이 μ„±κ³΅μ μœΌλ‘œ μ„€μ •λ˜μ—ˆμŒμ„ μ•Œλ¦¬κΈ° μœ„ν•΄ ACK νŒ¨ν‚·μ„ λ‹€μ‹œ μ„œλ²„λ‘œ λ³΄λƒ…λ‹ˆλ‹€.
    • μ΄λ•Œ ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„κ°€ 보낸 μ‹œν€€μŠ€ 번호 y에 1을 λ”ν•œ 값을 ACK 번호둜 μ„€μ •ν•˜μ—¬ ACK = y+1을 λ³΄λƒ…λ‹ˆλ‹€. 이 ACK λ²ˆν˜ΈλŠ” μ„œλ²„κ°€ 보낸 yλ₯Ό 잘 λ°›μ•˜κ³ , λ‹€μŒμ— 받을 λ°μ΄ν„°λŠ” y+1λΆ€ν„°λΌλŠ” μ˜λ―Έμž…λ‹ˆλ‹€.
    • 이 νŒ¨ν‚·μ€ μ„œλ²„μ˜ μ‹œν€€μŠ€ 번호λ₯Ό ν™•μΈν•˜λ©°, 이제 데이터 전솑이 κ°€λŠ₯ν•œ μƒνƒœμž„μ„ μ•Œλ¦½λ‹ˆλ‹€.

μ΄λ ‡κ²Œ 3번의 톡신이 μ™„λ£Œλ˜λ©΄ 연결이 μ„±λ¦½λ©λ‹ˆλ‹€. (이 과정을 3-way Handshake라고 λΆ€λ¦…λ‹ˆλ‹€)


πŸšͺ 4-way Handshake - μ—°κ²° ν•΄μ œ

μ—°κ²° 성립 ν›„, TCP 연결을 μ•ˆμ „ν•˜κ²Œ μ’…λ£Œν•˜κΈ° μœ„ν•΄ 4-way Handshake 과정이 μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

  1. FIN (Finish) νŒ¨ν‚· 전솑:

    • ν΄λΌμ΄μ–ΈνŠΈκ°€ 연결을 μ’…λ£Œν•˜κΈ°λ‘œ κ²°μ •ν•˜λ©΄, μ„œλ²„μ—κ²Œ FIN νŒ¨ν‚·μ„ λ³΄λƒ…λ‹ˆλ‹€.
    • 이 νŒ¨ν‚·μ€ "더 이상 데이터λ₯Ό μ „μ†‘ν•˜μ§€ μ•Šκ² λ‹€"λŠ” μ‹ ν˜Έλ₯Ό λ‚˜νƒ€λ‚΄λ©°, ν΄λΌμ΄μ–ΈνŠΈλŠ” 더 이상 데이터λ₯Ό 보내지 μ•Šκ² λ‹€λŠ” μ˜μ‚¬λ₯Ό ν‘œν˜„ν•©λ‹ˆλ‹€.
    • μ΄λ•Œ ν΄λΌμ΄μ–ΈνŠΈλŠ” FIN νŒ¨ν‚·μ— ν˜„μž¬μ˜ μ‹œν€€μŠ€ 번호λ₯Ό ν¬ν•¨μ‹œν‚΅λ‹ˆλ‹€.
    • ν΄λΌμ΄μ–ΈνŠΈλŠ” FIN_WAIT_1 μƒνƒœμ— μ§„μž…ν•©λ‹ˆλ‹€. 즉, ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ—κ²Œ FIN νŒ¨ν‚·μ„ 보내고 ACK 응닡을 κΈ°λ‹€λ¦¬λŠ” μƒνƒœμž…λ‹ˆλ‹€.
  2. ACK (Acknowledge) νŒ¨ν‚· 전솑:

    • μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈλ‘œλΆ€ν„° FIN νŒ¨ν‚·μ„ λ°›μœΌλ©΄, 이λ₯Ό ν™•μΈν–ˆλ‹€λŠ” 의미둜 ACK νŒ¨ν‚·μ„ ν΄λΌμ΄μ–ΈνŠΈλ‘œ λ³΄λƒ…λ‹ˆλ‹€.
    • 이 νŒ¨ν‚·μ€ "FIN νŒ¨ν‚·μ€ 잘 λ°›μ•˜κ³ , λ‚˜λ„ μ•Œμ•˜λ‹€"λŠ” 의미λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. ν•˜μ§€λ§Œ 이 λ‹¨κ³„μ—μ„œ μ„œλ²„λŠ” μ—¬μ „νžˆ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 데이터λ₯Ό 보낼 수 μžˆμŠ΅λ‹ˆλ‹€.
    • ACK νŒ¨ν‚·μ€ ν΄λΌμ΄μ–ΈνŠΈμ˜ μ‹œν€€μŠ€ λ²ˆν˜Έμ— λŒ€ν•œ μ‘λ‹΅μœΌλ‘œ, ACK λ²ˆν˜ΈλŠ” ν΄λΌμ΄μ–ΈνŠΈκ°€ 보낸 FIN νŒ¨ν‚·μ˜ μ‹œν€€μŠ€ λ²ˆν˜Έμ— 1을 λ”ν•œ 값이 λ©λ‹ˆλ‹€.
    • μ„œλ²„λŠ” CLOSE_WAIT μƒνƒœλ‘œ μ§„μž…ν•©λ‹ˆλ‹€. 즉, μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ FIN을 λ°›μ•„λ“€μ˜€κ³ , 아직 μ„œλ²„μ—μ„œ 전솑할 데이터가 남아 μžˆλŠ” 경우, 이 데이터λ₯Ό λ§ˆλ¬΄λ¦¬ν•˜λŠ” 단계에 μžˆμŠ΅λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„λ‘œλΆ€ν„° ACK νŒ¨ν‚·μ„ 받은 ν›„, FIN_WAIT_2 μƒνƒœμ— μ§„μž…ν•©λ‹ˆλ‹€. 즉, μ„œλ²„λ‘œλΆ€ν„° ACKλ₯Ό λ°›κ³  이제 μ„œλ²„μ˜ FIN νŒ¨ν‚·μ„ 기닀리고 μžˆλŠ” μƒνƒœμž…λ‹ˆλ‹€.
  3. μ„œλ²„μ˜ FIN νŒ¨ν‚· 전솑:

    • μ„œλ²„λ„ 이제 데이터λ₯Ό λͺ¨λ‘ μ „μ†‘ν•˜κ³  연결을 μ’…λ£Œν•  μ€€λΉ„κ°€ 되면, FIN νŒ¨ν‚·μ„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ λ³΄λƒ…λ‹ˆλ‹€.
    • 이 FIN νŒ¨ν‚·μ€ μ„œλ²„κ°€ 더 이상 데이터λ₯Ό 보내지 μ•Šκ² λ‹€λŠ” μ˜μ‚¬λ₯Ό ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ „λ‹¬ν•©λ‹ˆλ‹€. μ΄λ•Œ μ„œλ²„λŠ” μžμ‹ μ˜ μ‹œν€€μŠ€ 번호λ₯Ό ν¬ν•¨μ‹œμΌœ μ „μ†‘ν•©λ‹ˆλ‹€.
    • μ„œλ²„λŠ” LAST_ACK μƒνƒœλ‘œ μ§„μž…ν•©λ‹ˆλ‹€. 즉, μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ FIN νŒ¨ν‚·μ„ 보낸 ν›„, ν΄λΌμ΄μ–ΈνŠΈμ˜ μ΅œμ’… ACK 응닡을 κΈ°λ‹€λ¦¬λŠ” μƒνƒœμž…λ‹ˆλ‹€.
  4. ν΄λΌμ΄μ–ΈνŠΈμ˜ ACK νŒ¨ν‚· 전솑:

    • ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„λ‘œλΆ€ν„° FIN νŒ¨ν‚·μ„ λ°›μœΌλ©΄, 이λ₯Ό ν™•μΈν•˜κ³  ACK νŒ¨ν‚·μ„ μ„œλ²„λ‘œ λ³΄λƒ…λ‹ˆλ‹€.
    • 이 ACK νŒ¨ν‚·μ€ μ„œλ²„μ˜ FIN νŒ¨ν‚·μ— λŒ€ν•œ 응닡이며, μ„œλ²„κ°€ 보낸 μ‹œν€€μŠ€ λ²ˆν˜Έμ— 1을 λ”ν•œ ACK 번호λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
    • 이 νŒ¨ν‚·μ΄ μ „μ†‘λœ ν›„, 연결이 μ™„μ „νžˆ μ’…λ£Œλ©λ‹ˆλ‹€.
    • ν΄λΌμ΄μ–ΈνŠΈλŠ” TIME_WAIT μƒνƒœλ‘œ μ§„μž…ν•©λ‹ˆλ‹€. 즉, ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ FIN에 λŒ€ν•΄ μ΅œμ’… ACKλ₯Ό 보낸 ν›„, 일정 μ‹œκ°„ λ™μ•ˆ λŒ€κΈ°ν•˜λŠ” μƒνƒœμž…λ‹ˆλ‹€. 이 μƒνƒœμ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλŠ” λ§Œμ•½ μ„œλ²„κ°€ ACKλ₯Ό λ°›μ§€ λͺ»ν•˜κ³  μž¬μ „μ†‘ μš”μ²­μ„ ν•œλ‹€λ©΄, 이λ₯Ό μ²˜λ¦¬ν•  μ€€λΉ„κ°€ λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
    • μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈμ˜ ACKλ₯Ό 받은 ν›„ CLOSED μƒνƒœλ‘œ μ§„μž…ν•˜λ©°, 연결이 μ™„μ „νžˆ μ’…λ£Œλ©λ‹ˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈλ„ 일정 μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ CLOSED μƒνƒœλ‘œ μ§„μž…ν•©λ‹ˆλ‹€. CLOSEDλŠ” μ–‘μͺ½ λͺ¨λ‘ 연결이 μ™„μ „νžˆ μ’…λ£Œλœ μƒνƒœμž…λ‹ˆλ‹€.

μ™œ 단계가 λ‹€λ₯ΌκΉŒ?

TCP ν†΅μ‹ μ—μ„œ μ’…λ£Œμ‹œμ—λŠ” 3 way-handshakeκ°€ μ•„λ‹Œ 4-way andshakeλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. 3 way-handshake λ°©μ‹μ—μ„œλŠ” SYN-ACK νŒ¨ν‚·μ„ 톡해 ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ λ™μ‹œμ— 연결을 μ„€μ •ν•˜λ €κ³  ν•˜κΈ° λ•Œλ¬Έμ— κ°„μ†Œν™”λ˜μ–΄ 3λ‹¨κ³„λ‘œ 연결이 μ„±λ¦½λ©λ‹ˆλ‹€.

ν•˜μ§€λ§Œ 4 way-handshake λ°©μ‹μ—μ„œλŠ” FIN νŒ¨ν‚·μ΄ λ…λ¦½μ μœΌλ‘œ 처리되기 λ•Œλ¬Έμ—, 즉 ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ 각각 연결을 μ’…λ£Œν•  μ€€λΉ„κ°€ λ˜μ–΄ μžˆμŒμ„ κ°œλ³„μ μœΌλ‘œ 확인해야 ν•˜κΈ° λ•Œλ¬Έμ— 4단계가 ν•„μš”ν•©λ‹ˆλ‹€.


이 κΈ€μ—μ„œλŠ” TCP 3-way Handshake와 4-way Handshake에 λŒ€ν•΄ μ„€λͺ…ν•˜μ˜€μŠ΅λ‹ˆλ‹€. 이 과정듀은 TCPκ°€ 데이터 전솑을 μ‹œμž‘ν•˜κ³  μ’…λ£Œν•˜λŠ” 데 ν•„μˆ˜μ μΈ λΆ€λΆ„μœΌλ‘œ, μ‹ λ’°μ„±κ³Ό 정확성을 보μž₯ν•˜κΈ° μœ„ν•΄ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ„€νŠΈμ›Œν¬ ν”„λ‘œν† μ½œμ—μ„œ μ΄λŸ¬ν•œ μ ˆμ°¨λ“€μ΄ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”μ§€ μ΄ν•΄ν•˜λŠ” 것은 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. 이 글이 도움이 되길 λ°”λžλ‹ˆλ‹€! 😊

0개의 λŒ“κΈ€