January 10, 2021
ํน์ ์๋น์ค๋ฅผ ์ ๊ณตํด์ฃผ๋ ๋ค์ํ ๋๋ฐ์ด์ค๋ค์ด ๋คํธ์ํฌ๋ก ์ฐ๊ฒฐ๋๊ณ ์๊ณ , ์๋น์ค ์ด์ฉ์๊ฐ ๋คํธ์ํฌ๋ฅผ ํตํด ์๋น์ค๋ฅผ ๊ฒ์ํ๊ณ ์ด์ฉํ ์ ์๋ค.
๋ฌผ๋ฆฌ์ ์ธก๋ฉด | ๋ ผ๋ฆฌ์ ์ธก๋ฉด |
---|---|
๋ฐ์ดํฐ ์ ์ก์ ์ฌ์ฉ๋๋ ์ ์ก ๋งค์ฒด, ์ ์์ฉ ์ปค๋ฅํฐ ๋ฐ ์ ์ก ์ ํธ | ๋ฐ์ดํฐ์ ํํ, ์๋ฏธ์ ๊ธฐ๋ฅ, ๋ฐ์ดํฐ ์ ์ก ์ ์ฐจ |
ํค๋์ ๋ฐ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
ํค๋ Header
๋ฐ๋ body
์ค๋๋ ๋คํธ์ํฌ ๊ตฌ์กฐ๋ 1970๋ ๋ ๋ง IOS(International Organization for Standardization)์ ์ํด ๋ง๋ค์ด์ง OSI 7๊ณ์ธต(Open Systems Interconnection 7 Layer)์ ๊ธฐ์ด๋ก ํ๋ค.
๋คํธ์ํฌ ์ฅ๋น๋ผ๋ฆฌ ์๋ก ํ์ค์ ์ธ ์ฐ๊ฒฐ์ ํ ์ ์๋๋ก ํ์ ์ ๊ณตํ๊ธฐ ์ํด ๊ท์ ๋์๋ค.
๊ฐ๋ฐฉํ ์์คํ ํ๊ฒฝ์์๋ ์ด๋ค ์ฅ๋น๋ผ๋ ์ํธ ์ ๋ณด ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๊ฒ ๋์๊ณ ๋คํธ์ํฌ์ ํ๋กํ ์ฝ์ ๋ถ๋ฆฌํจ์ผ๋ก์จ ํ๋กํ ์ฝ์ด ๋จ์ํด์ก๋ค.
๐ ๊ด๋ฆฌ๊ฐ ์ฌ์์ง๊ณ ์ข ๋ ์ ์ฐํ ๊ตฌ์กฐ๊ฐ ๋์๋ค.
๋ฌผ๋ฆฌ ๊ณ์ธต
๋ฐ์ดํฐ ๋งํฌ ๊ณ์ธต
๋คํธ์ํฌ ๊ณ์ธต
ํธ๋์คํฌํธ ๊ณ์ธต
์ธ์ ๊ณ์ธต
ํ๋ ์ ํ ์ด์ ๊ณ์ธต
์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต
์น ๋ธ๋ผ์ฐ์
TCP/IP๊ฐ ์ค์น๋ ์ปดํจํฐ
ํด๋ผ์ด์ธํธ/์๋ฒ ๋ชจ๋ธ๊ณผ ๋๋น๋๋ ๋ชจ๋ธ์ด๋ฉฐ, ์ผ๋ฐ์ ์ผ๋ก P2P๋ผ๊ณ ๋ถ๋ฆ
ํด๋ผ์ด์ธํธ/์๋ฒ ํ๊ฒฝ | P2P ํ๊ฒฝ |
---|---|
- ์๋น์ค ์ ๊ณต์์ ์๋น์ค ์์์๊ฐ ๋ช
ํํ๊ฒ ๊ตฌ๋ถ๋๋ค. - ์๋น์ค ์ ๊ณต์์ธ ์๋ฒ๊ฐ ์๋น์ค ์์์์ธ ํด๋ผ์ด์ธํธ์๊ฒ ์ผ๋ฐฉ์ ์ผ๋ก ์๋น์ค๋ฅผ ์ ๊ณต - ์๋ฒ๋ ํ ๋์ธ๋ฐ, ์๋ง์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ์ํ์ฌ ์๋น์ค๋ฅผ ์์ฒญํ๋ค๋ฉด ๋ถํ๊ฐ ๋ฐ์ํ๋ ๊ฒ์ ๋น์ฐ |
- ํ๋์ ์ฌ์ฉ์๊ฐ ์๋ฒ์ด์ ํด๋ผ์ด์ธํธ ์ญํ ์ ์ํ - ๋คํธ์ํฌ์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ๋ ์ปดํจํฐ๋ค์ด ์๋ก ๋๋ฑํ ๋๋ฃ์ ์ ์ฅ์์ ๋ฐ์ดํฐ๋ ์ฃผ๋ณ ์ฅ์น ๋ฑ์ ๊ณต์ ํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธ - ํ๋์ ์๋ฒ๋ก ์ง์ค๋๋ ์์ฒญ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ๋ถํ๋ฅผ ์ค์ผ ์ ์๋ค. |
IP๋ ์ ๋ขฐ์ฑ์ด ์๋ ํ๋กํ ์ฝ๋ก, ํจํท์ด ์๋๋ฐฉ์๊ฒ ์์ ํ๊ฒ ์ ์ก๋๋ ๊ฒ์ ๋ณด์ฅํ์ง ์๋๋ค.
32๋นํธ ์ ๋ณด๋ก ๊ตฌ์ฑ๋จ
์์ผ
๊ณผ ํฌํธ
๋ฅผ ์ฌ์ฉํด์ ๋์์ ์ฌ๋ฌ ๊ฐ์ ์ ์์ ์ง์ํ ์ ์๋ค.
HTTP๋ ์ํ๋ฅผ ์ ์งํ์ง์๋(Stateless)ํน์ง์ ๊ฐ์ง๋ค.
์์ผ์ ์๋ช ์ฃผ๊ธฐ
์์ผ ํ์
SOCK_STREAM
SOCK_DGRAM
SOCK_RAW
์์ผ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ธํฐ๋ท ์ฃผ์์ ํฌํธ์ ๋ํด ์์์ผ ํ๋ค.
ํฌํธ
InetAddress
ํด๋์ค๋ฅผ ์ด์ฉํ๋ฉด ๋๋ฉ์ธ ์ฃผ์๋ฅผ IP์ฃผ์๋ก ๋ณํํ๊ฑฐ๋, IP์ฃผ์๋ฅผ ๋๋ฉ์ธ ์ฃผ์๋ก ๋ณ๊ฒฝํ ์ ์๋ค.ํ์ฌ ์ปดํจํฐ์ ์ด๋ฆ ๊ตฌํ ์ ์๋ค.
//๊ตฌ๋ฌธ
InetAddress address = InetAddress.getLocalhost();
//๊ทธ๋ฐ์๋
String domain = address.getHostName() //๋๋ฉ์ธ ๋ค์์ ์ป์
String ip = address.getHostAddress()//dotted decimal ์ฃผ์ ์ป๊ธฐ
byte[] ipByte = address.getAddress()//4๋ฐ์ดํธ IP์ฃผ์๋ฅผ ์ป์
TCP ํ๋ก๊ทธ๋๋ฐ์ ์ํด์๋ TCP ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ๋์ ์์๋ฅผ ์๊ณ ์์ด์ผ ํ๋๋ฐ, java์์๋ TCP ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๊ฒ ํ ์ ์๋๋ก java.net ํจํค์ง์ ๊ด๋ จ ํด๋์ค๋ค์ ๋ฏธ๋ฆฌ ์ค๋นํด๋๋ค.
์ฃผ์ ํด๋์ค
ServerSocket
: ์๋ฒ ์ชฝ์์ ํด๋ผ์ด์ธํธ์ ์ ์์ ๋๊ธฐํ๊ธฐ ์ํด์ ๋ฐ๋์ ํ์ํ ํด๋์ค
์ฃผ์ ๋ฉ์๋
Socket accept()
: ํด๋ผ์ด์ธํธ์ ์ ์ ์์ฒญ์ ๋ฐ์ ์๋ก์ด Socket ๊ฐ์ฒด returnvoid claose()
: ์๋ฒ ์์ผ ๋ซ๊ธฐInetAddress getInetAddress()
: ์๋ฒ ์์ ์ ์ธํฐ๋ท ์ฃผ์๋ฅผ returnSocket
: ์๋ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ํต์ ํ๊ธฐ ์ํด์ ๋ฐ๋์ ํ์ํ ํด๋์ค
์ฃผ์ ๋ฉ์๋
void claose()
: ์์ผ ๋ซ๊ธฐInetAddress getInetAddress()
: ์๋๋ฐฉ์ InetAddress๋ฅผ returnInetAddress getInetStream()
: ์ด ์์ผ๊ณผ ์ฐ๊ฒฐ๋ InputStream์ ์ป๋๋ค.OutputStream getOutputStream()
: ์ด ์์ผ๊ณผ ์ฐ๊ฒฐ๋ OutputStream์ ์ป์
ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ธ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ ์ชฝ์์ ๋ฐ์๋ค์ฌ, ํด๋ผ์ด์ธํธ์๊ฒ ๊ทธ๋๋ก ๋ค์ ๋ณด๋ด์ฃผ๋ ๊ฒ์ ์๋ฏธ
TCP ์์ฝ ์๋ฒ๋ฅผ ๊ตฌํํ๋ ์์
TCP ์์ฝ ํด๋ผ์ด์ธํธ ๊ตฌํํ๋ ์์
โ๏ธ์์ฝ ์๋ฒ์ ์์ฝ ํด๋ผ์ด์ธํธ์์์ ์ค์ํ ๋ฌธ์ ์ ์ ์๋ฒ๊ฐ ๋จ ํ๋์ ํด๋ผ์ด์ธํธ ์ ์๋ง์ ์ฒ๋ฆฌํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
accept()๋ฉ์๋๋ก ๋๊ธฐ -> ํด๋ผ์ด์ธํธ์ ์ ์ ์์ฒญ -> ํด๋ผ์ด์ธํธ์ ํต์ ํ ์ ์๋ ์์ผ return -> ๋ค์ accept()ํ์ง ์๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ์๋ฒ๋ค์ ๋์์ ์ฌ๋ฌ ๋ช ์ ์ฌ์ฉ์๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฒ๋ ๋ฉํฐ Thread๋ฅผ ์ด์ฉํ์ฌ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ์ ์ ์์ ์ง์ํด์ผํ๋ค.
TCP ๊ธฐ๋ฐ์ ๋ฉํฐ Thread ์๋ฒ๋ฅผ ๊ตฌํํ๋ ์์
๐UDP๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ 64KB๋ก ์ ํ๋์ด ์๊ณ ์ ๋ขฐ์ฑ์ด ๋จ์ด์ง๋, ์ฐ๊ฒฐ๋์ง ์์ ์ํ๋ก ์ ์ก๋๊ธฐ ๋๋ฌธ์ ์ข ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ผ๋ฏ๋ก ๋ณต์กํ์ง ์๊ณ ๋ถํ๊ฐ ๋ง์ด ์๊ธฐ์ง ์๋ ๊ณณ์ ์ ํฉ
๐TCP๋ ์ฐ๊ฒฐ์ฑ์ผ๋ก ์ธํด ํ ๋ฒ ์ฐ๊ฒฐ์ ๋งบ์ผ๋ฉด ์ฐ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์์ด ์ ๋ขฐ์ฑ์ด ๋์ง๋ง, ์ฐ๊ฒฐ์ ํ์ํ ์๊ฐ์ด ํ์ํ๋ฏ๋ก ๋ฏธ๋ฆฌ ์ ํด์ง์ง ์์ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ขฐ์ฑ ์๊ฒ ์ก์์ ํ๊ธฐ ์ํ ๋คํธ์ํฌ ํ๋ก๊ทธ๋๋ฐ์ ์๋ง๋ค
DatagramPacket ํด๋์ค์ ์ฃผ์ ๋ฉ์๋
Inetaddress getAddress()
: ์ด ๊ฐ์ฒด๋ฅผ ๋ณด๋ธ ๊ณณ์ IP ์ฃผ์๋ฅผ returnbyte[] getData()
: ์ด ๊ฐ์ฒด์ ๋ด๊ธด ๋ฐ์ดํฐ์ ๋ด์ฉ์ byte ๋ฐฐ์ด๋ก returnint getLength()
: ๋ฐ์ดํฐ์ ๊ธธ์ด๋ฅผ returnint getPort()
: ๋ณด๋ธ ๊ณณ์ ํฌํธ ๋ฒํธ๋ฅผ returnDatagramSocket ํด๋์ค์ ์ฃผ์ ๋ฉ์๋
void close()
: ์์ผ ํต์ ์ข
๋ฃInetAddress getInetAddress()
: ํ์ฌ ์์ผ์ด ๋ฐ์ธ๋ฉ ๋ ์ฃผ์ returnvoid receive(DatagramPacket p)
: p๋ฅผ ํตํด ์ ๋ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์์
์๋ฒ์ ๋ค๋ฅด๊ฒ, ๋์ํ๋ ํฌํธ๋ ์ง์ ํ์ง ์๋๋ค.
UDP ์์ฝ ํด๋ผ์ด์ธํธ ๊ตฌํ ์์