OSI 7 Layer?
์ค๋๋ ์ด๊น์์ด ํ๋๋ ๋ชจ๋ฅด๋ ์ฉ์ด๊ฐ ๋์๋ค.
์ข์ ์์์ด ์์ด ํ๋ฒ ๊ณต๋ถํด๋ณด๋ คํ๋ค.
1. Physical Layer
- 0๊ณผ 1์ ๋์ด์ ์๋ ๋ก๊ทธ ์ ํธ๋ก ๋ฐ๊พธ์ด ์ ์ ์ผ๋ก ํ๋ ค๋ณด๋ด๊ณ , (encoding)
- ์๋ ๋ก๊ทธ ์ ํธ๊ฐ ๋ค์ด์ค๋ฉด 0๊ณผ 1์ ๋์ด๋ก ํด์ํ์ฌ (decoding)
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๋ ๋์ ์ปดํจํฐ๊ฐ 0๊ณผ 1์ ๋์ด์ ์ฃผ๊ณ ๋ฐ์ ์ ์๊ฒ ํด์ฃผ๋ ๋ชจ๋ (module ํจ์)
์ธ์ฝ๋ฉ๊ณผ ๋์ฝ๋ฉ
data = 01010101
// ์ธ์ฝ๋ฉ (Input : data, Output : signal)
Signal encode(data) -> ์๋ ๋ก๊ทธ ์ ํธ {
....
}
// ๋์ฝ๋ฉ (Input : signal, Output : data)
Data decode(์๋ ๋ก๊ทธ์ ํธ) -> ์๋ณธ ๋ฐ์ดํฐ {
....
}
์ด๋์ ๊ตฌํ๋์ด ์์๊น?
PHY ์นฉ
- ์ฌ์ค 1๊ณ์ธต ๋ชจ๋์ ํ๋์จ์ด์ ์ผ๋ก ๊ตฌํ๋์ด ์๋ค.
2. Data-Link Layer
๋ฐฐ๊ฒฝ์ง์ : ์ฌ๋ฌ ๋ ์ปดํจํฐ ๊ฐ์ ํต์
- ์ฒซ๋ฒ์งธ ์ํฉ : ์ฌ๋ฌ ๋์ ์ปดํจํฐ๊ฐ ํต์ ํ๊ณ ์ถ์ ๋
์๋ฆผ์ด๊ฐ ๋ณด๋ด๋ ๋ฐ์ดํฐ๋ฅผ ์์๊ฐ ๋ฉ์์ง์ ๋ชฉ์ ์ง๋ฅผ ํ์ธํด์ ํ๋ฆผ์ด์๊ฒ ์ ํด์ค ์ ์๋ค๋ฉด ์ฌ๋ฌ ๋ ๊ฐ์ ํต์ ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ค.
→ ์ด๋ฐ ๊ธฐ๋ฅ์ ํ๋๋ก ๋ง๋ ๊ฒ์ ์ค์์น
๋ผ๊ณ ํ๋ค.
์ค์์น๋ ์ผ์ข ์ ์ปดํจํฐ๋ก์ ์ด๋ฐ ์ผ์ ์ํํ๋ค.
- ๋๋ฒ์งธ ์ํฉ : ์๋ก๋ค๋ฅธ ๋คํธ์ํฌ์ ์๋ ์ปดํจํฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ์ถ์๋
์๋ฆผ๊ณผ ํ๋ฆผ์ ์ปดํจํฐ๋ ์ ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ง ์์ ํต์ ์ด ์ด๋ ต๋ค.
์๋ก๋ค๋ฅธ ์ค์์น์ ์ค์์น๋ฅผ ์ฐ๊ฒฐํด์ ์๋ก ๋ค๋ฅธ ๋คํธ์ํฌ์ ์ํ ์ปดํจํฐ๋ผ๋ฆฌ ํต์ ํ๊ฒ ํด์ฃผ๋ ์ฅ๋น๋ฅผ ๋ผ์ฐํฐ
๋ผ๊ณ ํ๋ค.
์ ์ด๋ก์ ์์๋ ์ฐ๋ฆฌ๊ฐ ์ ์๊ณ ์๋ ๊ณต์ ๊ธฐ
์ ํด๋น๋๋ค.
- ์ธ๋ฒ์งธ ์ํฉ : ๋ ๋ง์ ๋คํธ์ํฌ๋ค์ ์ฐ๊ฒฐํด๋ณด์.
์ด๋ฐ์์ผ๋ก ์ ์ธ๊ณ์ ์ปดํจํฐ๋ค์ ์ฐ๊ฒฐํ ๊ฒ์ ์ธํฐ๋ท
์ด๋ผ๊ณ ํ๋ค.
Data-Link Layer
์ฌ๋ฌ ์ปดํจํฐ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋์๋ ์ด๋ป๊ฒ ํด์ผ ์ ๋๋ก ๋์ด ์ฝ์ ์ ์์๊น?
- ์ด๋ฅผ ์ํด ์ก์ ์๋ ๋ฐ์ดํฐ์ ์ ๋ค์ ํน์ ํ ๋นํธ์ด์ ๋ถ์ธ๋ค.
- ์๋ฅผ๋ค์ด, ์ก์ ์๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ๋ ์์๋ 1111, ๋ค์๋ 0000์ ๋ถ์ธ๋ค๊ณ ํด๋ณด์.
- ๊ทธ๋ฌ๋ฉด ์์ ์๋ 0000 1111์ด ๋์ค๋ ๋ถ๋ถ์ ์ฐพ์ผ๋ฉด ๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๋ค.
๊ฒฐ๊ตญ Data-link Layer๋?
- ๊ฐ์ ๋คํธ์ํฌ์ ์๋ ์ฌ๋ฌ ๋์ ์ปดํจํฐ๋ค์ด ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด์ ํ์ํ ๋ชจ๋
- Framing์ Data-link Layer์ ์ํ๋ ์์ ๋ค ์ค ํ๋๋ค.
Data-link Layer ๋์๋ฐฉ์
์ด๋์ ๊ตฌํ๋์ด ์์๊น?
๋์นด๋
- 2๊ณ์ธต๋ ํ๋์จ์ด๋ก ๊ตฌํ๋์ด์๋ค.
3. Network Layer
A๋ B์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ ์ถ๋ค.
A๋ ๋ฐ์ดํฐ ์์ ๋ชฉ์ ์ง ์ฃผ์, ์ฆ B์ ์ฃผ์๋ฅผ ๋ถ์ธ๋ค.
์ฌ๊ธฐ์ 55.10.54.75
์ ๊ฐ์ด, ๊ฐ ์ปดํจํฐ๋ค์ด ๊ฐ๋ ๊ณ ์ ํ ์ฃผ์๋ฅผ IP์ฃผ์๋ผ๊ณ ํ๋ค.
A๋ B์ IP์ฃผ์๋ฅผ ์ด๋ป๊ฒ ์๋๊ฑธ๊น?
B๊ฐ ๋ค์ด๋ฒ์ ์๋ ํ ์ปดํจํฐ๋ผ๊ณ ํด๋ณด์.
์ฐ๋ฆฌ๊ฐ ์ฃผ์์ฐฝ์ www.naver.com์ ์ ๋ ฅํ๋ฉด ์ด ์ฃผ์๋ IP์ฃผ์๋ก ๋ณํ๋์ด ์ฌ์ฉ๋๋ค.
๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ naver์ ์ฃผ์๋ฅผ ์๊ณ ์๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ์๋๋ฐฉ์ IP์ฃผ์
๋ฅผ ์๊ณ ์์ด์ผ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์๋ค.
์๋ฌดํผ, ์์ผ๋ก 55.10.54.75[data]
์ด๊ฒ์ ํจํท์ด๋ผ๊ณ ๋ถ๋ฅผ ๊ฒ์ด๋ค.
๊ฐ์ฅ ๋จผ์ A๊ฐ ๋ผ์ฐํฐ์๊ฒ ํจํท์ ์ ๋ฌํ๋ค.
๊ฐ
๋ ํจํท์ ์ด์ด๋ณด๊ณ , ๋ชฉ์ ์ง IP์ฃผ์๋ฅผ ํ์ธํ๋ค.
๊ฐ
๋ ๋ณธ์ธ์ด ์ฐ๊ฒฐ๋ ์ปดํจํฐ ์ค์๋ 55.10.54.75์ธ ์ปดํจํฐ๊ฐ ์๋ค๋ ๊ฒ์ ์์์ฑ๋ค.
๊ฐ
๋ ๋ฐ์ดํฐ๋ฅผ ๋ค์ ํฌ์ฅํ ๋ค์ ์์ ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ ์ ์ผํ ๋ผ์ฐํฐ์ธ ๋ง
์๊ฒ ์ ๋ฌํ๋ค.
ํจํท์ ๋ฐ์ ๋ผ์ฐํฐ ๋ง
๋ ๊ฐ
๊ฐ ๊ทธ๋ฌ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ํจํท์ ๊น์ ๋ชฉ์ ์ง ์ฃผ์๋ฅผ ์ฝ๋๋ค.
๋ชฉ์ ์ง๊ฐ B๋ผ๋ ๊ฒ์ ์๊ฒ๋ ๋ง
๋ ํจํท์ด B์ ๋์ฐฉํ๋ ค๋ฉด ์ด๋ ์ ์ ์ผ๋ก ๋ณด๋ด์ผํ๋ ์ง ์์๋ด์ผ ํ๋ค.
๋ง
๋ ๊ฐ
๋
๋ฐ
์ค ๋ผ์ฐํ
์ ํตํด ๋ฐ
์๊ฒ ํจํท์ ๋ณด๋ธ๋ค.
๋ฐ
๋ํ ๋ง
์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ผ
์๊ฒ ํจํท์ ๋ณด๋ธ๋ค.
๋ผ๋ ์์ ๊ณผ ์ฐ๊ฒฐ๋ ์ปดํจํฐ ์ค 55.10.54.75์ธ ์ปดํจํฐ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ค.
๊ทธ๋์ B๋ก ํจํท์ ์ ๋ฌํ๋ค.
์ด๋ ๊ฒ A์์ ์ถ๋ฐํ ํจํท์ด B๋ก ์ ์ ๋ฌ๋์๋ค.
๊ทธ๋์ ๊ฒฐ๊ตญ Network Layer๋?
- ์๋ง์ ๋คํธ์ํฌ๋ค์ ์ฐ๊ฒฐ๋ก ์ด๋ฃจ์ด์ง๋ inter-network ์์์
- ์ด๋๊ฐ์ ์๋ ๋ชฉ์ ์ง ์ปดํจํฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๊ธฐ ์ํด,
- IP ์ฃผ์๋ฅผ ์ด์ฉํด์ ๊ธธ์ ์ฐพ๊ณ (routing)
- ์์ ๋ค์์ ๋ผ์ฐํฐ์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋๊ฒจ์ฃผ๋ ๊ฒ (forwarding)
์ฐธ๊ณ : ํจํท ๋ง๋๋๋ฒ
- ํจํท์ ๊ฐ์ฒด๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ๋ณ์ ์ค ํ๋์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ,
- ๋๋ค๋ฅธ ์ฃผ์์ ๋ชฉ์ ์ง ์ฃผ์๋ฅผ ๋ฃ๋๋ค.
Network Layer ๊ธฐ์ ์ ์ด๋์ ๊ตฌํ๋์ด ์์๊น?
- ์ด์์ฒด์ ์ ์ปค๋์ ์ํํธ์จ์ด์ ์ผ๋ก ๊ตฌํ๋์ด ์๋ค.
4. Transport Layer
์์์ 3๊ณ์ธต ๊น์ง ์งํํ๋ฉฐ, ์ด์ ์ธํฐ๋ท ์์ ๋ชจ๋ ์ปดํจํฐ๊ฐ ์๋ก ํต์ ํ ์ ์๊ฒ ๋์๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ์์ ์๋ ์ ์ธ๊ณ์ ์ปดํจํฐ๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ ์ปดํจํฐ์๋ ์ฌ๋ฌ ๊ฐ์ ํ๋ก๊ทธ๋จ๋ค์ด ์คํ๋๊ณ ์์๋ค.
์ปดํจํฐ๋ ์ 3๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ก์ธ์ค๋ค์๊ฒ ๋๋ ์ฃผ๋ ค๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฌด์จ ํ๋ก์ธ์ค์๊ฒ ์ค์ผํ ์ง ์ปดํจํฐ๋ ์ด๋ป๊ฒ ์๊น?
๋จผ์ , ๋ฐ์ดํฐ๋ฅผ ๋ฐ๊ณ ์ํ๋ ํ๋ก์ธ์ค๋ค์ ํฌํธ๋ฒํธ(Port Number)
๋ผ๋ ๊ฒ์ ๊ฐ์ ธ์ผ ํ๋ค.
์ ์ก์๋ ๋ฐ์ดํฐ ๋ฐ์ ์์ ์ ์ปดํจํฐ์ ์๋ ํ๋ก์ธ์ค์ ํฌํธ๋ฒํธ๋ฅผ ๋ถ์ฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ธ๋ค.
๋ค์ด๋ฒ๋ 80ํฌํธ ์ธ์๋ ์๋๋ค.
)
ํฌํธ๋ฒํธ์ ๋ง์ถฐ ๋ฐ์ดํฐ๋ค์ ๋ณด๋ด์ค๋ค.
๊ฒฐ๊ตญ Transport Layer๋?
- Port ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ
- ๋์ฐฉ์ง ์ปดํจํฐ์ ์ต์ข
๋์ฐฉ์ง์ธ
ํ๋ก์ธ์ค
์ ๊น์ง - ๋ฐ์ดํฐ๊ฐ ๋๋ฌํ๊ฒ ํ๋ ๋ชจ๋
Transport Layer ๊ธฐ์ ์ ์ด๋์ ๊ตฌํ๋์ด ์์๊น?
- ์ด์์ฒด์ ์ ์ปค๋์ ์ํํธ์จ์ด์ ์ผ๋ก ๊ตฌํ๋์ด ์๋ค.
5. Application Layer
TCP/IP ์์ผ ํ๋ก๊ทธ๋๋ฐ
- ์ด์์ฒด์ ์ Transport layer์์ ์ ๊ณตํ๋ API๋ฅผ ํ์ฉํด์
- ํต์ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ๊ฒ์
- TCP/IP ์์ผ ํ๋ก๊ทธ๋๋ฐ, ๋๋ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ ์ด๋ผ๊ณ ํ๋ค.
- ์์ผ ํ๋ก๊ทธ๋๋ฐ ๋ง์ผ๋ก๋
- ํด๋ผ์ด์ธํธ, ์๋ฒ ํ๋ก๊ทธ๋จ์ ๋ฐ๋ก๋ฐ๋ก ๋ง๋ค์ด์ ๋์์ํฌ ์ ์๋ค.
- ๋ฟ๋ง ์๋๋ผ, TCP/IP ์์ผ ํ๋ก๊ทธ๋๋ฐ์ ํตํด์
- ๋๊ตฌ๋ ์์ ๋ง์ ์ดํ๋ ์ผ์ด์ Layer ์ธ์ฝ๋์ ๋์ฝ๋๋ฅผ ๋ง๋ค ์ ์๋ค.
- ๋๊ตฌ๋ ์์ ๋ง์ Application Layer ํ๋กํ ์ฝ์ ๋ง๋ค์ด์ ์ฌ์ฉํ ์ ์๋ค.
Base64
์ธ์ฝ๋ฉ
// String์ Data๋ก ๋ณ๊ฒฝ
let string = "hello world"
let strData = string.data(using: .utf8)!
// Base64 ์ธ์ฝ๋ฉ ( Data -> Base64 encoded String )
let base64EncString = strData.base64EncodedString()
๋์ฝ๋ฉ
// Base64 ๋์ฝ๋ฉ
let decodedData = Data(base64Endcoded: baseEncString)!
let base64DecString = String(data: decodedData, encoding: .utf8)!
TCP 3-way HandShake
- SYN์ ํฌํจ๋ ๋ฐ์ ์ ์ฐ์ ๋ฒํธ๋ณด๋ค SYN+ACK ๋ฐ์ ๋ Ack ๋ฒํธ๋ +1 ๋์ด ์์ด์ผ ํ๋ค.
- SYN+ACK ์ดํ ACK๋ฅผ ๋ณด๋ผ ๋ ์ฐ์ ๋ฒํธ๋ ์์ ๋ฐ์ SYN+ACK์ Ack ๋ฒํธ์ ๋์ผํ๊ณ , Ack ๋ฒํธ๋ SYN+ACK์ ์ฐ์๋ฒํธ๋ณด๋ค +1 ๋์ด ์์ด์ผ ํ๋ค.