http://www.yes24.com/Product/Goods/61794014
이 장의 목표
- 전송 계층의 역할을 이해한다
- 연결형 통신과 비연결형 통신을 이해한다
- TCP를 이해한다
- UDP를 이해한다
LESSON23 전송 계층의 역할
1. 전송 계층의 두 가지 역할
- 전송 계층(transport layer)
- 신뢰할 수 있는 데이터를 순차적으로 전달하는 역할을 하므로 상위 계층들이 데이터 전달의 유효성이나 효율성을 신경쓰지 않도록 한다.
- 데이터가 중복되거나 누락되지 않고 오류 없이 순서에 맞게 전송되도록 관리한다.
- 물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있다
- 하지만 데이터가 손상되거나 유실되더라도 이들 계층에서는 아무것도 해 주지 않는다
- 전송 계층은 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다
- 역할 1
- 오류를 점검하는 기능
- 오류가 발생하면 데이터를 재전송하도록 요청
- 네트워크 계층은 목적지까지 데이터를 전달하고, 전송 계층에서는 데이터가 제대로 도착했는지 확인한다.
- 오류를 점검하는 기능
- 역할 2
- 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능
2. 연결형 통신과 비연결형 통신
- 전송 계층의 특징
- 신뢰성/정확성
- 데이터를 목적지에 문제없이 전달하는 것
- 효율성
- 데이터를 빠르고 효율적으로 전달하는 것
- 신뢰성/정확성
- 연결형 통신
- 연결형(connection-oriented)
- 데이터를 교환하기 전에 연결을 맺고 데이터를 교환하는 동안 계속 연결을 관리하는 프로토콜의 한 형태
- 신뢰할 수 있고 정확한 데이터를 전달하는 통신
- 상대편과 확인해 가면서 통신하는 방식
- TCP
- 연결형 통신 프로토콜
- 연결형(connection-oriented)
- 비연결형 통신
- 비연결형(connectionless)
- 연결에 대한 초기화 과정이 없는 통신
- 효율적으로 데이터를 전달하는 통신
- 비연결형 통신은 상대편을 확인하지 않고 일방적으로 데이터를 전송하는 방식
- UDP
- 비연결형 통신 프로토콜
- 비연결형(connectionless)
LESSON24 TCP의 구조
전송 계층에서 신뢰할 수 있는 정확한 통신을 제공하는 TCP 프로토콜의 구조에 대해 알아본다.
1. TCP란?
- TCP(Transmission Control Protocol)
- 전송 계층의 프로토콜은 연결형(connection-oriented) 통신 방식이며 신뢰할 수 있는 데이터 전송을 보장한다.
- TCP 헤더
- TCP로 전송할 때 붙이는 헤더
- 세그먼트(segment)
- TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 한다.
- 연결(connection)
- 데이터를 전송하려면 먼저 연결(connection)이라는 가상의 독점 통신로를 확보해야 한다
- 연결 확립
- 연결 확립을 위해 TCP 헤더의 코드 비트를 사용한다.
- SYN : 연결 요청
- ACK : 연결 응답
- FIN : 연결 종료
- 연결 확립을 위해 TCP 헤더의 코드 비트를 사용한다.
2. 3-way 핸드셰이크란?
- 3-way 핸드셰이크(three-way handshake)
- TCP 통신에서 사용하는 신뢰성을 제공하기 위한 통신 방식
- 컴퓨터 간에 연결을 맺기 위한 초기화 과정이 세 단계로 되어 있어서 three-way라고 한다.
- 연결(connection)은 SYN과 ACK를 사용하여 확립할 수 있다.
- 신뢰할 수 있는 연결을 하려면 데이터를 전송하기 전에 패킷을 교환한다.
- Ex. 컴퓨터 1과 컴퓨터 2의 연결 확립
- 1. 연결 확립 요쳥
- 통신을 하려면 컴퓨터 2에게 허가를 받아야 하므로, 먼저 컴퓨터 1에서 컴퓨터 2로 연결 확립 허가를 받기 위한 요청 (SYN)을 보낸다.
- 코드 비트
URG ACK PSH RST SYN FIN 0 0 0 0 1 0
- 2. 연결 확립 응답 + 연결 확립 요청
- 컴퓨터 2는 컴퓨터 1이 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답 (ACK)을 보낸다. 동시에 컴퓨터 2도 컴퓨터 1에게 데이터 전송 허가를 받기 위해 연결 확립 요청 (SYN)을 보낸다.
- 코드 비트
URG ACK PSH RST SYN FIN 0 1 0 0 1 0
- 3. 연결 확립 응답
- 컴퓨터 2의 요청을 받은 컴퓨터 1은 컴퓨터 2로 허가한다는 응답을 연결 확립 응답 (ACK)을 보낸다.
- 코드 비트
URG ACK PSH RST SYN FIN 0 1 0 0 0 0
- 1. 연결 확립 요쳥
- Ex. 컴퓨터 1과 컴퓨터 2의 연결 확립
- 3-way 핸드셰이크(three-way handshake)
- 이 처럼 데이터를 보내기 전 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것을 3-way 핸드셰이크(three-way handshake)라고 한다.
- 데이터를 전송한 후에는 연결을 끊기 위한 요청을 교환해야 한다
- FIN과 ACK를 사용
- 컴퓨터 1과 컴퓨터 2의 연결 종료
- 1. 연결 종료 요청
- 컴퓨터 1에서 컴퓨터 2로 연결 종료 요청(FIN)을 보낸다.
- 코드 비트
URG ACK PSH RST SYN FIN 0 0 0 0 0 1
- 2. 연결 종료 응답
- 컴퓨터 2에서 컴퓨터 1로 연결 종료 응답(ACK)을 반환한다.
- 코드 비트
URG ACK PSH RST SYN FIN 0 1 0 0 0 0
- 3. 연결 종료 요청
- 컴퓨터 2에서도 컴퓨터 1로 연결 종료 요청(FIN)을 보낸다.
- 코드 비트
URG ACK PSH RST SYN FIN 0 0 0 0 0 1
- 4. 연결 종료 응답
- 컴퓨터 1에서 컴퓨터 2로 연결 종료 응답(ACK)을 반환한다.
- 코드 비트
URG ACK PSH RST SYN FIN 0 1 0 0 0 0
- 1. 연결 종료 요청
LESSON25 일련번호와 확인 응답 번호의 구조
3-way 핸드셰이크 이후 데이터 전송에 사용되는 TCP 헤더의 일련번호와 확인 응답 번호에 대해 알아본다.
1. 일련번호와 확인 응답 번호란?
- 3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 TCP 헤더의 일련번호(sequence number)와 확인 응답 번호(acknowledgment)를 사용한다.
- TCP header의 구조
- 일련번호(sequence number)
- TCP에서는 데이터를 보낼 때마다 각 데이터에 고유한 번호를 부여해서 전송을 시도한다.
- 이 번호를 이용하여 TCP 패킷의 순서를 제어할 수 있다.
- 송신 측에서 수신 측에 ‘이 데이터가 몇 번째 데이터인지’ 알려주는 역할
- 전송된 데이터에 일련번호를 부여하면 수신자는 원래 데이터의 몇 번째 데이터를 받았는지 알 수 있다.
- 확인 응답 번호(acknowledgment)
- 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할
- 이 번호는 다음 번호의 데이터를 요청하는데도 사용된다.
- 10번 데이터를 수신하면 11번 데이터를 송신 측에 요청
- 재전송 제어
- 데이터가 항상 올바르게 전달되는 것은 아니므로 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송하게 되어 있다.
- 일정 시간 동안 대기한 후에 재전송
2. 윈도우 크기란?
- 세그먼트(데이터) 하나를 보낼 때마다 확인 응답 한 번 반환
- 비효율적
- 매번 확인 응답 기다리는 대신 세그먼트를 연속해서 보내고 난 다음에 확인 응답 반환
- 효율적
- 버퍼(buffer)
- 세그먼트를 일시적으로 보관하는 장소
- 세그먼트를 연속해서 보내도 수신 측 대응 가능 및 확인 응답 효율 높아짐
- 오버플로(overflow)
- 세그먼트를 대량으로 받아서 처리하지 못하는 경우
- 윈도우 크기(window size)
- 오버플로 방지를 위한 버퍼의 한계 크기 정의
- 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지
- 윈도우 크기의 초깃값은 3-way 핸드셰이크를 할 때 판단
LESSON26 포트 번호의 구조
데이터의 목적지가 어떤 프로그램인지 구분하는 역할을 하는 포트 번호에 대해 알아본다.
1. 포트 번호란?
- 포트 번호(port number)
- 컴퓨터가 데이터 통신을 할 때 통신하고자 하는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위
- 전송된 데이터의 목적지가 어떤 애플리케이션(웹 브라우저나 메일 프로그램 등)인지 구분하는 역할
- TCP 헤더
- 출발지 포트 번호(source port number)
- 목적지 포트 번호(destination port number)
- 포트 번호는 0~65535번을 사용 가능
- 잘 알려진 포트(well-known ports)]
- 0~1023번 포트는 주요 프로토콜이 사용
- 서버 측 애플리케이션
애플리케이션 포트 번호 SSH 22 SMTP 25 DNS 53 HTTP 80 POP3 110 HTTPS 443
- 랜덤 포트
- 1025번 이상
- 클라이언트 측의 송신 포트
- 잘 알려진 포트(well-known ports)]
- Ex. 원룸 아파트 전체를 컴퓨터에 비유
- 애플리케이션은 아파트 주민 A씨와 B씨
- 포트 번호는 각 방의 번호
- A씨(애플리케이션)에게 짐(데이터)을 보내려면 방 번호(포트 번호)가 ‘22’번인 방에 보내면 된다.
- 데이터를 전송할 때는 상대방의 IP 주소가 필요하지만, 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP는 포트 번호가 필요하다.
LESSON27 UDP의 구조
전송 계층에서 효율적으로 통신할 수 있도록 돕는 UDP 프로토콜의 구조에 대해 알아본다.
1. UDP란?
- UDP(User Datagrame Protocol)
- 정보를 서로 주고받을 때 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜이다.
- 연결을 맺을 필요가 없고 정보를 보내거나 받는다는 신호도 필요하지 않다.
- 데이터를 효율적이고 빠르게 보낼 때 사용되는 프로토콜
- 비연결형 통신
- UDP는 비연결형 통신이라서 데이터를 전송할 때 TCP처럼 시간이 걸리는 확인 작업을 일일이 하지 않는다.
- 장점
- UDP의 장점은 데이터를 효율적으로 빠르게 보내는 것
- ex. 스트리밍 방식으로 전송하는 동영상 서비스에 사용됨
2. UDP 헤더란?
- UDP 헤더
- TCP 헤더에 비해 간단
- UDP 데이터그램
- UDP 헤더가 붙은 데이터
- 브로드캐스트(broadcast)
- 네트워크의 모든 컴퓨터와 장비에 같은 패킷을 일괄 전송하는 방식
- UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있다.
- TCP는 브로드캐스트 통신 적합 X
- 3-way 핸드셰이크와 같이 데이터를 전송할 때도 확인 응답을 하나씩 보내야 하기 때문에 브로드캐스트와 같이 불특정 다수에게 보내는 통신에는 적합하지 않다.