πŸ“‚ λ„€νŠΈμ›Œν¬/성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리

μ„œλ²„μ— μ ‘μ†ν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]

Amenable 2023. 7. 18. 07:02

  이전 글을 톡해 μ†ŒμΌ“μ„ μž‘μ„±ν•˜λŠ” 것을 μ•Œμ•„λ³΄μ•˜λ‹€.

  μ΄λ²ˆμ—λŠ” μž‘μ„±λœ μ†ŒμΌ“μ„ μ΄μš©ν•˜μ—¬ μ„œλ²„μ— μ ‘μ†ν•˜λŠ” 것을 μ•Œμ•„λ³΄μž.

 

πŸ“™ 1. μ ‘μ†μ˜ 의미

  μ„œλ²„μ— 접속을 ν•œλ‹€λŠ” 것은 톡신 μƒλŒ€μ™€ μ œμ–΄ 정보λ₯Ό μ£Όκ³ λ°›μ•„ μ†ŒμΌ“μ— ν•„μš”ν•œ 정보λ₯Ό κΈ°λ‘ν•˜κ³  데이터 솑·μˆ˜μ‹ μ΄ κ°€λŠ₯ν•œ μƒνƒœλ‘œ λ§Œλ“œλŠ” 것을 μ˜λ―Έν•œλ‹€.

  μ œμ–΄ μ •λ³΄λž€ IP μ£Όμ†Œλ‚˜ 포트 λ²ˆν˜Έμ™€ 같이 데이터 솑·μˆ˜μ‹  λ™μž‘μ„ μ œμ–΄ν•˜κΈ° μœ„ν•œ 정보닀.

  λ˜ν•œ, 데이터 솑·μˆ˜μ‹  λ™μž‘μ„ μ‹€ν–‰ν•  λ•ŒλŠ” 솑·μˆ˜μ‹ ν•˜λŠ” 데이터λ₯Ό μΌμ‹œμ μœΌλ‘œ μ €μž₯ν•˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­(=버퍼 λ©”λͺ¨λ¦¬)이 ν•„μš”ν•œλ°, 버퍼 λ©”λͺ¨λ¦¬μ˜ 확보도 접속을 ν•  λ•Œ μ‹€ν–‰λœλ‹€.

 

 

πŸ“™ 2. λ§¨ μ•žλΆ€λΆ„에 μ œμ–΄ μ •보λ₯Ό κΈ°λ‘ν•œ ν—€λ”λ₯Ό λ°°μΉ˜ν•œλ‹€.

  μ œμ–΄ μ •λ³΄λŠ” 'TCP 헀더에 κΈ°μž…λ˜λŠ” 정보'와 'μ†ŒμΌ“(ν”„λ‘œν† μ½œ μŠ€νƒμ˜ λ©”λͺ¨λ¦¬ μ˜μ—­)에 κΈ°λ‘λ˜λŠ” 정보'둜 λ‚˜λ‰œλ‹€.

πŸ“ 1. TCP 헀더에 κΈ°μž…λ˜λŠ” 정보

  TCP 헀더에 κΈ°μž…λ˜λŠ” μ œμ–΄ μ •λ³΄λŠ” ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ μ„œλ‘œ 연락을 μ ˆμΆ©ν•˜κΈ° μœ„ν•΄ μ£Όκ³ λ°›λŠ” μ œμ–΄ 정보닀.

  이 ν•­λͺ©μ€ κ³ μ •ν™”λ˜μ–΄ 있기 λ•Œλ¬Έμ— '접속 단계, 솑·μˆ˜μ‹  단계, μ—°κ²° 끊기 단계'μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ λŒ€ν™”ν•  λ•Œλ§ˆλ‹€ νŒ¨ν‚·μ— ν•΄λ‹Ή μ œμ–΄ 정보λ₯Ό λΆ€κ°€ν•œλ‹€.

  즉, 헀더에 κΈ°μž…λœ μ œμ–΄μ •λ³΄λ₯Ό μ΄μš©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ μ„œλ‘œ 연락을 μ£Όκ³ λ°›λŠ” 것이닀.

 

πŸ“ 2. μ†ŒμΌ“(ν”„λ‘œν† μ½œ μŠ€νƒμ˜ λ©”λͺ¨λ¦¬ μ˜μ—­)에 κΈ°λ‘λ˜λŠ” 정보

  두 번째 μ œμ–΄ μ •λ³΄λŠ” 'μ†ŒμΌ“μ— κΈ°λ‘λ˜μ–΄ ν”„λ‘œν† μ½œ μŠ€νƒμ˜ λ™μž‘μ„ μ œμ–΄ν•˜κΈ° μœ„ν•œ 것'이닀.

  μ—¬κΈ°μ—λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ ν†΅μ§€λœ 정보, 톡신 μƒλŒ€λ‘œλΆ€ν„° 받은 정보, 솑·μˆ˜μ‹  λ™μž‘μ˜ μ§„ν–‰ 상황 등이 μˆ˜μ‹œλ‘œ 기둝되고, ν”„λ‘œν† μ½œ μŠ€νƒμ€ μ΄λŸ¬ν•œ 정보λ₯Ό μ°Έμ‘°ν•˜μ—¬ λ™μž‘ν•˜κ²Œ λœλ‹€.

 

  μ†ŒμΌ“μ— κΈ°λ‘ν•˜λŠ” μ œμ–΄ μ •λ³΄λŠ” κ³ μ •ν™”λ˜μ–΄ μžˆμ§€ μ•Šκ³  ν”„λ‘œν† μ½œ μŠ€νƒμ„ λ§Œλ“œλŠ” μ‚¬λžŒμ— 따라 달라진닀. κ·ΈλŸ¬λ‚˜ μ†ŒμΌ“μ˜ μ œμ–΄ μ •보 μ€‘μ—μ„œ μ€‘μš”ν•œ κ²ƒμ€ λͺ…령에 μ˜ν•΄ ν‘œμ‹œλ  μˆ˜ μžˆλŠ”λ°, μ΄κ²ƒμ€ OS의 ν”„λ‘œν† μ½œ μŠ€νƒμ—λ„ κ³΅ν†΅μ΄λ‹€.

 

 

πŸ“™ 3. μ ‘속 λ™μž‘μ˜ μ‹€μ²΄

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ Socket λΌμ΄λΈŒλŸ¬λ¦¬μ˜ connectλ₯Ό ν˜ΈμΆœν•˜λŠ” κ²ƒλΆ€ν„° μ‹œμž‘ν•˜μ—¬ μ ‘속 λ™μž‘을 μ‚΄νŽ΄λ³΄λ„λ‘ ν•˜μž.

 

  1. Socket 라이브러리의 connect 호좜
    connect(<λ””μŠ€ν¬λ¦½ν„°>, <μ„œλ²„ 츑의 IP μ£Όμ†Œμ™€ ν¬νŠΈ λ²ˆν˜Έ>,...)
  2. μ œμ–΄ 정보λ₯Ό κΈ°λ‘ν•œ TCP 헀더λ₯Ό λ§Œλ“ λ‹€.
    컨트둀 λΉ„νŠΈμΈ SYNλΌλŠ” λΉ„νŠΈλ₯Ό 1둜 λ§Œλ“ λ‹€.
  3. λ§Œλ“€μ–΄μ§„ TCP ν—€λ”λ₯Ό IP λ‹΄λ‹Ή λΆ€λΆ„에 κ±΄λ„€μ£Όμ–΄ μ†‘μ‹ ν•˜λ„λ‘ μ˜λ’°ν•œλ‹€.
  4. μ„œλ²„ μΈ‘의 μ ‘속을 κΈ°λ‹€λ¦¬λŠ” μƒνƒœμ˜ μ§€μ •λœ μ†ŒμΌ“에 λ„μ°©ν•œλ‹€.
  5. ν΄λΌμ΄μ–ΈνŠΈμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ μ œμ–΄ μ •보λ₯Ό κΈ°λ‘ν•œ TCP ν—€λ”λ₯Ό λ§Œλ“ λ‹€.
    SYN λΉ„νŠΈλΏλ§Œ μ•„λ‹ˆλΌ ACKλΌλŠ” μ»¨νŠΈλ‘€ λΉ„νŠΈλ„ 1둜 λ§Œλ“ λ‹€.
    ACKλ₯Ό 1둜 λ§Œλ“œλŠ” μ΄μœ λŠ” νŒ¨ν‚·μ„ μž˜ λ°›μ•˜λ‹€λŠ” κ²ƒμ„ μ•Œλ¦¬κΈ° μœ„ν•œ κ²ƒμ΄λ‹€.
  6. μ„œλ²„ μΈ‘의 TCP ν—€λ”λ₯Ό IP λ‹΄λ‹Ή λΆ€λΆ„에 κ±΄λ„€μ£Όμ–΄ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ μ‘닡을 μ „μ†‘ν•œλ‹€.
  7. μ„œλ²„ μΈ‘μœΌλ‘œλΆ€ν„° κ±΄λ„€λ°›μ€ μ‘λ‹΅μ˜ TCP ν—€λ”λ₯Ό μ‘°μ‚¬ν•˜μ—¬ μ„œλ²„ 츑의 μ ‘속 λ™μž‘이 μ„±κ³΅ν–ˆλŠ”μ§€ ν™•μΈν•œλ‹€.
    SYN와 ACKκ°€ 1이면 μ ‘속 μ„±κ³΅μ΄λ‹€.
    접속 μ™„λ£Œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” μ œμ–΄ μ •보λ₯Ό μ†ŒμΌ“에 κΈ°λ‘ν•œλ‹€.
  8. νŒ¨ν‚·μ΄ λ„μ°©ν•œ κ²ƒμ„ μ„œλ²„에 μ•Œλ¦°λ‹€.
    ACK λΉ„νŠΈλ₯Ό 1둜 λ§Œλ“  TCP ν—€λ”λ₯Ό μ „μ†‘ν•œλ‹€.

  μœ„μ˜ 과정을 거치면 접속이 μ™„λ£Œλ˜κ³  솑·μˆ˜μ‹ ν•  수 μžˆλŠ” μƒνƒœκ°€ λ˜μ—ˆλ‹€κ³  ν•  수 μžˆλ‹€.

  νŒŒμ΄ν”„μ™€ 같은 κ²ƒμœΌλ‘œ μ†ŒμΌ“μ΄ μ—°κ²°λ˜μ—ˆλ‹€κ³  생각할 수 μžˆλŠ”λ°, λ„€νŠΈμ›Œν¬μ—μ„œ 이 νŒŒμ΄ν”„λ₯Ό '컀λ„₯μ…˜'이라고 ν•œλ‹€.

  컀λ„₯μ…˜μ€ 데이터 솑·μˆ˜μ‹  λ™μž‘μ„ κ³„μ†ν•˜κ³  μžˆλŠ” λ™μ•ˆ, 즉 closeλ₯Ό ν˜ΈμΆœν•˜μ—¬ 연결을 λŠμ„ λ•ŒκΉŒμ§€ 계속 μ‘΄μž¬ν•œλ‹€. 이것이 이전 κΈ€μ—μ„œ μ‚΄νŽ΄λ³΄κΈ°λ‘œ ν–ˆλ˜, 연결을 λŠμ§€ μ•Šκ³  μš”μ²­κ³Ό 응닡을 μ£Όκ³ λ°›λŠ” 방법이닀.

 

ν•΄λ‹Ή 글은 Tsutomu Tone λ‹˜μ˜ '성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리'λ₯Ό μ°Έκ³ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.