전송 계층 : OSI 계층 중 4계층에 해당
앞서 물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있지만
데이터가 손상되거나 유실되더라도 이들 계층에선 아무것도 해주지 않음. 이를 위해 전송 계층이 필요하다.
전송 계층엔 오류를 점검하는 기능이 있어서 오류가 있다면 데이터 재전송을 요청한다. 추가로 전송 계층에선 전송된 데이터의 목적지가 어떤 어플리케이션인지 식별하는 기능도 있다.
전송 계층 특징
신뢰성/ 정확성 : 데이터를 목적지에 문제없이 전달하는 것 -> 연결형 통신이라 함
효율성 : 데이터를 빠르고 효율적으로 전달하는 것 -> 비연결형 통신이라 함
연결형 통신은 상대편과 확인해 가면서 통신하는 방식이고
비연결형 통신은 상대편 확인없이 일방적으로 데이터를 전송하는 방식
일반적으로 정확성과 신뢰성을 요구하지만 동영상을 볼 때는 비연결형 통신이 사용됨. 정확한 전송보다 빠른 전송이 필요하기때문. 데이터가 약간 유실되더라도 버벅이지 않는 영상을 보는 것이 좋기 때문.
연결형 통신 프로토콜에는 TCP가 사용되고
비연결형 통신 프로토콜에는 UDP가 사용된다.
- TCP
TCP로 전송할 때 붙이는 헤더를 TCP 헤더라고 하고 이 TCP 헤더가 붙은 데이터를 세그먼트라고 한다.
TCP 헤더에는 다음과 같은 정보가 나열되어 있다.
1. 출발지 포트 번호(16비트)
2. 목적지 포트 번호(16비트)
3. 일련번호(32비트)
4. 확인 응답 번호(32비트)
5. 헤더 길이(4비트)
6. 예약 영역(6비트)
7. 코드 비트(6비트)
8. 윈도우 크기(16비트)
9. 체크섬(16비트)
10. 긴급 포인터(16비트)
11. 옵션
TCP는 연결형 통신에 사용되는 프로토콜이며 꼼꼼히 상대방을 확인하며 데이터를 전송함.
그리고 그 전에 먼저 연결이라는 가상의 독점 통신로를 확보해야 함.
TCP 헤더의 107번째 비트~ 112번째 비트에 해당하는 6개의 비트는 코드 비트에 해당하는데 이곳에 연결의 제어 정보가 기록된다. URG, ACK, PSH, RST, SYN, FIN으로 각각의 이름이 존재하며 각 비트의 초깃값은 0이다. 비트가 활성화되면 1이 된다. 연결을 확립하려면 이중 SYN과 ACK가 필요하다. SYN은 연결 요청, ACK는 확인 응답을 의미한다.
< 3-way 핸드셰이크 >
컴퓨터 간 연결은 SYN과 ACK를 사용하여 확립할 수 있고, 신뢰할 수 있는 연결을 위해 데이터를 전송하기 전에 패킷을 교환하는데 세 번 확인한다. 연결 확립 요청 시에는 SYN 코드가 1로 활성화되고, 연결 확립 응답 시에는 ACK가 1로 활성화 된다.
1. 컴퓨터 A ---------------------연결 확립 요청(SYN)-------------------------> 컴퓨터 B
2. 컴퓨터 A <------------연결 확립 응답+연결 확립 요청(SYN + ACK)------------ 컴퓨터 B
3. 컴퓨터 A ---------------------연결 확립 응답(ACK)--------------------------> 컴퓨터 B
데이터 전송 후에는 연결을 끊기 위한 요청을 교환해야 한다. 연결을 끊을 때는 FIN와 ACK를 사용하는데, FIN은 연결 종료를 뜻한다. 연결 종료 요청 시에는 FIN 코드가 1로 활성화되고, 연결 종료 응답 시에는 ACK가 1로 활성화 된다.
1. 컴퓨터 A --------연결 종료 요청(FIN)---------> 컴퓨터 B
2. 컴퓨터 A <--------연결 종료 응답(ACK)--------- 컴퓨터 B
3. 컴퓨터 A <--------연결 종료 요청(FIN)--------- 컴퓨터 B
4. 컴퓨터 A --------연결 종료 응답(ACK)---------> 컴퓨터 B
<일련 번호와 확인 응답 번호의 구조>
3-way 핸드셰이크가 끝나고 실제 데이터를 주고받을 때는 TCP헤더의 일련번호와 확인 응답 번호를 사용함.
TCP는 데이터를 분할하여 보내는데
일련번호(sequence number)는 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할
확인 응답 번호(acknowledgement number)는 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할
확인 응답 번호는 다음 번호의 데이터를 요청하는 데도 사용됨. 10번 데이터를 수신하면 11번 데이터를 요청하는 방식.
이를 데이터 전송이 완료될 때까지 반복한다.
데이터가 항상 올바르게 전송되는 것은 아니므로 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송하는데 이를 재선송 제어라고 한다.
<윈도우 크기>
위의 설명은 세크먼트(데이터) 하나를 보낼 때마다 확인 응답을 한번 반환하는 통신이었는데 효율성이 낮다. 매번 확인 응답을 기다리는 대신 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율을 높일 수 있다. 수신 측에서는 버퍼라는 장소를 가지고 있어 세그먼트들을 일시적으로 이곳에 보관하게 된다. 수신 측은 대량으로 데이터가 전송되면 보관하지 못하고 넘쳐 버리는데 이것을 오버플로라고 한다. 따라서 오버플로가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 한다. 이것이 TCP 헤더의 윈도우 크기 값에 해당한다. 이 윈도우 크기의 초깃값은 3way 핸드셰이크를 하는 과정에서 서로의 윈도우 크기를 확인하게 된다.
최종적으로 다음과 같이 세그먼트를 보낼 때마다 일일이 응답을 받지 않고 두번째 세그먼트를 보내게 된다.
1. 컴퓨터 A --------세그먼트 송신---------> 컴퓨터 B
2. 컴퓨터 A --------세그먼트 송신---------> 컴퓨터 B
3. 컴퓨터 A --------세그먼트 송신---------> 컴퓨터 B
4. 컴퓨터 A <-------- 확인 응답 --------- 컴퓨터 B
5. 컴퓨터 A <-------- 확인 응답 --------- 컴퓨터 B
6. 컴퓨터 A <-------- 확인 응답 --------- 컴퓨터 B
<포트 번호의 구조>
포트 번호는 목적지가 어떤 어플리케이션인지 구분할 수 있도록 해준다.
TCP 헤더에는 출발지 포트 번호, 목적지 포트 번호가 필요하다. 포트 번호는 0~65535번을 사용할 수 있다.
0~1023번 포트는 주요 프로토콜이 사용하도록 예약이 되어있다. 이러한 포트를 잘알려진 포트(well-known ports)라고 한다. 1025번 이상은 랜덤 포트라고 해서 클라이언트 측의 송신 포트로 사용된다.
웹브라우저로 접속할 때 웹브라우저에는 임의의 포트가 자동으로 할당된다. 그래서 서버 측에서는 포트 번호를 정해둬야 하지만 클라이언트 측은 정하지 않아도 된다.
- UDP
비연결형 통신 프로토콜이며 효율적으로 데이터를 빠르게 보내는 것이 장점.
UDP 헤더가 붙은 데이터를 UDP 데이터그램이라고 한다. 다음과 같이 정보가 나열되어 있다.
1. 출발지 포트 번호(16비트)
2. 목적지 포트 번호(16비트)
3. 길이(16비트)
4. 체크섬(16비트)
신뢰성과 정확성이 필요하지 않아 TCP 헤더보다 비교적 짧다. UDP는 상대방 확인없이 데이터를 연속해서 보냄.
1. 컴퓨터 A --------세그먼트 송신---------> 컴퓨터 B
2. 컴퓨터 A --------세그먼트 송신---------> 컴퓨터 B
3. 컴퓨터 A --------세그먼트 송신---------> 컴퓨터 B
또한 UDP를 사용하면 같은 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있는데 이를 브로드캐스트라고 한다.
댓글