인터넷 네트워크
7분 읽기
프로토콜 계층
인터넷 프로토콜 스택은 총 4가지 계층으로 구성되어 있습니다.
- 애플리케이션 계층 -
FTP,HTTP - 전송 계층 -
TCP,UDP - 인터넷 계층 -
IP - 네트워크 인터페이스 계층
![]()
- 채팅 애플리케이션을 활용하여
Hello, world!라는 메시지를 생성합니다. - SOCKET 라이브러리를 통해 OS(Window, Linux, Mac 등)에 전달합니다.
Hello, world!라는 메시지에 TCP 정보를 감쌉니다.- 출발지 PORT와 목적지 PORT에 대한 정보
- 하나의 IP에서 2가지 이상의 작업을 할 때 구분해줄 수 있는 정보가 됩니다.
- 전송 제어에 대한 정보
- IP의 비연결성을 해결합니다.
- 순서와 관련한 정보
- 검증과 관련된 정보
- IP의 비신뢰성을 해결합니다.
- 출발지 PORT와 목적지 PORT에 대한 정보
- IP 패킷을 생성하여
Hello, world!메시지를 감싸고 있는 TCP 정보를 감쌉니다.- 출발지 IP와 목적지 IP에 대한 정보가 추가됩니다.
- LAN 카드를 통해 정보를 전송할 때
Ethernet frame으로 한 번 더 감싸서 내보냅니다.- Ethernet frame에는 랜카드에 포함되어 있는 MAC 주소와 같은 정보가 포함되어 있습니다.
IP 프로토콜 (인터넷 프로토콜)
- 지정한 IP 주소에 패킷이라는 통신 단위로 데이터를 전달합니다.
- 출발지, 목적지 IP가 정해져 있습니다.
- 단, 출발지 IP에서 목적지 IP로 전달할 때와 목적지 IP에서 출발지 IP로 응답할 때 다른 루트로 전달될 수 있습니다.
IP 프로토콜의 한계
비연결성
- 패킷을 받을 대상이 없거나 서비스 불능이어도 패킷을 전송합니다. (우편을 보내듯이 보냅니다.)
비신뢰성
- 패킷이 순서대로 전달되지 않을 수 있습니다.
- 내용이 길 경우 끊어서 보내는데, 각각의 패킷이 원하는 순서대로 보내지지 않습니다.
- 패킷이 중간에 사라질 경우 확인이나 대응을 할 수 없습니다.
- 서버와 서버 사이를 오고가며 전달하는데, 그 과정에서 서버가 꺼져있다면 대응이 불가합니다.
프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 경우 구분이 되지 않습니다.
TCP 프로토콜 (전송제어 프로토콜)
연결지향 - TCP 3 way handshake
출발지 IP와 목적지 IP가 연결되었는지를 아래의 방법으로 확인합니다.
![]()
단, 물리적으로 연결된 것이 아닌 논리적으로 연결된 상태입니다. 물리적인 연결이라고 하면 옛날에 전화 랜선 뽑아서 연결하던 모뎀 시절을 생각하면 됩니다. (인터넷을 쓰는 동안에는 전화가 안 되던 그 시절)
이것으로 IP 프로토콜의 비연결성을 해결할 수 있습니다.
데이터 전달 보증, 순서 보장
패킷이 중간에 사라질 경우에 대한 확인 혹은 대응이 가능합니다.
![]()
데이터를 보내는 순서가 바뀌지 않습니다.
![]()
이 2가지로 IP 프로토콜의 비신뢰성을 해소할 수 있습니다.
신뢰할 수 있는 프로토콜이기 때문에, 현재는 대부분의 애플리케이션에서 TCP 프로토콜을 사용하고 있습니다.
UDP 프로토콜 (사용자 데이터그램 프로토콜)
- 기능이 거의 없습니다.
- 연결지향 X, 데이터 전달 보증 X, 데이터 순서 보장 X
- IP와 거의 동일하고, PORT와 체크섬(중복 검사) 정도만 추가된 형태입니다.
- 대신 단순하고 빠릅니다.
- TCP는 연결지향, 데이터 전달 보증, 순서 보장 등을 거치면서 데이터의 스펙이 커져 최적화하기 어렵지만, UDP는 아무것도 되어있지 않아서 최적화하기에 더 나을 수 있습니다.
PORT
- 같은 IP 내에서 프로세스를 구분해주는 역할을 담당합니다.
- IP가 아파트라면, PORT는 동, 호수와 같은 역할입니다.
0 ~ 65535할당이 가능합니다.- 이 중
0 ~ 1023은 잘 알려진 포트이므로 사용하지 않는 것이 좋습니다.- FTP:
20,21 - TELNET:
23 - HTTP:
80 - HTTPS:
443
- FTP:
DNS (도메인 네임 시스템)
- IP가 언제든 바뀔 수 있고 외우기도 어렵기 때문에, 편리하게 사용할 수 있도록 도와주는 시스템입니다.