πŸ“– Note

TCP/IP * 2. ν”„λ‘œν† μ½œ 체계와 μ†ŒμΌ“ νƒ€μž…( TCP, UDP )

___l_i_ * 2020. 3. 5. 20:36

λ„€νŠΈμ›Œν¬ ν”„λ‘œκ·Έλž¨μ„ ν•  λ•Œ κ°€μž₯ 핡심이 λ˜λŠ” 것이 μ†ŒμΌ“μ΄λ‹€. socket을 μ΄μš©ν•˜μ—¬ 각쒅 λ””λ°”μ΄μŠ€μ™€ 데이터 μ†‘μˆ˜μ‹ μ„ ν•œλ‹€.

이런 socket을 생성할 λ•Œ 2κ°€μ§€ μ€‘μš”ν•œ 정보λ₯Ό μž…λ ₯ ν•˜λŠ”λ° 그것이 λ°”λ‘œ ν”„λ‘œν† μ½œ 체계와 μ†ŒμΌ“μ˜ νƒ€μž…μ΄λ‹€.

 

 


 

 

 

 ν”„λ‘œν† μ½œ 체계


 

- Protocol ( ν”„λ‘œν† μ½œ ) μ΄λž€ λ””λ°”μ΄μŠ€ 간에 데이터λ₯Ό μ£Όκ³  λ°›λŠ” 방식이닀. 즉, 각 λ””λ°”μ΄μŠ€ κ°„ μ„œλ‘œ 데이터λ₯Ό μ£Όκ³  λ°›κΈ° μœ„ν•΄μ„œ μ •μ˜ν•΄ 놓은 약속을 λœ»ν•œλ‹€. μ΄λŸ¬ν•œ κ·œμ•½μ„ μ •ν•΄ 놓지 μ•ŠμœΌλ©΄ μƒλŒ€κ°€ λ‚΄κ°€ μ˜λ„ν•œ 것과 λ‹€λ₯΄κ²Œ 데이터λ₯Ό 이해할 μˆ˜λ„ μžˆλ‹€.

 

 

μ†ŒμΌ“ 톡신을 ν•  λ•Œ μ‚¬μš©ν•˜λŠ” ν”„λ‘œν† μ½œ λΆ€λ₯˜κ°€ λͺ‡κ°€μ§€ μžˆλ‹€. μ΄λŸ¬ν•œ λΆ€λ₯˜λ₯Ό ν”„λ‘œν† μ½œ 체계라고 ν•œλ‹€.

μ΄λŸ¬ν•œ λΆ€λ₯˜λ₯Ό ν”„λ‘œν† μ½œ μ²΄κ³„λΌκ³ ν•˜λ©° c μ–Έμ–΄μ—μ„œ socket을 생성할 λ•Œ λ‹€μŒκ³Ό 같이 ν•¨μˆ˜λ₯Ό 호좜 ν•  λ•Œ 첫번째 μΈμžμ— ν”„λ‘œν† μ½œ 체계λ₯Ό λ„£λŠ”λ‹€.

 

// C code

#include <sys/socket.h>
int socket(PF_INET, int type, int protocol );

 

   μ΄λ¦„

   Protocol Family ( ν”„λ‘œν† μ½œ 체계 ) 

   PF_INET

   IPv4 인터넷 ν”„λ‘œν† μ½œ 체계 

   PF_INET6

   IPv6 μΈν„°λ„· ν”„λ‘œν† μ½œ 체계 

   PF_LOCAL

   λ‘œμ»¬ 톡신을 μœ„ν•œ UNIX ν”„λ‘œν† μ½œ 체계 

   PF_PACKET 

   Low Level μ†ŒμΌ“μ„ μœ„ν•œ ν”„λ‘œν† μ½œ 체계 

   PF_IPX 

   IPX 노벨 ν”„λ‘œν† μ½œ 체계 

 

 

 

 

 μ£Όμ†Œ 체계


 

- Cμ—μ„œλŠ” μ†ŒμΌ“μ„ 생성 ν›„ bindλ‚˜ connectλ₯Ό ν•  λ•Œ μ£Όμ†Œ ꡬ쑰체에 μ£Όμ†Œ 체계λ₯Ό λ„£μ–΄μ£Όμ§€λ§Œ, Pythonμ—μ„œλŠ” ν”„λ‘œν† μ½œ 체계λ₯Ό λ„£μ§€ μ•Šκ³  μ•„λž˜ 처럼 μ£Όμ†Œ μ²΄κ³„λ§Œ λ„£λŠ”λ‹€.

 

# Python code

serverSocket = socket(AF_IENT, SOCK_STREAM)

 

   μ΄λ¦„

   Address Family ( μ£Όμ†Œ μ²΄κ³„ ) 

   AF_INET

   IPv4 인터넷 μ£Όμ†Œ μ²΄κ³„ 

   AF_INET6

   IPv6 μΈν„°λ„· μ£Όμ†Œ μ²΄κ³„ 

   AF_LOCAL

   λ‘œμ»¬ 톡신을 μœ„ν•œ UNIX μ£Όμ†Œ 체계

 

 

 

 

 μ†ŒμΌ“ νƒ€μž… ( TCP, UDP )


 

- socket type은 데이터 전솑 방식을 의미 ν•˜λ©° socket ν•¨μˆ˜ 호좜 μ‹œ 2번째 μΈμžμ— 값을 λ„£λŠ”λ‹€.

 

// C code

#include <sys/socket.h>
int socket(int domain, SOCK_DGRAM, int protocol);

 

# Python code

serverSocket = socket(AF_IENT, SOCK_STREAM)

 

   TCP

   UDP

   μ—°κ²° μ§€ν–₯ν˜• μ†ŒμΌ“ ( 3-way handshake )

   λΉ„ μ—°κ²° μ§€ν–₯ν˜• μ†ŒμΌ“

   SOCK_STREAM

   SOCK_DGRAM

   λ°μ΄ν„° 손싀 없이 λͺ©μ μ§€λ‘œ 전솑

   λ°μ΄ν„° μ†μ‹€μ˜ μš°λ €κ°€ 있음

   μ „솑 μˆœμ„œλŒ€λ‘œ 데이터가 μˆ˜μ‹ 

   μ „솑된 μˆœμ„œμ— 상관없이 κ°€μž₯ λΉ λ₯Έ 전솑을 μ§€ν–₯

   λ°μ΄ν„° 경계가 μ—†μŒ

   λ°μ΄ν„° 경계 있음

 

 


Thanks for