ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [1%의 λ„€νŠΈμ›Œν¬ 원리] ν”„λ‘œν† μ½œ μŠ€νƒμ˜ λ‚΄λΆ€ ꡬ성
    General/πŸ•Έ Network 2022. 2. 6. 22:34

    μ•ˆλ…•ν•˜μ„Έμš”πŸΆ

    이번 주말에 μ €λŠ” μ„ λ¬Ό 받은 μ‘°μ—˜ 온 μ†Œν”„νŠΈμ›¨μ–΄ λΌλŠ” 책을 μ½μ—ˆμŠ΅λ‹ˆλ‹€.

    μ±… λ‚΄μš© 쀑 'ν—ˆμˆ ν•œ μΆ”μƒν™”μ˜ 법칙' μ΄λΌλŠ” μ£Όμ œμ— λŒ€ν•΄ 보게 λ˜μ—ˆλŠ”λ°,

    μž‘κ°€κ°€ μΆ”μƒν™”μ˜ 예둜 TCP 와 IP λ₯Ό λ“€μ—ˆμŠ΅λ‹ˆλ‹€.

     

    μ•ˆμ •μ μΈ 톡신을 보μž₯ν•˜λŠ” TCP λŠ” 사싀 λΆˆμ•ˆμ •ν•œ IP λ₯Ό 기반으둜 이루어지며,

    이것이 λ°”λ‘œ μΆ”μƒν™”μ˜ λ§ˆλ²• πŸ§™‍♀️ 이라고 μ„€λͺ…ν•©λ‹ˆλ‹€.

    ( μ‹€μ œ λ‚΄μš©μ€ 좔상화λ₯Ό μ˜Ήν˜Έν•˜λ €λŠ” μ·¨μ§€μ˜ 글은 μ•„λ‹™λ‹ˆλ‹€. )

     

    ν₯미둜운 뢀뢄이기도 ν–ˆκ³ , μ˜€λžœλ§Œμ— λ„€νŠΈμ›Œν¬ κ°œλ…λ„ λ³΅μŠ΅ν•  κ²Έ λ¦¬λ§ˆμΈλ“œ ν•˜λŠ” 마음으둜

    λ‹ΉλΆ„κ°„ ν•΄λ‹Ή 뢀뢄을 λ‹€μ‹œ μ •λ¦¬ν•΄λ³ΌκΉŒ ν•©λ‹ˆλ‹€ :)


     

    ꡬ성 μš”μ†Œλ₯Ό μ€‘μ‹¬μœΌλ‘œ 관심 μžˆλŠ” λΆ€λΆ„ μ‚΄νŽ΄λ³΄κΈ°

    μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ˜μ—­μ—λŠ” λ„€νŠΈμ›Œν¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό μ†ŒμΌ“ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μžˆλ‹€.

    μœ— 뢀뢄이 μ•„λž«λΆ€λΆ„μ˜ κΈ°λŠ₯을 μ‚¬μš©ν•˜μ—¬ λͺ©μ μ„ λ‹¬μ„±ν•˜λŠ” 것이 λ³΄ν†΅μ˜ 흐름이며, νλ¦„μ˜ 역전이 μžˆλŠ” κ²½μš°λ„ μžˆλ‹€.

    λ„€νŠΈμ›Œν¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ μ†ŒμΌ“ 라이브러리의 κΈ°λŠ₯을 μ‚¬μš©ν•΄ ν”„λ‘œν† μ½œ μŠ€νƒμ— 데이터 μ†‘μˆ˜μ‹ μ„ μš”μ²­ν•œλ‹€.

    μ†ŒμΌ“ λΌμ΄λΈŒλŸ¬λ¦¬μ—λŠ” 리쑸버가 λ‚΄μž₯λ˜μ–΄μžˆλŠ”λ°, DNS μ„œλ²„μ— 쑰회 λ™μž‘μ„ μˆ˜ν–‰ν•œλ‹€.

    ν•΄λ‹Ή λ™μž‘μ€ 호슀트 λ„€μž„μ„ 가지고 μ‹€μ œ IP μ£Όμ†Œλ₯Ό μ°ΎλŠ” 과정이닀.

     


     

    ν”„λ‘œν† μ½œ μŠ€νƒ

     

    OS μ˜μ—­μ—λŠ” ν”„λ‘œλ‘œμ½œ μŠ€νƒμ΄ μžˆλŠ”λ°, TCP 와 UDP 그리고 μ•„λž˜ 계측에 IP κ°€ μ‘΄μž¬ν•œλ‹€.

    λ„€νŠΈμ›Œν¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ λ°μ΄ν„°μ˜ μ†‘μˆ˜μ‹ μ„ μœ„ν•΄ TCP ν˜Ήμ€ UDP λ₯Ό μ‚¬μš©ν•œλ‹€.

    두 ν”„λ‘œν† μ½œμ€ 차이점이 있으며, λ‹€μŒ μž₯μ—μ„œ μžμ„Έν•˜κ²Œ μ„€λͺ…ν•œλ‹€.

     

    일반적인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ TCP λ₯Ό μ‚¬μš©ν•΄ 데이터 μ†‘μˆ˜μ‹ μ„ ν•œλ‹€.

    UDP λŠ” DNS μ„œλ²„μ— λŒ€ν•œ 쑰회 λ“±μ˜ 짧은 μ œμ–΄μš© 데이터 μ†‘μˆ˜μ‹ μ— μ‚¬μš©ν•œλ‹€.

    이 λ•Œ 슀트리밍 μ„œλΉ„μŠ€λŠ” UDP λ₯Ό ν™œμš©ν•˜λŠ” κ²ƒμœΌλ‘œ μ•Œκ³  μžˆλŠ”λ°, 이 뢀뢄이 μ–ΈκΈ‰λ˜λ©΄ μžμ„Ένžˆ 닀루어본닀.

     

    IP ν”„λ‘œν† μ½œμ€ νŒ¨ν‚· μ†‘μˆ˜μ‹  λ™μž‘μ„ μ œμ–΄ν•˜λŠ” 역할을 ν•œλ‹€.

    νŒ¨ν‚·μ΄λž€ μ†‘μˆ˜μ‹  λ°μ΄ν„°μ˜ 쑰각이며, λ„€νŠΈμ›Œν¬ ν†΅μ‹ μ—μ„œ λ°μ΄ν„°λŠ” νŒ¨ν‚·μ΄λΌλŠ” 쑰각으둜 λ‚˜λ‰˜μ–΄ 보내진닀.

    IP ν”„λ‘œν† μ½œμ€ νŒ¨ν‚·μ„ 톡신 μƒλŒ€κΉŒμ§€ μš΄λ°˜ν•˜λŠ” 것이 μ£Ό 역할이닀.

    IP ν”„λ‘œν† μ½œμ€ λ˜ν•œ ICMP 와 ARP λΌλŠ” ν”„λ‘œν† μ½œμ„ ν¬ν•¨ν•˜λŠ”λ°,

    각각 ICMP λŠ” νŒ¨ν‚· 운반 μ‹œ λ°œμƒν•˜λŠ” 였λ₯˜λ₯Ό ν†΅μ§€ν•˜κ±°λ‚˜, μ œμ–΄μš© λ©”μ‹œμ§€λ₯Ό ν†΅μ§€ν•˜λŠ” 역할을 ν•œλ‹€.

    ARP λŠ” IP μ£Όμ†Œμ— λŒ€μ‘ν•˜λŠ” μ΄λ”λ„·μ˜ MAC μ£Όμ†Œλ₯Ό 쑰사할 λ•Œ μ‚¬μš©ν•œλ‹€. (이전 κΈ€ μ°Έκ³ )

     


     

    μ†ŒμΌ“μ˜ 싀체

    μ†ŒμΌ“μ€ λŒ€μ²΄ 무엇인가?

    μ›λž˜ μ†ŒμΌ“μ€ κ°œλ…μ μΈ 것이닀.

    그런데 물리적으둜 κ°€λ¦¬μΌœλ„ 무리가 μ—†λŠ” μ˜μ—­μ΄ μ‘΄μž¬ν•œλ‹€.

    μ•„λž˜μ™€ κ°™λ‹€.

    ν”„λ‘œν† μ½œ μŠ€νƒμ€ 내뢀에 μ œμ–΄μ •λ³΄λ₯Ό κΈ°λ‘ν•˜λŠ” λ©”λͺ¨λ¦¬ μ˜μ—­μ„ 가지고 μžˆλ‹€.
    이 μ˜μ—­ λ‚΄λΆ€μ—μ„œ 톡신 λ™μž‘μ„ μ œμ–΄ν•˜κΈ° μœ„ν•œ μ œμ–΄ 정보도 κ΄€λ¦¬ν•˜λŠ”λ°, 이것을 μ†ŒμΌ“μ΄λΌκ³  λΆ€λ₯Έλ‹€.

     

    이 μ œμ–΄ μ •λ³΄μ—λŠ” 톡신 μƒλŒ€μ˜ IP μ£Όμ†Œ, 포트 번호, 톡신 λ™μž‘μ˜ 진행 μƒνƒœλ“±μ΄ ν¬ν•¨λœλ‹€.

    λ˜ν•œ μž¬μ†‘μ‹ μ„ μœ„ν•΄ κΈ°λ‘ν•΄μ•Όν•˜λŠ” 응닡 μ—¬λΆ€, 솑신 λ™μž‘ν›„ κ²½κ³Ό μ‹œκ°„λ“±λ„ ν¬ν•¨λœλ‹€.

     

    즉, μ†ŒμΌ“μ—λŠ” ν†΅μ‹ λ™μž‘μ„ μ œμ–΄ν•˜κΈ° μœ„ν•œ μ—¬λŸ¬κ°€μ§€ μ œμ–΄ 정보가 κΈ°λ‘λ˜μ–΄ μžˆλ‹€.

    ν”„λ‘œν† μ½œ μŠ€νƒμ€ μ†ŒμΌ“ (μ œμ–΄ 정보) 을 μ°Έμ‘°ν•˜μ—¬ 데이터 μ†‘μˆ˜μ‹  λ™μž‘μ„ κ²°μ •ν•œλ‹€.

    sudo lsof -P -i λͺ…λ Ήμ–΄μ˜ κ²°κ³Ό

     

    μœ„ μ‚¬μ§„μ—μ„œ ν•œ 행이 ν•˜λ‚˜μ˜ μ†ŒμΌ“μ— ν•΄λ‹Ήν•œλ‹€.

    'μ†ŒμΌ“μ„ λ§Œλ“ λ‹€' λŠ” λ™μž‘μ€ 여기에 ν•œ ν–‰μ˜ μ œμ–΄ 정보λ₯Ό μΆ”κ°€ν•˜κ³  ( 이것 외에도 λ‹€μˆ˜μ˜ 정보가 κΈ°λ‘λ˜μ–΄ μžˆλ‹€ )

    μ†‘μˆ˜μ‹  데이터λ₯Ό μΌμ‹œμ μœΌλ‘œ μ €μž₯ν•˜λŠ” 버퍼 λ©”λͺ¨λ¦¬λ₯Ό μ€€λΉ„ν•˜λŠ” λ“±μ˜ 톡신을 μ€€λΉ„ν•œλ‹€.

     

    netstat -an λͺ…λ Ήμ–΄μ˜ κ²°κ³Ό

     

    TCP/IP ν”„λ‘œν† μ½œμ„ μ‚¬μš©ν•˜μ—¬ 데이터 μ†‘μˆ˜μ‹ μ„ ν•˜λŠ” κ²½μš°μ—λŠ” TCP 와 UDP 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•œλ‹€.

    UDP ν”„λ‘œν† μ½œμ€ μ†ŒμΌ“μ„ μƒλŒ€μΈ‘μ˜ μ£Όμ†Œλ‚˜ ν¬νŠΈμ™€ μ—°κ²°ν•˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ μƒλŒ€λ°© μ£Όμ†Œκ°€ *:* μž„μ„ 확인할 수 μžˆλ‹€.

    ESTABLISHED : 접속 λ™μž‘μ΄ λλ‚˜κ³  데이터가 톡신 쀑인지λ₯Ό λ‚˜νƒ€λƒ„

    LISTEN: μƒλŒ€μ˜ 접속을 기닀리고 μžˆλŠ” μƒνƒœμž„μ„ λ‚˜νƒ€λƒ„


     

    Socket 라이브러리λ₯Ό ν˜ΈμΆœν–ˆμ„ λ•Œμ˜ λ™μž‘

    μ†ŒμΌ“μ„ μƒμ„±ν•œλ‹€.

    λ„€νŠΈμ›Œν¬ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μ†ŒμΌ“μ„ λ§Œλ“€ 것을 μ˜λ’°ν•˜λ©΄ ν”„λ‘œν† μ½œ μŠ€νƒμ€ ν•œ 개의 μ†ŒμΌ“μ„ λ§Œλ“ λ‹€.

    의뒰λ₯Ό 받은 ν”„λ‘œν† μ½œ μŠ€νƒμ€ μš°μ„  μ†ŒμΌ“ ν•œκ°œλ₯Ό μœ„ν•œ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ ν™•λ³΄ν•œλ‹€.

    ν™•λ³΄ν•œ λ©”λͺ¨λ¦¬ μ˜μ—­μ— 톡신 μ œμ–΄ 정보λ₯Ό κΈ°λ‘ν•œλ‹€.

     

    이 λ•Œ μ†ŒμΌ“μ€ μž‘μ„±λœ 직후이기 λ•Œλ¬Έμ— 데이터 μ†‘μˆ˜μ‹  λ™μž‘μ΄ μ‹œμž‘λ˜μ§€ μ•Šμ€ 초기 μƒνƒœμ΄λ‹€.
    이 초기 μƒνƒœ μ œμ–΄ 정보λ₯Ό μ†ŒμΌ“μ˜ λ©”λͺ¨λ¦¬ μ˜μ—­μ— κΈ°λ‘ν•œλ‹€.

     

    μ†ŒμΌ“μ΄ λ§Œλ“€μ–΄μ§€λ©΄, ν”„λ‘œν† μ½œ μŠ€νƒμ€ λ„€νŠΈμ›Œν¬ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ†ŒμΌ“μ„ 식별할 수 μžˆλŠ” λ””μŠ€ν¬λ¦½ν„°λ₯Ό μ•Œλ €μ€€λ‹€.

    μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 이후 데이터 μ†‘μˆ˜μ‹  λ™μž‘μ„ ν”„λ‘œν† μ½œ μŠ€νƒμ— μ˜λ’°ν•  λ•Œ, 이 λ””μŠ€ν¬λ¦½ν„° 정보도 ν•¨κ»˜ μ „λ‹¬ν•œλ‹€.

    μ™œ 그럴까? ν”„λ‘œν† μ½œ μŠ€νƒμ€ μ†ŒμΌ“μ„ μ°Έμ‘°ν•˜μ—¬ 데이터 μ†‘μˆ˜μ‹  λ™μž‘μ„ κ²°μ •ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

    μ΄λ ‡κ²Œ μ†ŒμΌ“μ˜ λ””μŠ€ν¬λ¦½ν„°λ§Œ μ „λ‹¬ν•˜λ©΄ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ 일일이 μ œμ–΄ 정보λ₯Ό ν”„λ‘œν† μ½œ μŠ€νƒμ— μ•Œλ €μ€„ ν•„μš”κ°€ 없어진닀.

     


    μ˜€λŠ˜λ„ λ‚˜λŠ” μ„±μž₯ν–ˆλ‹€!!πŸ”₯

     

    πŸ€–πŸŸ’[우짱의 iOS λΈ”λ‘œκ·Έ]πŸ”΅πŸ’»

    iOSλ₯Ό κ³΅λΆ€ν•˜λ©΄μ„œ 배운 λ‚΄μš©μ„ κΈ°λ‘ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

    λŒ“κΈ€

μ–΄μ œλ³΄λ‹€ λ°œμ „ν•œ λ‚˜