[Network] 전송 계층 : 신뢰할 수 있는 데이터 전송하기
23. 전송 계층의 역할
전송 계층의 두 가지 역할
- 물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있음
- 데이터가 손상 or 유실되면 이들 계층에서는 아무것도 해주지 못함
전송 계층 : 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요
전송 계층의 2가지 역할
1. 오류를 점검하는 기능
- 오류가 발생하면 데이터를 재전송하도록 요청함
- 네트워크 계층은 목적지까지 데이터를 전달, 전송 계층은 데이터가 잘 도착했는지 확인
2. 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능
- ex) 홈페이지에서 사용하는 데이터인지 메일 프로그램에서 사용하는 것인지
연결형 통신과 비연결형 통신
전송 계층의 특징
- 신뢰성/정확성 : 데이터를 목적지에 문제없이 전달하는 것
- 효율성 : 데이터를 빠르고 효율적으로 전달하는 것
연결형 통신 : 신뢰할 수 있고 정확한 데이터를 전달하는 통신
- 상대편과 여러 번 확인해 가면서 통신하는 방식
- TCP(Transmission Control Protocol) 프로토콜이 사용
비연결형 통신 : 효율적으로 데이터를 전달하는 통신
- 상대편을 확인하지 않고 일방적으로 데이터를 전송하는 방식
- ex) 동영상
- 신뢰할 수 있고 정확한 데이터 전송보다 빠른 전송이 중요
- 데이터가 늦게 도착해서 화면이 버벅거리는 것보다 데이터가 유실되더라도 원활하게 보는게 좋음
- UDP(User Datagram Protocol) 프로토콜이 사용
24. TCP의 구조
TCP란?
TCP 헤더
- TCP로 전송할 때 붙이는 헤더
- 목적지까지 데이터를 제대로 전송하기 위해 필요한 정보가 포함되어 있음
세그먼트(segment)
- TCP 헤더가 추가된 데이터
세그먼트 = TCP 헤더 + 데이터
TCP 통신에서 데이터를 전송하기 전에 해야하는 작업
- 데이터를 전송하려면 먼저 연결(connection)이라는 가상의 독점 통신로를 확보해야함
TCP 헤더의 코드 비트
- 연결을 확립하기 위해 TCP헤더의 코드비트를 사용
- TCP 헤더의 107 ~ 112번째 비트까지의 6비트로 연결의 제어 정보가 기록되는 곳
- 각 비트별로 역할이 있음, 초깃값은 0이고 활성화되면 1이 됨
3-way 핸드셰이크란?
연결을 확립할 때
- 연결을 확립하려면
SYN
와ACK
를 사용SYN
: 연결 요청ACK
: 확인 응답
- 신뢰할 수 있는 연결을 하려면 데이터를 전송하기 전에 패킷 요청을 세 번 교환함
3-way 핸드셰이크(three-way-handshake)
연결을 종료할 때
- 연결을 끊을 때는
FIN
과ACK
를 사용FIN
: 연결 종료
25. 일련번호와 확인 응답 번호의 구조
일련번호와 확인 응답 번호란?
- 3-way 핸드셰이크가 끝나고 실제 데이터를 보내거나 받을 때 TCP 헤더의 일련번호(sequence number)와 확인 응답 번호(acknowledgement number)를 사용
일련번호
- TCP는 데이터를 분할해서 보냄
- 송신 측에서 수신 측에 이 데이터가 몇 번째 데이터인지 알려주는 역할
확인 응답 번호
- 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할
- 이 번호는 다음 번호의 데이터를 요청하는 역할도 함
- ex) 10번 데이터를 수신 했으면 11번 데이터를 송신 측에 요청
재전송 제어 : 데이터를 전송하는 도중에 오류가 발생하면 일정 시간 동안 대기한 후에 재전송하는 것
윈도우 크기란?
- 앞에 설명한 것은 세그먼트(데이터) 하나를 보낼 때 마다 확인 응답을 한 번 반환하는 통신
- 효율이 좋지 않음
- 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아짐
버퍼(buffer) : 세그먼트를 일시적으로 보관하는 장소
- 버퍼 덕분에 세그먼트를 연속해서 보내도 수신 측은 대응할 수 있고 확인 응답의 효율도 높아짐
- 하지만 수신 측으로 대량으로 데이터가 전송되면 넘침 -> 오버플로우(overflow)
- 오버플로우가 발생하지 않으려면 버퍼의 한계 크기를 알고 있어야 함
- TCP 헤더의 윈도우 크기(window size) 값에 해당
윈도우 크기 : 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지 나타냄
- 확인 응답을 일일이 하지 않고 연속해서 송수신할 수 있는 데이터 크기
- 윈도우 크기는 3-way 핸드셰이크를 할 때 판단됨
- 3-way 핸드셰이크 하는 동안에 서로의 윈도우 크기를 확인함
- 수신 측이 윈도우 크기를 가지고 있다면 확인 응답을 받지 않고도 세그먼트(데이터)를 연속해서 전송 가능
26. 포트 번호의 구조
포트 번호란?
-
TCP 헤더의 출발지 포트 번호(source port number)와 목적지 포트 번호(destination port number)가 필요
- TCP 헤더에 포트 번호가 있기 때문에 애플리케이션을 구분할 수 있음
- ex) 포트 번호를 사용하면 웹 브라우저인지 메일 프로그램인지 구분 가능
- 포트 번호는 0~65535번을 사용 가능
- 0~1023번 포트는 주요 프로토콜이 사용하도록 예약되어 있음 -> 잘 알려진 포트(well-known ports)
- 일반적으로 사용하는 서버 측 애플리케이션에서 사용
- 1024번은 예약되어 있지만 사용되지는 않는 포트
- 1025번 이상은 랜덤 포트라고 함
- 클라이언트 측의 송신 포트로 사용됨
- 0~1023번 포트는 주요 프로토콜이 사용하도록 예약되어 있음 -> 잘 알려진 포트(well-known ports)
애플리케이션과 포트 번호
애플리케이션 | 포트 번호 |
---|---|
SSH | 22 |
SMTP | 25 |
DNS | 53 |
HTTP | 80 |
POP3 | 110 |
HTTPS | 443 |
- 애플리케이션은 각각 포트 번호가 있어서 다른 애플리케이션과 서로 구분됨
- 데이터를 전송할 때는 상대방의 IP 주소가 필요
- 어떤 애플리케이션이 사용되고 있는지 구분하려면 TCP는 포트 번호가 필요
-
포트 번호를 붙이지 않고 통신하면 컴퓨터에 데이터가 도착하더라도 애플리케이션까지 도착할 수 없음
- 웹 브라우저로 접속할 때 웹 브라우저에는 임의의 포트가 자동으로 할당됨
- 서버 측에서는 포트 번호를 정해 둬야 하지만 클라이언트 측은 정하지 않아도 됨
27. UDP의 구조
UDP란?
- UDP는 비연결형 통신
- 데이터를 전송할 때 TCP 처럼 시간이 걸리는 확인 작업 하지 않음
- UDP는 TCP와 달리 효율성을 중요시하는 프로토콜
UDP의 장점
- 데이터를 효율적으로 빠르게 보냄
- ex) 스트리밍 방식으로 전송하는 동영상 서비스
UDP 헤더란?
UDP 헤더
- 올바른 목적지의 애플리케이션으로 데이터를 전송하기 위해 필요한 정보가 포함되어 있음
UDP 데이터그램
- UDP 헤더가 추가된 데이터
UDP 데이터그램 = UDP 헤더 + 데이터
- TCP는 여러 번 확인 응답을 보내면서 전송
- UDP는 효율성과 빠른 속도가 중요해서 상대방을 확인하지 않고 연속해서 데이터를 전송
브로드캐스트(broadcast)
- UDP를 사용하여 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄적으로 보내는 것
- UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보낼 수 있음
- TCP는 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신할 수 없음