전송 계층 : 신뢰할 수 있는 데이터 전송하기
LESSON 23 - 전송 계층의 역할
전송 계층 (transport layer, 트랜스포트 계층)
- 신뢰할 수 있는 데이터를 순차적으로 전달하는 역할을 하므로 상위 계층들이 데이터 전달의 유효성이나 효율성을 신경 쓰지 않도록 한다.
- 데이터가 중복되거나 누락되지 않고 오류 없이 순서에 맞게 전송되도록 관리한다.
- 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다.
전송 계층의 두 가지 역할
- 오류를 점검하는 기능이 있어 오류가 발생하면 데이터를 재전송하도록 요청한다.
- 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능이 있다.
연결형 (connection-oriented) 통신과 비연결형 (connectionless) 통신
- 전송 계층의 특징
- 신뢰성/정확성 : 데이터를 목적지에 문제없이 전달하는 것.
- 효율성 : 데이터를 빠르고 효율적으로 전달하는 것.
- 연결형 통신
- 신뢰할 수 있고 정확한 데이터를 전달하는 통신
- 상대편과 확인해 가면서 통신하는 방식
- 데이터를 교환하기 전에 연결을 맺고 데이터를 교환하는 동안 계속 연결을 관리하는 프로토콜의 한 형태이다.
- TCP (Transmission Control Protocol, 전송 제어 프로토콜) 사용
- 비연결형 통신
- 효율적으로 데이터를 전달하는 통신
- 상대편을 확인하지 않고 일방적으로 데이터를 전송하는 방식
- 연결(connection)에 대한 초기화 과정이 없는 통신이다.
- UDP (User Datagram Protocol, 사용자 데이터그램 프로토콜) 사용
LESSON 24 - TCP의 구조
TCP (Transmission Control Protocol, 전송 제어 프로토콜)
- 전송 계층의 프로토콜은 연결형(connection-oriented) 통신 방식이며 신뢰할 수 있는 데이터 전송을 보장한다.
- 3-way 핸드셰이크로 연결이 확립된 후에 데이터를 전송하고 그때 확인 응답을 한다.
- 데이터 전송 도중에 오류가 발생하면 재전송하거나 포트 번호로 애플리케이션을 구분하여 데이터를 정확하게 전달하기 위한 기능이 있다.
- TCP로 전송할 때 붙이는 헤더를 TCP 헤더라고 하며, TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 한다.
- 데이터를 전송하기 전에 연결(connection)이라는 가상의 독점 통신로를 확보해야 한다.
- 이 연결을 확립한 후에 데이터를 전송할 수 있다.
- 연결 (connection, 커넥션)
- TCP 통신에서 정보를 전달하기 위해 사용되는 가상의 통신로로 연결을 확립하고 데이터를 전송한다.
- 코드 비트는 각 비트별로 역할이 있다.
- 초기값은 0이고 비트가 활성화되면 1이 된다.
- 연결을 확립하려면 이 중 SYN과 ACK가 필요하다.
- SYN(씬)은 연결 요청, ACK(애크)는 확인응답을 뜻한다.
3-way 핸드셰이크 (three-way handshake)
- 데이터를 보내기 전 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것을 3-way 핸드셰이크라고 한다.
- 연결을 끊을 때는 FIN과 ACK를 사용한다.
- FIN은 연결 종료을 뜻한다.
LESSON 25 - 일련번호와 확인 응답 번호의 구조
일련변호(sequence number)와 확인 응답 번호(acknowledgement number)
- 3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 TCP 헤더의 일련번호와 확인 응답 번호를 사용한다.
- 일련변호(sequence number)
- 송신 측에서 수신 측에 해당 데이터가 몇 번째 데이터인지 알려준다.
- 전송된 데이터에 일련번호를 부여하면 수신자는 원래 데이터의 몇 번째 데이터를 받았는지 알 수 있다.
- 확인 응답 번호(acknowledgement number)
- 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할을 한다.
- 이 번호는 다음 번호의 데이터를 요청하는데도 사용된다.
- 3-way 핸드셰이크로 연결 수입이 이루어질 때, 이번 통신에 사용하는 일련번호인 ‘3001’번과 확인 응답 번호인 ‘4001’번이 결정된다.② 컴2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번호를 확인 응답 번호에 넣는다. 다음에 수신하고자 하는 데이터는 3001 + 200 = 3201이므로 3201번부터 보내 달라고 요청한다.④ 컴2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터의 번호를 확인 응답 번호에 넣는다. 다음에 수신하고자 하는 데이터는 3201 + 200 = 3401이므로 3401번부터 보내 달라고 요청한다.
- ③ 컴1은 컴2로 3201번부터 200바이트의 데이터를 전송한다.
- ① 컴1은 컴2로 200바이트의 데이터를 전송한다.
- 재전송 제어
- 데이터가 항상 올바르게 전달되는 것은 아니므로 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송하게 되어 있다.
윈도우 크기 (window size)
- 매번 확인 응답을 기다리는 대신 세그먼트를 연속해서 보낸 후 다음에 확인 응답을 반환하면 효율이 높아진다.
- 이때, 받은 세그먼트를 일시적으로 보관하는 장소가 버퍼(buffer) 라고 한다.
- 수신 측은 대량으로 데이터가 전송될 경우 보관하지 못하고 넘치는데 이것을 오버플로(overflow)라고 한다.
- 오버플로(overflow)
- 데이터 크기가 버퍼 크기를 넘어서는 것을 말한다.
- 오버플로가 발생하지 않도록 버퍼의 한계 크기를 알아야 하는데 이것이 TCP 헤더의 윈도우 크기값에 해당한다.
- 윈도우 크기는 확인 응답을 일일이 하지 않고 연속해서 송수신할 수 있는 데이터 크기이다.
- 즉, 버퍼 용량의 크기를 말한다.
- 수신 측이 윈도우 크기를 가지고 있다면 확인 응답을 받지 않고도 세그먼트(데이터)를 연속적으로 전송할 수 있다.
LESSON 26 - 포트 번호의 구조
포트 번호 (port number)
- 전송된 데이터의 목적지가 어떤 애플리케이션(웹 브라우저나 메일 프로그램 등)인지 구분하기 위해 출발지 포트 번호 (source port number)와 목적지 포트 번호 (destination port number)가 필요하다.
- 포트 번호는 0부터 65535까지 사용할 수 있다.
- 0 ~ 1023번 포트는 주요 프로토콜이 사용하도록 예약되어 있으며, 잘 알려진 포트(well-known ports)라고 한다.
- 일반적으로 사용하는 서버 측 애플리케이션에서 사용되고 있다.
- 1024번은 예약되어 있지만 사용되지는 않는 포트이다.
- 1025번 이상은 랜덤 포트이며, 클라이언트 측의 송신 포트로 사용된다.
애플리케이션 | 포트번호 |
SSH | 22 |
SMTP | 25 |
DNS | 53 |
HTTP | 80 |
POP3 | 110 |
HTTPS | 443 |
- TCP는 어떤 애플리케이션이 사용되고 있는지 구분하기 위해서 포트 번호가 필요하다.
- 포트 번호를 붙이지 않고 통신하면 컴퓨터에 데이터가 도착하더라도 애플리케이션까지 도착할 수 없다.
- 웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동으로 할당된다.
- 그래서 서버 측에서는 포트 번호를 정해 둬야 하지만 클라이언트 측은 정하지 않아도 된다.
LESSON 27 - UDP의 구조
UDP (User Datagram Protocol)
- 정보를 서로 주고받을 때 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜이다.
- 연결을 맺을 필요가 없는 정보를 보내거나 받는다는 신호도 필요하지 않다.
- 비연결형 통신이다.
- 데이터를 효율적으로 빠르게 보낼 수 있다.
UDP 헤더
- UDP 헤더가 붙은 데이터를 UDP 데이터그램이라 한다.
- 신뢰성과 정확성이 필요하지 않고 효율성과 빠른 속도가 중요해서 상대방을 확인하지 않고 연속해서 데이터를 보낸다.
- UDP의 전송속도가 TCP에 비해 빠르다.
- 브로드캐스트 (broadcast)
- 네트워크의 모든 컴퓨터와 장비에 같은 패킷을 일괄 전송하는 방식이다.
- 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있다.
- TCP는 확인 응답을 하나씩 보내야 하기 때문에 브로드캐스와 같이 불특정 다수에게 보내는 통신이 적합하지 않다.
'네트워크 > 책 <모두의 네트워크>' 카테고리의 다른 글
8장 | 네트워크의 전체 흐름 살펴보기 (0) | 2023.01.19 |
---|---|
7장 | 응용 계층 : 애플리케이션에 데이터 전송하기 (0) | 2023.01.18 |
5장 | 네트워크 계층 : 목적지에 데이터 전달하기 (0) | 2023.01.13 |
4장 | 데이터 링크 계층 : 랜에서 데이터 전송하기 (1) | 2023.01.12 |
3장 | 물리 계층 : 데이터를 전기 신호로 변환하기 (1) | 2023.01.11 |