Amenable
Amenable's Blog
Amenable
  • λΆ„λ₯˜ 전체보기 (189)
    • πŸ“‚ JAVA (87)
      • μ΄νŽ™ν‹°λΈŒ μžλ°” (65)
      • μ£Όμš” κ°œλ… (22)
    • πŸ“‚ 개발 μ„œμ  (22)
      • μ‹€μš©μ£Όμ˜ ν”„λ‘œκ·Έλž˜λ¨Έ (1)
      • 객체지ν–₯의 사싀과 μ˜€ν•΄ (2)
      • 클린 μ½”λ“œ (8)
      • ν•¨κ»˜ 자라기 (1)
      • 그림으둜 λ°°μš°λŠ” HTTP&Network Basic (10)
    • πŸ“‚ λ°μ΄ν„°λ² μ΄μŠ€ (8)
      • κ°œλ… (8)
      • λ¬Έμ œν’€μ΄ (0)
    • πŸ“‚ λ„€νŠΈμ›Œν¬ (14)
      • κ°œλ… (6)
      • 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리 (8)
    • πŸ“‚ μŠ€ν”„λ§ (13)
      • κΈ°λ³Έ κ°œλ… (13)
    • πŸ“‚ WEB (5)
    • πŸ“‚ 자료ꡬ쑰 (12)
      • κ°œλ… (2)
      • μ •λ ¬ (8)
      • 트리 (2)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜ (10)
      • μ΅œμ†Œμ‹ μž₯트리 (2)
      • μ΅œλ‹¨ 경둜 (2)
      • λ¬Έμžμ—΄ (2)
      • ETC (4)
    • πŸ“‚ μ•Œκ³ λ¦¬μ¦˜_λ¬Έμ œν’€μ΄ (4)
      • BOJ_λ°±μ€€ (4)
    • πŸ“‚ ν”„λ‘œκ·Έλž˜λ° (3)
    • πŸ“‚ DevOps (2)
      • 배포 (2)
    • πŸ“‚ ν›„κΈ° (8)
      • μš°μ•„ν•œ ν…Œν¬μ½”μŠ€(ν”„λ¦¬μ½”μŠ€) (4)
      • 2023λ…„ (3)
      • 2024λ…„ (1)
    • πŸ“‚ 회고 (1)
      • 2023λ…„ (1)

λΈ”λ‘œκ·Έ 메뉴

  • πŸš€ GitHub

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
Amenable

Amenable's Blog

데이터λ₯Ό 솑·μˆ˜μ‹ ν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]
πŸ“‚ λ„€νŠΈμ›Œν¬/성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리

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

2023. 7. 19. 22:10

  이전 글을 톡해 μ„œλ²„μ— μ ‘μ†ν•˜λŠ” 방법을 μ•Œμ•„λ³΄μ•˜λ‹€.

  μ΄λ²ˆμ—λŠ” μ„œλ²„μ— 접속을 μ™„λ£Œν•˜κ³  connectμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ œμ–΄κ°€ λ˜λŒμ•„μ˜¨ ν›„μ˜ 데이터 솑·μˆ˜μ‹  λ™μž‘μ„ μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.

 

πŸ“™ 1. ν”„λ‘œν† μ½œ μŠ€νƒμ— HTTP λ¦¬ν€˜μŠ€νŠΈ λ©”μ‹œμ§€λ₯Ό λ„˜κΈ΄λ‹€

  첫 번째 λ™μž‘μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ writeλ₯Ό ν˜ΈμΆœν•˜μ—¬ 솑신 데이터λ₯Ό ν”„λ‘œν† μ½œ μŠ€νƒμ— κ±΄λ„€μ£ΌλŠ” 것이닀.

  ν”„λ‘œν† μ½œ μŠ€νƒμ€ 데이터λ₯Ό κ³§λ°”λ‘œ μ†‘μ‹ ν•˜λŠ” 것이 μ•„λ‹ˆλΌ 일단 자체의 내뢀에 μžˆλŠ” μ†‘μ‹ μš© 버퍼 λ©”λͺ¨λ¦¬ μ˜μ—­μ— μ €μž₯ν•˜κ³ , μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ‹€μŒ 데이터λ₯Ό 건넀주기λ₯Ό κΈ°λ‹€λ¦°λ‹€.

  λ§Œμ•½ 받은 데이터λ₯Ό κ³§λ°”λ‘œ 보낸닀면 μž‘μ€ νŒ¨ν‚·μ„ 많이 보낼 수 μžˆλ‹€. ν•˜μ§€λ§Œ, μ΄λ ‡κ²Œ ν•œλ‹€λ©΄ λ„€νŠΈμ›Œν¬μ˜ μ΄μš© νš¨μœ¨μ΄ μ €ν•˜λ˜λ―€λ‘œ μ–΄λА μ •도 λ°μ΄ν„°λ₯Ό μ €μž₯ν•˜κ³  λ‚˜μ„œ μ†‘·μˆ˜μ‹  λ™μž‘을 ν•œλ‹€.

 

  κ·Έλ ‡λ‹€λ©΄ μ–΄λŠ 정도 μ €μž₯을 ν•œλ‹€λŠ” 기쀀은 μ–΄λ–»κ²Œ μ •ν• κΉŒ? λ‹€μŒμ˜ 2κ°€μ§€ μš”μ†Œλ₯Ό λ°”νƒ•μœΌλ‘œ νŒλ‹¨ν•œλ‹€.

πŸ“Œ 1. MTU & MSS

  첫 번째 νŒλ‹¨ μš”μ†ŒλŠ” ν•œ νŒ¨ν‚·μ— μ €μž₯ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ 크기닀.

  νŒ¨ν‚· ν•œ 개둜 μš΄λ°˜ν•  수 μžˆλŠ” λ””μ§€ν„Έ λ°μ΄ν„°μ˜ μ΅œλŒ€ 길이λ₯Ό MTU(Maximum Transmission Unit)이라고 ν•œλ‹€.

  κ·ΈλŸ¬λ‚˜ νŒ¨ν‚·μ˜ 맨 μ•žλΆ€λΆ„μ—λŠ” 헀더가 ν¬ν•¨λ˜μ–΄ μžˆμœΌλ―€λ‘œ 헀더λ₯Ό μ œμ™Έν•œ ν•˜λ‚˜μ˜ νŒ¨ν‚·μœΌλ‘œ μš΄λ°˜ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ μ΅œλŒ€ κΈΈμ΄λŠ” MSS(Maximum Segment Size)λ‹€.

  κ·Έλž˜μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œλΆ€ν„° 받은 데이터와 MSSλ₯Ό κ³ λ €ν•˜μ—¬ 솑신 λ™μž‘μ„ κ²°μ •ν•œλ‹€.

πŸ“Œ 2. 타이밍

  두 번째 νŒλ‹¨ μš”μ†ŒλŠ” 타이밍이닀.

  μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 솑신 속도가 λŠλ €μ§€λŠ” 경우, MSS에 κ°€κΉκ²Œ 데이터λ₯Ό μ €μž₯ν•˜λ©΄ μ €μž₯ν•˜λŠ”λ° μ‹œκ°„μ΄ 많이 κ±Έλ € 솑신 λ™μž‘μ΄ μ§€μ—°λœλ‹€.

  이런 경우 버퍼에 데이터가 λͺ¨μ΄μ§€ μ•Šμ•„λ„ μ λ‹Ήν•œ κ³³μ—μ„œ 솑신 λ™μž‘μ„ μˆ˜ν–‰ν•˜λŠ” 것이 λ‚«λ‹€. κ·Έλž˜μ„œ ν”„λ‘œν† μ½œ μŠ€νƒμ€ 내뢀에 타이머가 μžˆμ–΄μ„œ μ΄κ²ƒμœΌλ‘œ 일정 μ‹œκ°„ 이상 κ²½κ³Όν•˜λ©΄ νŒ¨ν‚·μ„ μ†‘μ‹ ν•œλ‹€.

 

  솑신 λ™μž‘μ„ νŒλ‹¨ν•˜λŠ” 2κ°€μ§€ μš”μ†Œ, 'ν•œ νŒ¨ν‚·μ— μ €μž₯ν•  수 μžˆλŠ” λ°μ΄ν„°μ˜ 크기'와 '타이밍'을 μ•Œμ•„λ³΄μ•˜λ‹€.

  μ „μžλ₯Ό μ€‘μ‹œν•˜λ©΄ νŒ¨ν‚· 길이가 κΈΈμ–΄μ Έμ„œ λ„€νŠΈμ›Œν¬μ˜ 이용 효율이 λ†’μ•„μ§€μ§€λ§Œ 버퍼에 λ¨Έλ¬΄λŠ” μ‹œκ°„λ§ŒνΌ 솑신 λ™μž‘μ΄ μ§€μ—°λœλ‹€. λ°˜λŒ€λ‘œ ν›„μžλ₯Ό μ€‘μ‹œν•˜λ©΄ 지연은 μ μ–΄μ§€μ§€λ§Œ 이용 효율이 λ–¨μ–΄μ§€κ²Œ λœλ‹€.

  κ·Έλž˜μ„œ μ–‘μžλ₯Ό μ ˆμΆ©ν•΄μ„œ 솑신 λ™μž‘μ„ μ‹€ν–‰ν•΄μ•Ό ν•œλ‹€. (μ ˆμΆ©ν•˜λŠ” 방법은 OS μ’…λ₯˜λ‚˜ 버전에 달라진닀.)

 

  그리고 'λ°”λ‘œ 솑신을 원할 경우', 데이터 솑신을 μ˜λ’°ν•  λ•Œ μ˜΅μ…˜μœΌλ‘œ '버퍼에 머무λ₯΄μ§€ μ•Šκ³  λ°”λ‘œ 솑신할 것'이라고 μ§€μ •ν•  μˆ˜λ„ μžˆλ‹€. 그러면 ν”„λ‘œν† μ½œ μŠ€νƒμ€ λ°μ΄ν„°λ₯Ό λ²„퍼에 λ¨Έλ¬΄λ₯΄κ²Œ ν•˜μ§€ μ•Šκ³  λ°”λ‘œ μ†‘μ‹  λ™μž‘을 μˆ˜ν–‰ν•˜κ²Œ λœλ‹€.

 

 

πŸ“™ 2. λ°μ΄ν„°κ°€ ν΄ λ•ŒλŠ” λΆ„ν• ν•˜μ—¬ λ³΄λ‚Έλ‹€

  λ§Œμ•½ 데이터가 MSS의 길이λ₯Ό μ΄ˆκ³Όν•˜λ©΄ μ–΄λ–»κ²Œ 될까? (λΈ”λ‘œκ·Έλ‚˜ κ²Œμ‹œνŒ λ“±μ˜ κΈ΄ λ¬Έμž₯이 μ˜ˆμ‹œκ°€ 될 수 μžˆλ‹€.)

  이 κ²½μš°μ—λŠ” 데이터λ₯Ό MSS의 크기에 맞게 λΆ„ν• ν•˜κ³ , λΆ„ν• ν•œ 쑰각을 ν•œ κ°œμ”© νŒ¨ν‚·μ— λ„£μ–΄ μ†‘μ‹ ν•œλ‹€.

 

 

πŸ“™ 3. ACK λ²ˆν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ νŒ¨ν‚·μ΄ λ„μ°©ν–ˆλŠ”μ§€ ν™•μΈν•œλ‹€

  μœ„μ˜ 과정듀을 ν†΅ν•˜μ—¬ 데이터λ₯Ό μž…λ ₯ν•œ νŒ¨ν‚·μ΄ μ„œλ²„λ₯Ό ν–₯ν•΄ μ†‘μ‹ λœλ‹€. κ·ΈλŸ¬λ‚˜ μ΄κ²ƒμœΌλ‘œ 솑신 λ™μž‘μ΄ λλ‚œ 것은 μ•„λ‹ˆλ‹€.

  μ†‘μ‹ ν•œ νŒ¨ν‚·μ΄ μƒλŒ€μ—κ²Œ μ˜¬λ°”λ₯΄κ²Œ λ„μ°©ν–ˆλŠ”μ§€ ν™•μΈν•˜κ³ , λ„μ°©ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄ λ‹€μ‹œ 솑신을 ν•˜λŠ” 확인 λ™μž‘κΉŒμ§€ μˆ˜ν–‰μ„ ν•΄μ•Ό ν•œλ‹€.

 

  μˆ˜μ‹  μ—¬λΆ€λ₯Ό 확인할 λ•ŒλŠ” 'μ‹œν€€μŠ€ 번호', 'λ°μ΄ν„°μ˜ 크기', 'ACK 번호'λ₯Ό μ΄μš©ν•œλ‹€.

  • 데이터λ₯Ό 쑰각으둜 λΆ„ν• ν•  λ•Œ 쑰각이 톡신 μ‹œμž‘λΆ€ν„° λͺ‡ 번째 λ°”μ΄νŠΈμ— ν•΄λ‹Ήν•˜λŠ”μ§€ μ‹œν€€μŠ€ λ²ˆν˜Έμ— μ €μž₯ν•œλ‹€.
  • νŒ¨ν‚· μ „μ²΄μ˜ κΈΈμ΄μ—μ„œ 헀더 길이λ₯Ό λΉΌμ„œ λ°μ΄ν„°μ˜ 크기λ₯Ό μ €μž₯ν•œλ‹€.
  • μˆ˜μ‹  츑은 μ‹œν€€μŠ€ λ²ˆν˜Έμ™€ λ°μ΄ν„°μ˜ 크기λ₯Ό μ΄μš©ν•΄μ„œ λͺ‡ 번째 λ°”μ΄νŠΈκΉŒμ§€ μˆ˜μ‹ ν•œ 것인지 κ³„μ‚°ν•˜μ—¬ ACK 번호λ₯Ό μ €μž₯ν•œλ‹€.

  κ·Έλž˜μ„œ μœ„μ˜ κ·Έλ¦Όκ³Ό 같이 'μ‹œν€€μŠ€ 번호', 'λ°μ΄ν„°μ˜ 크기', 'ACK 번호'λ₯Ό μ΄μš©ν•˜μ—¬ 솑신 츑은 μƒλŒ€κ°€ μ–΄λ””κΉŒμ§€ 데이터λ₯Ό μˆ˜μ‹ ν–ˆλŠ”μ§€ νŒŒμ•…ν•œλ‹€.

 

  κ·Έλ¦Όμ—μ„œλŠ” μ‹œν€€μŠ€ 번호λ₯Ό 1둜 μ‹œμž‘ν•˜μ˜€λ‹€.

  ν•˜μ§€λ§Œ, μ‹€μ œμ—μ„œλŠ” μ‹œν€€μŠ€ λ²ˆν˜Έκ°€ 1λΆ€ν„° μ‹œμž‘ν•˜μ§€ μ•Šκ³  λ‚œμˆ˜λ₯Ό λ°”νƒ•μœΌλ‘œ μ‚°μΆœν•œ μ΄ˆκΈ°κ°’μœΌλ‘œ μ‹œμž‘ν•œλ‹€. μ‹œν€€μŠ€ 번호λ₯Ό 항상 1λΆ€ν„° μ‹œμž‘ν•˜λ©΄ 이것을 μ˜ˆμΈ‘ν•˜μ—¬ μ•…μ˜μ μΈ 곡격을 ν•  κ°€λŠ₯성이 있기 λ•Œλ¬Έμ΄λ‹€.

  κ·Έλž˜μ„œ μ„œλ²„μ™€ 접속을 ν•  λ•Œ μ‹œν€€μŠ€ 번호의 μ΄ˆκΈ°κ°’μ„ μ„€μ •ν•œλ‹€.

 

μ‹€μ œ μ›€μ§μž„μ€ λ‹€μŒκ³Ό κ°™λ‹€.

  1. 접속 λ™μž‘μ„ μ‹€ν–‰ν•  λ•Œ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œ λ³΄λ‚΄λŠ” 데이터에 κ΄€ν•œ μ‹œν€€μŠ€ 번호의 μ΄ˆκΈ°κ°’μ„ ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ‚°μΆœν•˜μ—¬ μ„œλ²„μ— ν†΅μ§€ν•œλ‹€.
  2. ACK λ²ˆν˜Έμ™€ μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ— λ³΄λ‚΄λŠ” 데이터에 κ΄€ν•œ μ‹œν€€μŠ€ 번호의 μ΄ˆκΈ°κ°’μ„ ν΄λΌμ΄μ–ΈνŠΈμ—κ²Œ 보낸닀.
  3. ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ—κ²Œ ACK 번호λ₯Ό μ „μ†‘ν•œλ‹€.
  4. μ‹œν€€μŠ€ λ²ˆν˜Έμ™€ 데이터λ₯Ό μ „μ†‘ν•œλ‹€.
  5. ν•΄λ‹Ή 데이터에 λŒ€ν•œ ACK 번호λ₯Ό μ†‘μ‹ ν•œλ‹€.

 

  TCPλŠ” 이 λ°©λ²•μœΌλ‘œ μƒλŒ€κ°€ 데이터λ₯Ό 잘 λ°›μ•˜λŠ”μ§€ ν™•μΈν•œλ‹€.

  확인할 λ•ŒκΉŒμ§€ μ†‘μ‹ ν•œ νŒ¨ν‚·μ„ μ†‘μ‹ μš© 버퍼 λ©”λͺ¨λ¦¬ μ˜μ—­μ— λ³΄κ΄€ν•œλ‹€. 그리고 μ†‘μ‹ ν•œ 데이터에 λŒ€μ‘ν•˜λŠ” ACK λ²ˆν˜Έκ°€ μƒλŒ€λ‘œλΆ€ν„° λŒμ•„μ˜€μ§€ μ•ŠμœΌλ©΄ νŒ¨ν‚·μ„ λ‹€μ‹œ 보낸닀.

  이 방법을 μ΄μš©ν•˜λ©΄ λ„€νŠΈμ›Œν¬μ˜ μ–΄λŠ λΆ€λΆ„μ—μ„œλ“  였λ₯˜κ°€ λ°œμƒν–ˆλ”λΌλ„ 그것을 μ „λΆ€ κ²€μΆœν•˜μ—¬ 회볡 처리(νŒ¨ν‚·μ„ λ‹€μ‹œ λ³΄λ‚΄λŠ” 것)λ₯Ό μ·¨ν•  수 μžˆλ‹€. κ·Έλž˜μ„œ λ‹€λ₯Έ κ³³μ—μ„œ μ˜€λ₯˜λ₯Ό νšŒλ³΅ μ‘°μΉ˜ν•  ν•„μš”κ°€ μ—†κ²Œ λœλ‹€.

 

 

πŸ“™ 4. νŒ¨ν‚· ν‰κ·  μ™•볡 μ‹œκ°„μœΌλ‘œ ACK λ²ˆν˜Έμ˜ λŒ€κΈ° μ‹œκ°„을 μ‘°μ •ν•œλ‹€

  ACK λ²ˆν˜Έκ°€ λŒμ•„μ˜€λŠ” 것을 κΈ°λ‹€λ¦¬λŠ” μ‹œκ°„μ„ νƒ€μž„μ•„μ›ƒ 값이라고 ν•œλ‹€.

 

  λ„€νŠΈμ›Œν¬κ°€ ν˜Όμž‘ν•˜λ©΄ λŒ€κΈ° μ‹œκ°„μ„ μ–΄λŠ 정도 길게 μ„€μ •ν•΄μ„œ νŒ¨ν‚·μ„ λ‹€μ‹œ 보내지 μ•Šλ„λ‘ ν•΄μ•Ό ν•œλ‹€. (λ‹€μ‹œ λ³΄λ‚΄κΈ°λŠ” λ‹¨μˆœν•œ 낭비일 뿐만 μ•„λ‹ˆλΌ λ„€νŠΈμ›Œν¬λ₯Ό λ”μš± ν˜Όμž‘μ‹œν‚¨λ‹€.)

  κ·Έλ ‡λ‹€κ³  λŒ€κΈ° μ‹œκ°„μ„ λ„ˆλ¬΄ 길게 ν•˜λ©΄ νŒ¨ν‚·μ„ λ‹€μ‹œ λ³΄λ‚΄λŠ” λ™μž‘μ΄ μ§€μ—°λ˜μ–΄ 속도 μ €ν•˜μ˜ 원인이 λœλ‹€.

 

  κ·Έλž˜μ„œ λŒ€κΈ° μ‹œκ°„μ„ λ„ˆλ¬΄ 짧지도, 길지도 μ•Šμ€ μ μ ˆν•œ κ°’μœΌλ‘œ μ„€μ •ν•΄μ•Ό ν•œλ‹€.

  λŒ€κΈ° μ‹œκ°„μ— 영ν–₯을 μ£ΌλŠ” μš”μΈ(μ„œλ²„μ™€μ˜ 거리, 정체 μ‹œμ˜ μ§€μ—°,...) 이 λ„ˆλ¬΄ 많기 λ•Œλ¬Έμ— λŒ€κΈ° μ‹œκ°„μ„ μΌμ •ν•œ κ°’μœΌλ‘œ μ„€μ •ν•˜λŠ” 방법은 μ μ ˆν•˜μ§€ μ•Šλ‹€.

 

  κ·Έλž˜μ„œ TCPλŠ” λŒ€κΈ° μ‹œκ°„μ„ λ™μ μœΌλ‘œ λ³€κ²½ν•˜λŠ” 방법을 μ·¨ν•œλ‹€.

  κ·Έλž˜μ„œ ACK λ²ˆν˜Έκ°€ λŒμ•„μ˜€λŠ” μ‹œκ°„μ„ κΈ°μ€€μœΌλ‘œ λŒ€κΈ° μ‹œκ°„μ„ νŒλ‹¨ν•˜κ²Œ λœλ‹€. ACK λ²ˆν˜Έκ°€ λŒμ•„μ˜€λŠ” μ‹œκ°„이 μ§€μ—°λ˜λ©΄ λŒ€κΈ° μ‹œκ°„을 λŠ˜λ¦¬κ³ , ACK λ²ˆν˜Έκ°€ λŒμ•„μ˜€λŠ” μ‹œκ°„이 λΉ λ₯΄λ‹€λ©΄ λŒ€κΈ° μ‹œκ°„을 μ§§κ²Œ μ„€μ •ν•œλ‹€.

 

 

πŸ“™ 5. μœˆλ„μš° μ œμ–΄ λ°©μ‹μœΌλ‘œ νš¨μœ¨μ μœΌλ‘œ ACK λ²ˆν˜Έλ₯Ό κ΄€λ¦¬ν•œλ‹€

  'ν•œ 개의 νŒ¨ν‚·μ„ 보내고 ACK λ²ˆν˜Έκ°€ λŒμ•„μ˜¬ λ•ŒκΉŒμ§€ κΈ°λ‹€λ¦°λ‹€'λΌλŠ” 것을 μ „μ œλ‘œ 솑신 λ™μž‘μ„ μ‚΄νŽ΄λ³΄μ•˜λ‹€.

  ν•˜μ§€λ§Œ, ACK λ²ˆν˜Έκ°€ λŒμ•„μ˜¬ λ•ŒκΉŒμ§€μ˜ μ‹œκ°„ λ™μ•ˆ 아무 일도 ν•˜μ§€ μ•Šκ³  κΈ°λ‹€λ¦¬λŠ” 것은 μ‹œκ°„ λ‚­λΉ„λ‹€. μ΄λŸ¬ν•œ λ‚­λΉ„λ₯Ό 쀄이기 μœ„ν•΄ TCPλŠ” μœˆλ„μš° μ œμ–΄λΌλŠ” 방식을 μ‚¬μš©ν•œλ‹€.

 

  μœˆλ„μš° μ œμ–΄λŠ” ν•œ 개의 νŒ¨ν‚·μ„ 보낸 ν›„ ACK 번호λ₯Ό 기닀리지 μ•Šκ³  μ°¨λ‘€λŒ€λ‘œ μ—°μ†ν•΄μ„œ 볡수의 νŒ¨ν‚·μ„ λ³΄λ‚΄λŠ” 방법이닀.

  μ—¬κΈ°μ„œ μ£Όμ˜ν•  점은 ACK 번호λ₯Ό 기닀리지 μ•Šκ³  μ°¨λ‘€λ‘œ νŒ¨ν‚·μ„ λ³΄λ‚΄κ²Œ λœλ‹€λ©΄ μˆ˜μ‹  츑의 λŠ₯λ ₯을 μ΄ˆκ³Όν•˜μ—¬ νŒ¨ν‚·μ„ λ³΄λ‚΄λŠ” μ‚¬νƒœκ°€ λ°œμƒν•  수 μžˆλ‹€λŠ” 것이닀.

 

  μœˆλ„μš° μ œμ–΄ 방식은 μ•„λž˜μ˜ 방식을 μ΄μš©ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•˜μ˜€λ‹€.

  1. μˆ˜μ‹  μΈ‘μ—μ„œ 솑신 츑에 μˆ˜μ‹  κ°€λŠ₯ν•œ λ°μ΄ν„°μ˜ 양을 ν†΅μ§€ν•œλ‹€.
  2. μˆ˜μ‹  츑은 이 양을 μ΄ˆκ³Όν•˜μ§€ μ•Šλ„λ‘ 솑신 λ™μž‘μ„ μˆ˜ν–‰ν•œλ‹€.

 

  μˆ˜μ‹  츑은 μˆ˜μ‹  μ²˜λ¦¬κ°€ λλ‚˜κ³  μˆ˜μ‹  버퍼에 빈 뢀뢄이 생기면 κ·Έ λΆ„λŸ‰μ„ TCP ν—€λ”μ˜ μœˆλ„μš° ν•„λ“œμ— κΈ°λ‘ν•˜μ—¬ 솑신 츑에 μ•Œλ¦°λ‹€. 솑신 츑은 μœˆλ„μš° ν•„λ“œμ— 기둝된 값을 보고 솑신을 κ²°μ •ν•œλ‹€.

  λ˜ν•œ, μˆ˜μ‹  κ°€λŠ₯ν•œ 데이터 μ–‘μ˜ μ΅œλŒ“κ°’μ„ μœˆλ„μš° μ‚¬μ΄μ¦ˆλΌκ³  λΆ€λ₯΄λ©°, TCPλ₯Ό μ •λ°€ μ‘°μ •ν•˜λŠ” λ§€κ°œλ³€μˆ˜μ˜ ν•˜λ‚˜λ‘œ μ•Œλ €μ Έ μžˆλ‹€.

 

 

πŸ“™ 6. ACK λ²ˆν˜Έμ™€ μœˆλ„μš°λ₯Ό ν•©μŠΉν•œλ‹€

  솑·μˆ˜μ‹  λ™μž‘μ„ μœ„ν•΄ 'ACK 번호'와 'μœˆλ„μš°λ₯Ό ν†΅μ§€ν•˜λŠ” 타이밍'을 κ³ λ €ν•΄μ•Ό ν•œλ‹€λŠ” 것을 μ‚΄νŽ΄λ³΄μ•˜λ‹€.

  그러면 두 개λ₯Ό μ–Έμ œ λ³΄λ‚΄λŠ” 게 λ§žμ„κΉŒ?

  'ACK 번호'와 'μœˆλ„μš° ν†΅μ§€μ˜ λ™μž‘'이 μ–Έμ œ 각각 μΌμ–΄λ‚˜λŠ”μ§€ μ‚΄νŽ΄λ³΄κ³  두 개의 쑰합을 톡해 μ μ ˆν•œ 타이밍을 μ‚΄νŽ΄λ³΄μž.

 

πŸ“Œ  1. ACK 번호λ₯Ό 전솑해야 ν•˜λŠ” 경우

  ACK λ²ˆν˜ΈλŠ” μˆ˜μ‹  μΈ‘μ—μ„œ 데이터λ₯Ό λ°›μ•˜μ„ λ•Œ λ‚΄μš©μ„ μ‘°μ‚¬ν•˜μ—¬ 정상 μˆ˜μ‹ μ„ 확인할 수 μžˆλŠ” κ²½μš°μ—λ§Œ 솑신 츑에 보낸닀. 즉, 데이터λ₯Ό μˆ˜μ‹ ν•œ ν›„ μ¦‰μ‹œ 보낸닀고 μƒκ°ν•˜λ©΄ λœλ‹€.

πŸ“Œ 2. μœˆλ„μš° ν†΅μ§€μ˜ λ™μž‘μ΄ μΌμ–΄λ‚˜λŠ” 경우

  μœˆλ„μš° 톡지가 ν•„μš”ν•œ 것은 μˆ˜μ‹  츑이 μˆ˜μ‹  λ²„νΌμ—μ„œ 데이터λ₯Ό μΆ”μΆœν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— κ±΄λ„€μ£Όμ—ˆμ„ λ•Œλ‹€. 이 λ™μž‘μ€ μˆ˜μ‹  츑의 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 보낸 μ˜λ’°κ°€ 계기가 λ˜μ–΄ μΌμ–΄λ‚˜λ―€λ‘œ 솑신 μΈ‘μ—μ„œλŠ” 이 λ™μž‘μ΄ μ–Έμ œ 일어날지 μ•Œ 수 μ—†λ‹€.

  즉, μˆ˜μ‹  μΈ‘μ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— 데이터λ₯Ό 건넀주고 μˆ˜μ‹  λ²„νΌμ˜ 빈 μ˜μ—­μ΄ λŠ˜μ–΄λ‚¬μ„ λ•Œκ°€ μœˆλ„μš° ν†΅μ§€μ˜ 타이밍이닀.

🧬 3. μ‘°ν•© 1 - λ”°λ‘œ 보내기

  본래의 κ°œλ…μ„ κ·ΈλŒ€λ‘œ μ‹€ν˜„ν•˜λ©΄ λ°μ΄ν„°μ˜ νŒ¨ν‚·μ„ μˆ˜μ‹ ν•  λ•Œλ§ˆλ‹€ ACK 번호 톡지와 μœˆλ„μš° ν†΅μ§€μ˜ νŒ¨ν‚·μ΄ ν•˜λ‚˜μ”© λ”°λ‘œ 솑신 츑에 보내진닀.

  κ·ΈλŸ¬λ‚˜, μ΄λ ‡κ²Œ ν•΄μ„œλŠ” μˆ˜μ‹  μΈ‘μ—μ„œ 솑신 츑에 λ³΄λ‚΄λŠ” νŒ¨ν‚·μ΄ λ§Žμ•„μ Έμ„œ νš¨μœ¨μ„±μ΄ μ €ν•˜λœλ‹€.

🧬 4. μ‘°ν•© 2 - 'ACK 번호 + μœˆλ„μš° 톡지'λ₯Ό κ°€μ§„ ν•˜λ‚˜μ˜ νŒ¨ν‚·μœΌλ‘œ 보내기

  ACK λ²ˆν˜Έλ‚˜ μœˆλ„μš°λ₯Ό 톡지할 λ•Œ μ†ŒμΌ“μ— λ°”λ‘œ 보내지 μ•Šκ³  μž μ‹œ 기닀릴 μˆ˜λ„ μžˆλ‹€.

  μ΄λ ‡κ²Œ κΈ°λ‹€λ¦¬λŠ” 사이에 λ‹€μŒ 톡지 λ™μž‘μ΄ μΌμ–΄λ‚˜λ©΄ μ–‘μͺ½μ„ μƒμŠΉμ‹œμΌœμ„œ ν•œ 개의 νŒ¨ν‚·μœΌλ‘œ λ¬Άμ–΄μ„œ λ³΄λ‚΄κ²Œ λœλ‹€.

  예λ₯Ό λ“€μ–΄ ACK 번호의 솑신을 λŒ€μ‘°ν•  λ•Œ μœˆλ„μš° 톡지가 μΌμ–΄λ‚˜λ©΄ ACK λ²ˆν˜Έμ™€ μœˆλ„μš°λ₯Ό ν•œ 개의 νŒ¨ν‚·μ— ν•©μŠΉμ‹œμΌœμ„œ ν†΅μ§€ν•œλ‹€.

🧬 5. μ‘°ν•© 3 - μ—°μ†λœ 것을 ν•˜λ‚˜λ‘œ μ²˜λ¦¬ν•˜κΈ°

  ACK λ²ˆν˜ΈλŠ” 데이터λ₯Ό μ–΄λ””κΉŒμ§€ λ°›μ•˜λŠ”μ§€, 즉 μˆ˜μ‹ ν•œ λ°μ΄ν„°μ˜ 끝이 어디인지λ₯Ό 솑신 츑에 μ•Œλ¦¬λŠ” κ²ƒμ΄λ―€λ‘œ ACK 번호 톡지가 μ—°μ†ν•˜μ—¬ μΌμ–΄λ‚˜λ©΄ μ΅œν›„μ˜ κ²ƒλ§Œ ν†΅μ§€ν•˜κ³  λ„μ€‘μ˜ 것은 μƒλž΅ν•΄λ„ λœλ‹€.

  μ΄λ ‡κ²Œ ν•˜λ©΄ νŒ¨ν‚·μ„ 쀄일 수 있고, μœˆλ„μš° 톡지가 μ—°μ†λœ κ²½μš°λ„ λ§ˆμ°¬κ°€μ§€λ‘œ νŒ¨ν‚·μ„ 쀄일 수 μžˆλ‹€.

 

 

πŸ“™ 7. HTTP 응닡 λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•œλ‹€

  μ΄μ „κΉŒμ§€λŠ” λΈŒλΌμš°μ €μ˜ 의뒰λ₯Ό λ°›μ•„ ν”„λ‘œν† μ½œ μŠ€νƒμ΄ HTTP λ¦¬ν€˜μŠ€νŠΈ λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ” 일련의 λ™μž‘μ„ μ‚΄νŽ΄λ³΄μ•˜λ‹€.

  이후에 λΈŒλΌμš°μ €λŠ” μ„œλ²„μ—μ„œ λŒμ•„μ˜€λŠ” 응닡 λ©”μ‹œμ§€λ₯Ό λ°›κΈ° μœ„ν•΄ read ν”„λ‘œκ·Έλž¨μ„ ν˜ΈμΆœν•œλ‹€. 데이터λ₯Ό μˆ˜μ‹ ν•  λ•Œλ„ 데이터λ₯Ό 솑신할 λ•Œμ™€ λ§ˆμ°¬κ°€μ§€λ‘œ 데이터λ₯Ό μΌμ‹œ λ³΄κ΄€ν•˜λŠ” μˆ˜μ‹  버퍼λ₯Ό μ‚¬μš©ν•œλ‹€.

 

  λ¦¬ν€˜μŠ€νŠΈ λ©”μ‹œμ§€μ˜ 솑신을 μ™„λ£Œν•˜κ³  응닡 λ©”μ‹œμ§€κ°€ λŒμ•„μ™”λ‹€λ©΄, ν”„λ‘œν† μ½œ μŠ€νƒμ€ μˆ˜μ‹  λ²„νΌμ—μ„œ μˆ˜μ‹  데이터λ₯Ό μΆ”μΆœν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—κ²Œ 건넀쀀닀.

  λ§Œμ•½ λ¦¬ν€˜μŠ€νŠΈ λ©”μ‹œμ§€μ˜ 솑신을 μ™„λ£Œν•˜κ³  응닡 λ©”μ‹œμ§€κ°€ 아직 λŒμ•„μ˜€μ§€ μ•Šμ•˜λ‹€λ©΄, ν”„λ‘œν† μ½œ μŠ€νƒμ€ μž μ‹œ λŒ€κΈ°λ₯Ό ν•˜μ˜€λ‹€κ°€ μ„œλ²„μ—μ„œ 응닡 λ©”μ‹œμ§€μ˜ νŒ¨ν‚·μ΄ λ„μ°©ν–ˆμ„ λ•Œ 그것을 μˆ˜μ‹ ν•˜μ—¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—κ²Œ 건넀쀀닀.

 

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

'πŸ“‚ λ„€νŠΈμ›Œν¬ > 성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

μ„œλ²„μ—μ„œ 연결을 λŠμ–΄ μ†ŒμΌ“μ„ λ§μ†Œν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]  (0) 2023.07.20
μ„œλ²„μ— μ ‘μ†ν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]  (0) 2023.07.18
μ†ŒμΌ“μ„ μž‘μ„±ν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]  (0) 2023.07.10
ν”„λ‘œν† μ½œ μŠ€νƒμ— λ©”μ‹œμ§€ 솑신을 μ˜λ’°ν•œλ‹€. - [Ch 01. μ›Ή λΈŒλΌμš°μ €κ°€ λ©”μ‹œμ§€λ₯Ό λ§Œλ“ λ‹€]  (0) 2023.07.09
μ „ μ„Έκ³„μ˜ DNS μ„œλ²„κ°€ μ—°λŒ€ν•œλ‹€. - [Ch 01. μ›Ή λΈŒλΌμš°μ €κ°€ λ©”μ‹œμ§€λ₯Ό λ§Œλ“ λ‹€]  (0) 2023.07.09
    'πŸ“‚ λ„€νŠΈμ›Œν¬/성곡과 μ‹€νŒ¨λ₯Ό κ²°μ •ν•˜λŠ” 1%의 λ„€νŠΈμ›Œν¬ 원리' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • μ„œλ²„μ—μ„œ 연결을 λŠμ–΄ μ†ŒμΌ“μ„ λ§μ†Œν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]
    • μ„œλ²„μ— μ ‘μ†ν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]
    • μ†ŒμΌ“μ„ μž‘μ„±ν•œλ‹€. - [Ch 02. TCP/IP의 데이터λ₯Ό μ „κΈ° μ‹ ν˜Έλ‘œ λ§Œλ“€μ–΄ 보낸닀.]
    • ν”„λ‘œν† μ½œ μŠ€νƒμ— λ©”μ‹œμ§€ 솑신을 μ˜λ’°ν•œλ‹€. - [Ch 01. μ›Ή λΈŒλΌμš°μ €κ°€ λ©”μ‹œμ§€λ₯Ό λ§Œλ“ λ‹€]
    Amenable
    Amenable
    CS, μžλ°”, 자료ꡬ쑰, μ•Œκ³ λ¦¬μ¦˜, μŠ€ν”„λ§, μŠ€ν”„λ§ λΆ€νŠΈμ— ν•΄λ‹Ήν•˜λŠ” κ°œλ°œμ— κ΄€ν•œ λ‚΄μš©μ„ κ³΅μœ ν•©λ‹ˆλ‹€.

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”