OSI 7계층
네트워크에서 데이터가 교환되는 과정을 표준화하여 호환성을 높이고, 7단계로 나눠 장애 원인을 파악하고 보수하기 용이하게 하였다. 전송 시 각 계층마다 헤더를 붙이고(캡슐화) 수신할 때 헤더를 떼어내면서 정보를 파악한다.
OSI 7계층은 ISO 가 개발한 개념적 모델이고 어떻게 표준을 잡을지 사용되는 반면에, TCP/IP 프로토콜은 4계층으로 실질적인 통신에 사용한다.
-
1 - 물리 계층
케이블/광섬유를 통해 비트를 전송한다. 데이터의 오류를 제어하지 않는다.
-
2 - 데이터 링크 계층
브릿지/스위치를 통해 MAC 주소로 프레임을 전달한다. 흐름제어, 오류제어로 Point-to-Point 간 신뢰성 있는 전송을 보장한다.
흐름제어는 전송 데이터의 양을 제한하여 송수신 측의 속도 차이를 조절하기 위해 사용한다. 프레임을 전송 한 후, ACK 프레임을 수신할 때까지 대기했다가 보내는 정지-대기 흐름제어 기법이 있다. 슬라이딩-윈도우 흐름제어는 수신 측에서 N 개의 프레임을 위한 버퍼 공간을 할당하고, 송신 측에서는 N 개의 프레임에 순서번호를 붙여 연속으로 보낼 수 있게 한다.
오류제어는 오류검출과 재전송으로 이루어지며, 이러한 과정을 ARQ(automatic repeat request) 라고 한다. 정지-대기 ARQ 방식은 송신 측의 프레임이 손상되었거나 수신 측의 ACK 가 손상되었을 경우 time-out 을 통해 송신 측은 같은 프레임을 다시 보낸다. 그 외에도 슬라이딩-윈도우에 기반을 둔 Go-Back-N ARQ, 선택적-거절 ARQ 가 있다.
*오류검출 기법: 각 프레임의 끝에 패리티 비트를 붙여 홀/짝을 확인하는 패리티 검사 방법과, 순환 중복 검사(CRC) 가 있다.
*회선제어: 데이터링크 전송 방식 중, 반이중(half duplex) 전송 방식은 두 개의 스테이션이 동시에 신호를 전송하는 경우 충돌이 발생할 수도 있다. 이 때, ENQ 프레임으로 연결을 초기화하고 ACK 프레임으로 데이터를 받을 준비를 알리고, EOT 프레임으로 전송의 끝을 알림으로써 회선 제어를 한다. 또는 주/종속 스테이션을 나눠 주 스테이션이 링크 제어 권한을 가지는 폴링 기법을 사용한다.
*MAC: 물리적 주소, 이더넷 주소라고도 불리는데, 네트워크 카드를 만들 때부터 정해지고 ROM 에 저장되어 바뀌지 않는 기계의 고유주소번호이다.
-
3 - 네트워크 계층
라우터를 통해 IP 주소로 패킷을 전달한다. 데이터링크의 스위치는 주변 컴퓨터들의 MAC 주소를 관리했다면, 라우터는 네트워크 대역대를 나타내는 IP 로 허브들을 관리하고, 각 패킷마다(packet-switching) 헤더에 붙은 IP 주소로 가는 최적의 경로를 안내한다(routing). 오류제어와 흐름제어가 없으므로 전송계층의 TCP 계층에 의존한다. 오류가 발생하면 ICMP(Internet Control Message Protocol) 에서 알려주지만, 대처는 하지 못한다.
-
4 - 전송 계층
TCP 또는 UDP 프로토콜을 사용해 세그먼트를 프로세스의 port 로 보낸다. 송신 컴퓨터의 프로세스에서 수신 컴퓨터의 프로세스로의 end-to-end 전달을 가능하게 한다.
UDP(User Datagram Protocol) 는 효율적으로 데이터를 전송하는 비연결형 프로토콜로, 일방적으로 데이터를 전송한다. 흐름제어나 오류제어가 없어 속도가 빠르며, RTP(Real Time Protocol), Multicast, DNS 에서 사용된다.
TCP(Transmission Control Protocol) 는 신뢰할 수 있는 연결형 통신이고, 상대방과 확인해가면서 통신하는 방식이다. 3-way handshake 로 연결을 설정하고 통신을 시작하며, 4-way handshake 로 연결을 해제한다.
TCP 에서는 stop-and-wait, go-back-n-ARQ(sliding-window, 마지막 프레임 이후 모두 재전송), Selective-Reject) ARQ(손상된 프레임만 재전송) 의 흐름, 오류제어가 있을 뿐만 아니라 혼잡 제어도 있다.
-
5 - 세션 계층
API, Socket 과 같이 프로세스 간 논리적으로 연결되어 있음을 담당하여 TCP/IP 세션을 설정하고 해제를 한다.
-
6 - 표현 계층
데이터를 어떤 형식(JPEG, MPEG 등) 으로 표현할지 독립성을 제공하고 암호화하는 역할(인코딩)을 담당한다. 응용계층과 세션계층 사이에서 데이터를 변환하며, 다양하게 표현되는 데이터를 전송형식과 무관하게 사용할 수 있도록 한다.
-
7 - 응용 계층
HTTP, FTP, DNS 와 같이 응용 프로세스와 직접 연결되어 서비스를 수행하는 계층이다.
TCP 3 & 4 way handshake
3-way handshake 는 프로세스 간 가상의 이동 통로를 만들어 전송함으로써 연속적인 데이터의 흐름을 관리할 수 있게 한다. 송신 호스트(클라이언트)가 연결 확립 요청을 보내면(SYN) 수신 호스트(서버)에서 요청과 응답을 보내고(SYN, ACK) 마지막으로 송신 호스트에서 연결 확립 응답을 보내는 것(ACK) 으로 마무리된다. 연결 과정에서 상호 합의 하에 패킷 크기와 순서 번호의 초기값이 결정되고, 이후 데이터 전송이 시작된다.
4-way handshake 역시 클라이언트가 FIN_WAIT_1 상태에서 FIN 을 보내면 서버는 CLOSE_WAIT 상태가 되어 ACK 를 보낸다. ACK 를 받은 클라이언트는 FIN_WAIT_2 가 된다. 데이터를 모두 보낼 때까지 기다렸다가 서버는 LAST_ACK 상태로 FIN 을 보낸다. 클라이언트는 TIME_WAIT 상태가 되어 ACK 를 마지막으로 보내고, 서버와의 연결은 CLOSED 가 된다.
TCP 혼잡 제어
데이터 처리 속도를 해결하여 오버플로우나 데이터 손실을 피하는 방법이다. 처음에는 Slow Start 으로 패킷을 하나씩 보내다가 ACK 를 받으면 패킷을 하나씩 늘려서 보내기 때문에, 지수함수 꼴로 크기가 증가한다. 미리 정해진 임계값에 도달하면 Congestion Avoidance(혼잡 회피) 단계로 넘어간다. 임계값 이후 크기를 1씩 증가시키다가, 수신측으로부터 ACK 를 수신하지 못할 경우 혼잡 상태로 인식하여 윈도우 크기를 1로 감소하며, 임계값도 마지막 윈도우 크기의 절반으로 줄인다. 1로 줄이지 않고 절반까지만 줄이는 방법인 Fast Recovery(빠른 회복) 방법도 있으며, 절반 상태에서 1씩 선형증가(AIMD 방식)를 지속한다.
Fast Retransmit(빠른 재전송)은 임계값에 도달하지 않더라도 패킷이 손실되었음을 감지하고 혼잡 회피를 하는 경우이다. 수신측에서는 패킷이 순서대로 오지 않으면 마지막 도착한 패킷 번호를 ACK 에 실어서 보낸다. 송신측에서 동일한 패킷을 3번 받으면 해당 번호 이후부터 재전송이 이루어지도록 한다. 또한 송신측에서 설정한 타임아웃까지 ACK 를 받지 못해도 혼잡 상태라고 판단해 혼잡 회피를 한다.