네트워크란?
노드들이 데이터를 공유할수 있게 하는 디지털 전기 통신망의 하나.
분산되어 있는 컴퓨터를 통신망으로 연결한 것을 말함.
네트워크에서 여러 장치들은 노드 간 연결을 사용하여 서로에게 데이터를 교환
*노드 : 네트워크에 속한 컴퓨터 또는 통신장비 데이터를 공유할수 있게 하는 디지털 전기 통신망의 하나.
*인터넷 : 문서, 그림 영상과 같은 여러가지 데이터를 공유하도록 구성된 세상에서 가장 큰 전세계를 연결하는 네트워크
네트워크의 분류
크기에 따른 분류
LAN(Local Area Network) :
가까운 지역을 하나로 묶은 네트워크. 근거리 통신망
ex. 스타크래프트 : 같은 피씨방에 있어야 근거리 통신망을 이용하여 게임을 같이 할수 있음)
WAN(Wide Area Network):
멀리 있는 지역을 한데 묶은 네트워크.
LAN과 LAN을 잇고 있다고 생각하면 됨
MAN(Metapolitan Area Network):
도시 통신망, 도시권 통신망, 중거리 통신망이라 칭하며 같은 도시나 지역 사회와 같이, 지리적으로 같은 위치에 존재하는 여러 개의 랜을 연결한 네트워크. LAN보다는 큰 규모지만 WAN보다는 작은 규모에서 연결할때 쓰이는 도시권 통신망.
연결형태에 따른 분류
star 형
중앙 장비에 모든 노드가 연결. LAN 대역을 만들때 Star형으로 연결
if. 네트워크 장비 고장-> 모든 사람들 다 인터넷이 안됨
ex. 집에 있는 공유기
Mesh 형
여러 노드들이 서로 그물처럼 연결된 Mesh형. WAN 대역을 만들때 사용. 인터넷이 이런식으로 되어있음
if. 하나가 고장-> 다른 선들을 통해 다른 장비들과 연결. 따라서 문제 없음
네트워크 프로토콜
일종의 약속, 양식.
네트워크에서 노드와 노드가 통신할대 어떤 노드가 어느 노드에게 어떤 데이터를 어떻게 보내는지 작성하기위한 양식
통신 방식에 따라 프로토콜도 다름
- 가까운곳 통신할때 : Ethernet 프로토콜 (MAC주소)
- 멀리 있는 곳과 연결할때 : ICMP, IPv4, ARP (IP주소)
- 여러가지 프로그램으로 연락할때 : TCP, UDP (포트 번호)
패킷
네트워크 상에서 전달되는 데이터를 통칭하는 말로 네트워크에서 전달하는 데이터의 형식화된 블록.
패킷은 제어 정보와 사용자 데이터로 이루어지며 사용자 데이터는 페이로드라고 함
프로토콜들에도 순서가 있음. (마트료시카 처럼)
헤더 | 페이로드 | 풋터 |
- 페이로드 : 프로토콜 상위계층에서 내려온 데이터
- 풋터 : 테일이라고도 부르며, 추가적인 정보를 가진 데이터
캡슐화
누군가에게 패킷을 보낼때 사용
Data 요청.
Data를 payload로써 TCP 캡슐화
Data와 TCP를 payload로 하여 IPv4를 캡슐화
Data, TCP, IP를 payload로 하여 이더넷을 캡슐화
상위계층에서부터 캡슐화 됨. 하위계층이 오고 상위계층이 올수 없음
디캡슐화
패킷을 받았을때 프로토콜들을 하나씩 확인하면서 데이터를 확인하는 과정
PDU
4계층의 PDU : 세그먼트
3계층의 PDU : 패킷
2계층의 PDU : 프레임(2계층까지 캡슐화 된 상태)
Ethernet 프로토콜
Destination Address (6byte) : 이더넷 프로토콜의 목적지 주소에 MAC주소가 옴
Source Address (6byte) : 출발지의 MAC 주소
Ethernet Type (2byte) : Data에 오는 상위 프로토콜에 따라 Ethernet Type이 달라짐
=>총 14바이트가 이더넷 프로토콜 구조
TCP / UDP
전송계층에서 사용
TCP (Transmission Control Protocol)
신뢰성 있는 데이터 통신을 가능하게 해주는 프로토콜
- 연결형 서비스로 가상 회선 방식을 제공한다.
- 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다.
- 흐름 제어 및 혼잡 제어.
- 높은 신뢰성을 보장한다.
- UDP보다 속도가 느리다.
- 전이중(Full-Duplex), 점대점(Point to Point) 방식
- 대부분의 웹 HTTP 통신, 이메일, 파일전송에 사용
UDP (User Datagram Protocol)
TCP보다 신뢰성이 떨어지지만 전송속도가 일반적으로 빠른 프로토콜
- 순차 전송 x 흐름 제어 x 혼잡 제어 x
- Connectionless
- Error Detection
- 데이터의 신뢰성이 중요하지 않을때 사용(ex. 영상 스트리밍)
- DNS, 멀티미디어에서 사용
3-way Handshaking
TCP 3 Way Handshake는 TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에
먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정
[STEP 1]
A클라이언트는 B서버에 접속을 요청하는 SYN 패킷을 보낸다. 이때 A클라이언트는 SYN 을 보내고 SYN/ACK 응답을 기다리는SYN_SENT 상태 가 되는 것이다.
[STEP 2]
이때 서버는 Listen 상태로 포트 서비스가 가능한 상태여야 한다. (Closed :닫힌상태) B서버는 SYN요청을 받고 A클라이언트에게 요청을 수락한다는 ACK 와 SYN flag 가 설정된 패킷을 발송하고 A가 다시 ACK으로 응답하기를 기다린다. 이때 B서버는 SYN_RECEIVED 상태가 된다.
[STEP 3]
A클라이언트는 B서버에게 ACK을 보내고 이후로부터는 연결이 이루어지고 데이터가 오가게 되는것이다. 이때의 B서버 상태가 ESTABLISHED 이다.
* SYN 은 synchronize sequence numbers ACK는 acknowledgements 의 약자.
4-way Handshaking
세션을 종료하기위해 수행되는 절차
[STEP 1]
클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.
[STEP 2]
서버는 일단 확인메시지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 TIME_WAIT상태다.
[STEP 3]
서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
[STEP 4]
클라이언트는 확인했다는 메시지를 보낸다.
Request
요청하는 방식을 정의하고 클라이언트의 정보를 담고 있는 요청 프로토콜 구조
Request Line |
Headers |
공백 |
Body |
request line
요청 타입 | 공백 | URI | 공백 | HTTP 버전 |
요청방식(요청 메소드)
GET : Client가 Server로 부터 문서를 읽어오려 할때 사용
POST : Client가 Server에게 어떤 정보를 전송할때 사용
Response
사용자가 볼 웹 페이지를 담고 있음
Status Line |
Headers |
공백 |
Body |
response line
HTTP 버전 | 공백 | 상태코드 | 공백 | 상태 문구 |
상태 코드
- 1xx : 정보
- 2xx : 성공
- 200 : OK. 요청 성공
- 201 : Created. 생성 요청 성공
- 202 : Accepted. 요청 수락(처리 보장X)
- 204 : 성공했으나 돌려줄게 없음
- 3xx : 리다이렉션
- 300 : Multiple choices. 여러 리소스에 대한 요청 결과 목록
- 301,302,303 : Redirect. 리소스 위치가 변경된 상태
- 304 : Not Modified. 리소스가 수정되지 않았음
- 4xx : 클라이언트 오류
- 400 : Bad Request. 요청 오류
- 401 : Unauthorized. 권한없음
- 403 : Forbidden. 요청 거부
- 404 : Not Found. 리소스가 없는 상태
- 5xx : 서버 오류
- 500 : Internal Server Error. 서버가 요청을 처리 못함
- 501 : Not Implemented. 서버가 지원하지 않는 요청
- 503 : Service Unavailable. 과부하 등으로 당장 서비스가 불가능한 상태