OSI 7계층 - 네트워크를 개념적으로 나눈 계층. 네트워크 통신이 이뤄지는 과정을 7단계로 나눈 네트워크 표준 모델
TCP/IP 4계층 - 실제 인터넷 통신에 사용되는 계층.
OSI 7계층
OSI 7계층의 송신부 수신부
송신부 - 데이터를 높은 계층 -> 낮은 계층으로 전달.
수신부 - 데이터를 낮은 계층 -> 높은 계층으로 전달.
각 계층은 독립적이며 데이터를 송신할 때 각 계층에서 필요한 정보를 추가해 데이터를 가공한다.
제어 정보를 담은 헤더, 트레일러(데이터 링크 계층)를 붙이는 데이터 캡슐화 과정이 있다.
데이터 캡슐화 하는 이유? - 수신부의 같은 계층에서 데이터 호환성을 높이고 오류 최소화 하기 위함.
수신부에서는 물리 -> 응용 계층을 거치며 헤더와 트레일러를 분석, 제거하는 역캡슐화를 진행한다.
각 계층간은 서로 필요한 제어 정보를 얻는다.(프로토콜 - 데이터 송수신을 위한 통신 규약)
- 7, 응용 계층 : HTTP, FTP 등의 프로토콜을 응용 프로그램의 UI를 통해 제공
- 6, 표현 계층 : 데이터를 표준화된 형식으로 변경.
- 5, 세션 계층 : 세션의 유지/ 해제 등 응용 프로그램 간 통신 제어/ 동기화
- 4, 전송 계층 : 신뢰성 있는 데이터를 전달하는 계층. TCP/UDP 같은 전송 방식과 포트 번호 결정.
- 3, 네트워크 계층 : 송신부 -> 수신부 까지의 최적 경로를 선택하는 라우팅(routing) 수행. 최적경로는 route라 한다. router. 라우터 장비를 사용.
- 2, 데이터 링크 계층 : 데이터 흐름을 관리하며 데이터 오류 검출, 복구 등을 수행. 브리지, 스위치, 이더넷 장비를 사용.
- 1, 물리 계층 : bit 단위의 0,1 로 변환 후 장비를 사용해 데이터 전송하거나 전기신호를 데이터로 복원. 리피터, 허브 등의 장비를 사용.
알아 두면 좋은 포트번호
- 21번(FTP)
- 22번(SSH)
- 23번(telnet)
- 25번(SMTP)
- 53번(DNS)
- 80번(http)
- 110번(POP3)
- 143번(IMAP)
- 194번(IRC)
- 443번(https)
TCP/IP 4계층(OSI 7계층 단순화)
인터넷에서 데이터를 주고받기 위한 네트워크 프로토콜.
TCP? (Transmission Control Protocol, 전송 제어 프로토콜) - 데이터를 나눈 단위인 패킷의 전달 여부와 전송 순서 보장하는 통신 방식.
IP? (Ibbternet Protocol, 인터넷 프로토콜) - 패킷을 빠르게 보내기 위한 통신 방식.
대표적인 TCP/IP기반 프로토콜은 HTTP가 있다.
- 4, 응용 계층 : 사용자와 소프트웨어를 연결. HTTP/S, DNS등의 프로토콜 작동. (데이터 단위 - 메시지)
- 3, 전송 계층 : 데이터의 신뢰성을 보장하며, 포트 번호로 적절한 응용 프로그램에 전달. TCP, UDP 등의 프로토콜 작동 (데이터 단위 - 세그먼트)
- 2, 인터넷 계층 : 데이터를 최종 목적지까지 도달할 수 있게 하는 계층. IP 프로토콜. (데이터 단위 - 패킷 or 데이터그램)
- 1, 네트워크 인터페이스 계층 : 데이터를 전기 신호로 변환하여 MAC주소를 사용해 데이터 전달. 이더넷, WIFI 프로토콜. (데이터 단위 - 프레임)
패킷? - 네트워크에서 주고 받는 데이터를 작게 분할한 단위. 데이터의 송수신 주소 등이 포함되어 있다.
MAC주소? - 하드웨어의 고유 주소. 48비트로 구성되어있다.
TCP / UDP - 전송 계층의 대표적인 프로토콜
TCP? - 연결형 서비스를 지원, 데이터의 신뢰성 보장.
- 송/수신부의 연결을 확인하는 연결형 서비스.
- 패킷 교환 방식 - 가상 회선 방식
- 패킷의 전송 순서 보장, 수신 여부 확인.
- 송 - 수신부는 1:1 통신을 한다.
- 데이터 손실이 없음.(신뢰성이 높다)
- 송수신 속도가 느리다.
패킷 교환 방식
- 가상 회선 방식 : 데이터를 주고 받기 전에 패킷을 전송할 경로인 가상 회선을 설정해서 모든 패킷을 같은 경로로 전송.
- 데이터그램 방식 : 패킷마다 최적의 경로로 전송되는 방식. 송신부에서 보낸 패킷 순서와 도착 순서가 다를 수 있다.
TCP 핸드셰이킹?
TCP에서 연결형 서비스를 지원하기 위해 송-수신부를 연결하는 과정을 거친다.
연결 시작은 3-way 핸드셰이킹,
연결 종료시 4-way 핸드셰이킹을 한다.
핸드 셰이킹 과정에서는 송-수신부 간 연결을 제어/관리 하도록 flag값을 주고 받는다.
주로 사용하는 flag값은 SYN, FIN, ACK
- SYN(Synchronization,동기화) : 연결을 생성할 때 사용.
- FIN(Finish,종료) : 연결을 끊을 때 사용.
- ACK(Acknowledgment,승인) : 수신자가 데이터 받음을 알려 줄 때 사용.
- RST(Reset,초기화) : 연결 재설정 할 때 사용.
- PSH(Push, 밀다) : 빠른 응답이 필요한 데이터를 응용 계층으로 즉시 전송할 때 사용.
- URG(Urgent,긴급) : 다른 데이터보다 우선순위가 높은 데이터 전송 시 사용.
3way 핸드셰이킹
데이터를 주고 받기 전에 수신부와 세션을 수립하는 과정.
송-수신자 모두 데이터를 주고 받을 준비가 되었음을 보장.
- 송신 -> 수신 으로 SYN 메세지와 임의의 숫자N을 보낸다. 수신부로의 응답이 오기 전까지의 상태는?-> SYN_SENT
- 수신부가 SYN 메세지를 받으면 요청 수락인 ACK메세지를 송신부로 보낸다. 이때 전달받은 N을 N+1로 보낸다. 수신부에서 송신부의 연결 확인을 위해 SYN 메세지에 임의의 숫자 M을 보낸다. 수신부의 상태는? -> SYN_RECEIVED
- 송신부가 ACK + SYN 메세지를 받으면 ESTABLISHED(연결 성립) 상태가 된다. 메세지에 대한 응답으로 ACK메세지와 M+1값을 보낸다. 이때 ACK메세지에는 송신부의 전송 데이터가 포함될 수도 있다. 이 때 데이터를 받은 수신부도 ESTABLISHED상태가 된다.
=> 위 단계 처럼 3단계를 거쳐 응답을 주고 받는다.
4way 핸드셰이킹
TCP연결을 해제할 때 이뤄지는 과정.
- 송신부에서 연결 종료 메세지인 FIN 전송. 송신부 상태는? -> FIN_WAIT1
- 수신부에서 FIN을 받으면 ACK메세지를 보낸다. 수신부의 상태는?-> CLOSE_WAIT . 수신부는 메세지 보낸 후 앱 종료 등 연결 종료 작업 수행. ACK메세지를 받은 송신부의 상태는? -> FIN_WAIT2
- 수신부에서 연결 종료 준비가 끝나면 FIN메세지를 보내고 수신부의 상태는 LAST_WAIT 상태가 된다.
- 송신부는 FIN메세지에 대한 응답으로 ACK메세지를 보내고 TIME_WAIT 상태가 되고 일정 시간이 지나면 CLOSED상태가 된다. 일정시간 유지하는 이유는? -> FIN메세지를 보낸 패킷이 FIN 메세지 수신보다 지연되어 패킷이 유실되지 않기 위함이다. 또한 수신부에서 ACK메세지가 제대로 전달되지 않아 연결해제가 이뤄지지 않는 경우를 대비하기 위함이다. 수신부는 ACK메세지를 받고 CLOSED 상태가 된다.
=> 위 단계 처럼 4단계를 거쳐 응답을 주고 받는다.
TCP Keep Alive 패킷?
세션이 연결되면 이를 유지하기 위해 일정 시간이 경과한 후 TCP Keep Alive패킷을 보내 연결 유지 상태를 확인할 수 있다.
해당 패킷은 연결을 유지하길 원하는 쪽에서 보낸다.
패킷에 대한 응답을 받으면 시간을 처음부터 다시 측정하고, 응답 받지 못하면 연결을 종료.
=> 동일한 송신부로부터 재요청이 오는 경우 불필요한 3-way 핸드셰이킹을 줄일 수 있다.
또한, FIN메세지를 받지 못한 경우에 발생할 수 있는 불필요한 연결 = 좀비 커넥션 방지할 수 있다.
TCP 제어 방법
TCP데이터의 신뢰성을 보장하기 위한 제어방법.
- 흐름 제어
- 혼잡 제어
- 오류 제어
1. 흐름 제어 : 송-수신부에서 데이터 처리 속도 차이 때문에 생기는 데이터 손실을 방지하는 방법.
- 정지 - 대기 : 데이터를 보낸 후 수신부로부터 ACK 메세지를 받을 때 까지 데이터를 보내지 않고 대기하는 방식. 시간적인 면에서는 비효율적이다. ACK 메세지를 일정시간 받지 못하면 패킷을 다시 보내고 다시 대기한다.
- 슬라이딩 윈도우 : ACK 수신여부를 확인하지 않고 수신부에서 설정한 윈도우 크기만큼 데이터를 연속적으로 보낸다. 윈도우 크기는 응답받지 않고 보낼 수 있는 데이터의 최대 개수를 의미한다(3way핸드셰이킹 과정에서 크기가 결정됨).
2. 혼잡 제어 : 송신부의 전달 속도와 네트워크 속도 차이로 데이터 손실이 발생하는 것을 방지하기 위한 방법.
혼잡? -> 네트워크 패킷이 과도하게 증가하는 증상. 혼잡이 발생하여 일정 시간 수신부로 부터 응답을 받지 못하면 송신부에서는 전송을 실패했다고 판단하고 패킷을 재전송한다(악순환). 따라서 TCP는 혼잡 윈도우 크기를 조절하여 혼잡에 대응하여야 한다.
아래에 혼잡 제어 방식을 정리해 놓았다.
- AMID - 데이터 전달 시 합 증가 방식으로 혼잡 윈도우 크기를 더해가면서 키우고 데이터 손실이 발생하면 곱 감소 방식을 적용해 1/2배와 같이 배수 단위로 줄인다.
- 느린 시작 - 윈도우 크기가 1인 상태로 시작하여 ACK 메세지를 수신할 때마다 윈도우 크기를 1씩 늘려나간다. 혼잡이 발생하면 윈도우 크기를 다시 1로 대폭 감소 시킨다.
- 혼잡 회피 - 윈도우 크기를 지수 함수 형태로 증가 시키다 혼잡이 발생하는 것을 방지하기 위해 임계점을 정하는 방식. 타임아웃 발생 시점의 절반을 임계점으로 설정하고 윈도우 크기를 초기값으로 변경
- 빠른 회복 - 혼잡이 발생하면 윈도우 크기를 절반으로 줄인 후 선형적으로 증가시키는 방식. (혼잡 발생시 AIMD방식으로 동작)
- 빠른 재전송 - Duplicate ACK가 3번 발생하면 해당 시점의 윈도우 크기를 1/2로 줄인다. ACK를 받으면 다시 크기를 키움.
※TCP 혼합 제어 정책
1. TCP Tahoe - 느린 시작으로 사용. 크기를 지수적으로 키운다.
2. TCO Reno - 느린 시작으로 사용. 3 Duplicate ACK와 timeout을 구분해 대응한다.
3. 오류 제어
- 정지-대기 : ACK 메세지를 일정 시간 받지 못해 타임아웃이 발생하면 다시 패킷을 보냄.
- Go-Back-N ARQ : 연속적으로 데이터를 보내고 누락데이터 발생 시 누락된 데이터부터 재송신함. ex) 1,2,3,4 송신. 1,2 수신 상태라면 3,4를 재송신 한다.
- Selective-Repeat ARQ : 연속적으로 데이터를 보내고 누락데이터 발생 시 누락된 데이터만 재송신.
UDP?
송-수신부간 연결을 지원하지 않고 데이터그램 형태의 통신을 지원한다. TCP처럼 핸드셰이킹 같은 과정없이 패킷을 송수신하여 신뢰성은 낮지만 속도가 빠르다.
- 송-수신부의 연결이 보장되지 않는 비연결형 서비스
- 패킷이 서로 다른 회선으로 교환될 수 있는 데이터그램 패킷 교환 방식
- 송신부에서 전달한 패킷순서와 수신부의 받은 패킷 순서가 다를 수 있다.
- 수신여부를 확인하지 않음.
- 1:1, 1:N, N:N 통신이 모두 가능하다.
- 데이터 신뢰성이 낮다.
- 데이터의 전송 속도가 빠르다.
UDP 오류 검출
- 최소한의 신뢰성을 보장하기 위해 체크섬 방식으로 오류를 검출할 수 있다.
- 오류를 100% 검출할 수 있지는 않다.
- 선택 사항이므로 송신부에서 체크섬 값을 0으로 한다면 계산하지 않음.
TCP vs UDP
TCP | UDP | |
연결 방식 | 연결형 | 비연결형 |
패킷 교환 | 가상 회선 | 데이터그램 |
데이터 순서 | 순서 보장 | 순서 바뀔 수 있음 |
수신 여부 | 확인 | 미확인 |
통신 방식 | 1:1 | 1:1,1:N, N:N |
신뢰성 | 높음 | 낮음 |
속도 | 느림 | 빠름 |
'CS > 네트워크' 카테고리의 다른 글
네트워크 - 정리 (0) | 2024.06.20 |
---|---|
네트워크 - REST (0) | 2024.06.19 |
네트워크 - HTTP/S (0) | 2024.06.19 |