2023. 12. 19. 13:13ใComputerScience/ComputerNetwork
9. Transport layer 2
* Socket programming
- IP + port number -> socket / ์ ์ธ๊ณ์์ ์ ๋ํฌํ ์ปดํจํฐ ์๋ณ + ์ปดํจํฐ์์ ์ ๋ํฌํ ํ๋ก๊ทธ๋จ ์๋ณ
- ํน์ ๋ ธ๋์ ํน์ ํ๋ก๊ทธ๋จ -> end point
- ์ด์์ฒด์ ์๊ฒ ํ๋ฝ ๋ฐ๊ณ , ํ๋ก๊ทธ๋จ์ ์ํด OS๊ฐ ์ํ ์ ๋ณด์ ๋ฉ๋ชจ๋ฆฌ๋ค ์ ๋ถ ๋ง๋๋ ๊ณผ์ ์ด ์์ผ์ด๋ค.
- TCP/IP networks, ์๋ฐฉํฅ ํต์ , local or ์ธํฐ๋ท์ด๋ ์๊ด X, ์ ํต์ ์ผ๋ก ์ด๋ฅผ ์์ผ ํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ํ๋ค.
+ 0.0.0.0์ ๋ณธ์ธ์ ์ง์นญ, ํ ์ปดํจํฐ์์ ๋ ํ๋ก๊ทธ๋จ ๊ฐ์ ํต์ ์ IPC
- ๋ํ์ ์ธ TCP/UDP -> ํด๋ผ์ด์ธํธ, ์๋ฒ architecture (ex. Web Server, Web Browser)
+ ๋ง์ฝ์ 1:1 ์๋ ๊ตฌ์กฐ, ์นดํก ์ฑํ ๊ตฌ์กฐ๋ผ๋ฉด? (TCP/UDP๋ 1:1๋ฐ์ ์์)
- ํด๋ผ์ด์ธํธ1๊ณผ ์๋ฒ๋ 1:1๋ก ์ฐ๊ฒฐ, ๋ค๋ฅธ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ค ๋ ๋ฆฝ์ ์ผ๋ก TCP connection์ ๊ฐ์ ธ์ผ ํ๋ค.
* ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฐจ
1. ํด๋ผ์ด์ธํธ ์์ผ์ socket connect (์ฐ๊ฒฐ ์ค์ ), OS๊ฐ ๋๋ค์ผ๋ก ํฌํธ ๋๋ฒ ์ ํด ์ค /
-> ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ๋ฉด ์๋ฒ๊ฐ ๋ฐ๊ธฐ๋ง ํจ -> ์ข ๋ฃ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ, FIN์ ์ฃผ๊ณ ๋ฐ๋ ๊ฒ
- write, read ํ ์ดํ, close
2. ์๋ฒ๋ ํญ์ ์ด์์์ด์ผ ํ๋ค. Socket bind, listen, accept (์ฐ๊ฒฐ ์ค์ )
- read, write ์ดํ close / ์๋ฒ๋ ๋ฉํฐ ์ค๋ ๋ or ํ๋ก์ธ์ค๋ก ํด๋ผ์ด์ธํธ๋ฅผ ๋ณ๋ ฌ์ ์ผ๋ก ๋ฐ์
* Echo Server in Python
1. ๋ณธ์ธ์ HOST์ PORT๋ฅผ ๊ธฐ๋ฐ์ผ๋ก socket์ bind –> ์ด ํ๋ก๊ทธ๋จ๊ณผ ์ฐ๊ฒฐํ๋ค.
2. Listen – ํด๋ผ์ด์ธํธ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. / 3. accept / 4. ์ดํ ํด๋ผ์ด์ธํธ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
* Echo Server in Python
1. ์๋ฒ์ HOST์ PORT๋ฅผ ๊ธฐ๋ฐ์ผ๋ก socket์ connect / 2. ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๋ค.
+ C๋ก ์ง๋ฉด ํจ์ฌ ๊ธด ์ฝ๋ -> ์ ๋ ฅ ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ ๋ค ์ค์ผ ํจ
* ZeroMQ
- ๋น๋๊ธฐ ๋ฉ์ธ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ํด๋ผ์ด์ธํธ ์๋ฒ์ ์ฃผ์ข ๊ด๊ณ X, ๋๋ฑํ ๊ด๊ณ O
- ๋ฒํด๋ฆฌ TCP ์์ผ ํ๋ก๊ทธ๋๋ฐ๊ณผ API๋ฅผ ๋น์ทํ๊ฒ ๋ง๋ฆ / ํด๋ผ์ฐ๋ ์ปดํจํ ์์๋ ๋ง์ด ์ฌ์ฉํ๋ค.
- ์ ํต์ ์ธ 1:1 connection์ TCP์ ๋ฌ๋ฆฌ, ์ฌ๋ฌ ํจํด๋ค๋ก many to many connection ๊ตฌํ
- request reply / Publish subscribe / push pull – pipeline / exclusive pair
ex1) Client & Worker
– ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์์ ์ ๋ธ๋ก์ปค๊ฐ DB์ ๊ฐ๋ค๊ฐ, ์ ํฉํ ์์ปค์๊ฒ ์์ ์ ์ ๋ฌํจ
- ๋ผ์ฐํฐ๊ฐ ํด๋ผ์ด์ธํธ ๋ด๋น, ๋๋ฌ๊ฐ ์์ปค ๋ด๋น, ์ ์ ํ ์์ปค์๊ฒ ์ผ์ ์ ๋ฌ, ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ํด๋ผ์ด์ธํธ์๊ฒ ์ ๋ฌ
ex2) Publish & Subscriber
- ์ ๋ณด๊ฐ ๋ฐ๋๋ฉด Publisher๊ฐ ๋ค๋ฅธ subscriber๋ค์๊ฒ ๋ชจ๋ ๋ฟ๋ฆฐ๋ค.
- Publisher๋ค / subscriber๋ค์ด ์กด์ฌ / ์ค์์ง์คํ (๋ค์ด๋ฒ) : XSUB / XPUB
* RabbitMQ
– Centralized Message Queue – ์ค์์ง์คํ, ์๋ฒ๊ฐ ์๋ ํํ
- ์ค์ ์ง์คํ ๋ ์๋ฒ๊ฐ ์๋ค, ๋๊ท๋ชจ์ consumer์๊ฒ ๋ฐ์ด๋ด๋ ๊ฒ / ex) ์ฒ ๋ง๋ช ๊ฐ์ ์์๊ฒ ์คํธ ๋ฟ๋ฆฌ๊ธฐ
- ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๋๋ฐ, ํ๋(์๋ฒ)๊ฐ ๋ณด๋ด๋ ๊ฒ์ ๋๋ค์๊ฐ ๋ฐ๋ ๊ตฌ์กฐ
* Swift๋ก Socket Programming
์ง๋ ํ๊ธฐ ํ์คํ ๊ณผ์ ๋ก ํด๋ดค์ต๋๋ค. :)
https://github.com/SohyeonKim-dev/SwiftSocketServer
GitHub - SohyeonKim-dev/SwiftSocketServer: 2023-1 FSSN Server
2023-1 FSSN Server. Contribute to SohyeonKim-dev/SwiftSocketServer development by creating an account on GitHub.
github.com
https://github.com/SohyeonKim-dev/SwiftSocketClient
GitHub - SohyeonKim-dev/SwiftSocketClient: 2023-1 FSSN Client
2023-1 FSSN Client. Contribute to SohyeonKim-dev/SwiftSocketClient development by creating an account on GitHub.
github.com
'ComputerScience > ComputerNetwork' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Computer Network] Chap11. Cloud Computing (0) | 2023.12.19 |
---|---|
[Computer Network] Chap10. HTTP & SIP (1) | 2023.12.19 |
[Computer Network] Chap8. Transport layer (1) (0) | 2023.12.19 |
[Computer Network] Chap7. Network Layer (2) (1) | 2023.11.13 |
[Computer Network] Chap6. Network Layer (1) (1) | 2023.11.13 |