πŸ–₯ λ„€νŠΈμ›Œν¬ 원리 (μ›Ή λΈŒλΌμš°μ € 2 - 3)

may_soouuΒ·2020λ…„ 12μ›” 31일
1
post-thumbnail

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ˜λ’°λ°›μ€ ν”„λ‘œν† μ½œ μŠ€νƒμ΄ 메세지λ₯Ό μ†‘μ‹ ν•˜λŠ” 방법

1. μ†ŒμΌ“ μž‘μ„±
2. μ„œλ²„ 접속
3. 데이터 솑 μˆ˜μ‹ 
4. μ„œλ²„μ—μ„œ 연결을 끊고 μ†ŒμΌ“ λ§μ†Œ
5. IP와 μ΄λ”λ„·μ˜ νŒ¨ν‚· 솑,μˆ˜μ‹  λ™μž‘
6. UDP ν”„λ‘œν† μ½œμ„ μ΄μš©ν•œ 솑 μˆ˜μ‹  λ™μž‘

이전에 μ •λ¦¬ν•œ 1,2λ²ˆμ— μ΄μ–΄μ„œ 3,4λ²ˆμ— λŒ€ν•΄μ„œ μ •λ¦¬ν•˜κ² μŠ΅λ‹ˆλ‹€.

3. 데이터 솑, μˆ˜μ‹ 

3-1. ν”„λ‘œν† μ½œ μŠ€νƒμ— HTTP λ¦¬ν€˜μŠ€νŠΈ λ©”μ‹œμ§€λ₯Ό λ„˜κΈ°κΈ°

connectμ—μ„œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ œμ–΄κ°€ λ˜λŒμ•„μ˜€λ©΄ 데이터 μ†‘μˆ˜μ‹  을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
컀λ„₯μ…˜ :
- 데이터λ₯Ό 솑/μˆ˜μ‹  ν•  수 μžˆλ„λ‘ νŒŒμ΄ν”„μ™€ 같은 κ²ƒμœΌλ‘œ μ†ŒμΌ“μ΄ μ—°κ²°λ˜μ–΄ μžˆλŠ”λ°, 이 νŒŒμ΄ν”„μ™€ 같은 것을 컀λ„₯μ…˜μ΄λΌκ³  함.
- 이 컀λ„₯μ…˜μ€ closeλ₯Ό ν˜ΈμΆœν•˜μ—¬ 연결을 끊기 μ „κΉŒμ§€ 계속 μ‘΄μž¬ν•©λ‹ˆλ‹€.

데이터 솑,μˆ˜μ‹ μ˜ 첫 μž‘μ—…μ€ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ writeλ₯Ό ν˜ΈμΆœν•˜μ—¬ 솑신 데이터λ₯Ό ν”„λ‘œν† μ½œ μŠ€νƒμ— κ±΄λ„€μ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

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

πŸ“Œ 받은 데이터λ₯Ό μ™œ 일단 μ €μž₯ν• κΉŒ?

ν”„λ‘œν† μ½œ μŠ€νƒμœΌλ‘œ μ „λ‹¬ν•˜λŠ” λ°μ΄ν„°μ˜ κΈΈμ΄λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ’…λ₯˜λ‚˜ λ§Œλ“œλŠ” 방법에 따라 κ²°μ •λ©λ‹ˆλ‹€. 즉, 항상 λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— ν”„λ‘œν† μ½œ μŠ€νƒμ—μ„œ μ œμ–΄ν•  μˆ˜κ°€ μ—†μŠ΅λ‹ˆλ‹€.
λ§Œμ•½, μž‘μ€ λ‹¨μœ„μ˜ 데이터λ₯Ό 받을 λ•Œλ§ˆλ‹€ 데이터λ₯Ό λ³΄λ‚΄κ²Œ 되면 λ„€νŠΈμ›Œν¬μ˜ 효율이 μ €ν•˜λ˜κΈ° λ•Œλ¬Έμ—, μ–΄λŠμ •λ„ 데이터λ₯Ό μŒ“κ³  λ‚˜μ„œ μ†‘μˆ˜μ‹  λ™μž‘μ„ ν•©λ‹ˆλ‹€.

πŸ“Œ ν”„λ‘œν† μ½œ μŠ€νƒμ— 데이터λ₯Ό μ €μž₯ν•˜μ§€ μ•Šκ³  λ°”λ‘œ μ „μ†‘ν•˜λ„λ‘ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ˜΅μ…˜μ„ μ„€μ •ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.
λΈŒλΌμš°μ €μ™€ 같은 λŒ€ν™”ν˜• μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ„œλ²„μ— λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ” 경우라면 ν”„λ‘œν† μ½œ μŠ€νƒμ— μ €μž₯ν•΄λ†“λŠ” λ™μ•ˆ 응닡 μ‹œκ°„μ΄ μ§€μ—°λ˜λ―€λ‘œ 이와 같은 μ˜΅μ…˜μ„ μ‚¬μš©ν•˜λŠ” κ²½μš°κ°€ λ§ŽμŠ΅λ‹ˆλ‹€.

3-2. νŒ¨ν‚·μ΄ λ„μ°©ν–ˆλŠ”μ§€ 확인

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

πŸ“Œ 확인 κ³Όμ •
1. μ„œλ²„λ‘œ λ„˜κΈ°λŠ” 데이터λ₯Ό 쑰각으둜 λΆ„ν• 
2. 데이터 맨 μ•žμ—μ„œλΆ€ν„° λ”°μ Έμ„œ 각 쑰각이 λͺ‡ 번째 λ°”μ΄νŠΈμ— ν•΄λ‹Ήν•˜λŠ”μ§€λ₯Ό μ‹œν€€μŠ€ λ²ˆν˜ΈλΌλŠ” ν•­λͺ©μ— μ €μž₯ >> TCP 헀더에 기둝
3. λ°μ΄ν„°μ˜ 크기도 같이 전달
4. λ°μ΄ν„°μ˜ λˆ„λ½ μ—¬λΆ€λ₯Ό 확인 ν•  수 있음

예λ₯Ό λ“€μ–΄, 1,460λ°”μ΄νŠΈκΉŒμ§€ μˆ˜μ‹  μ™„λ£Œν•¨. 1,461 νŒ¨ν‚·μ΄ λ„μ°©ν•˜λ©΄ λˆ„λ½μ΄ μ—†λŠ” κ²ƒμž„
근데 μ‹œν€€μŠ€ λ²ˆν˜Έκ°€ 1,461인 νŒ¨ν‚·μ΄ λ„μ°©ν•˜μ§€ μ•Šμ•˜λŠ”λ° 
2,921 νŒ¨ν‚·μ΄ λ„μ°©ν•˜λ©΄ 1,461 νŒ¨ν‚·μ΄ λˆ„λ½λœ κ²ƒμž„

5.μ΄λ ‡κ²Œ λ°μ΄ν„°μ˜ λˆ„λ½μ—¬λΆ€λ₯Ό 확인 후에, 이전에 μˆ˜μ‹ ν•œ 데이터λ₯Ό ν•©μ³μ„œ 데이터λ₯Ό λͺ‡ 번째 λ°”μ΄νŠΈκΉŒμ§€ μˆ˜μ‹ ν•œ 것인지 κ³„μ‚°ν•˜κ³ , κ·Έ 값을 ACK 번호(μ•„ν¬λ²ˆν˜Έ)에 κΈ°λ‘ν•΄μ„œ 솑신츑에 전달

솑신 : 00 번째 λ°”μ΄νŠΈλΆ€ν„° μ‹œμž‘λ˜λŠ” 데이터λ₯Ό xxλ°”μ΄νŠΈλ§ŒνΌ λ³΄λ‚΄μ„Έμš”
μˆ˜μ‹  : xx번째 λ°”μ΄νŠΈκΉŒμ§€ μˆ˜μ‹ ν–ˆμŠ΅λ‹ˆλ‹€.

ACK번호λ₯Ό λ˜λŒλ €μ£ΌλŠ” μœ„μ˜ λ™μž‘μ„ μˆ˜μ‹ ν™•μΈ 응닡이라고 뢀름

--ν‹ˆν‹ˆνžˆ 정리쀑--

profile
back-end 개발자

0개의 λŒ“κΈ€