전송 계층의 역할
- 물리 계층, 데이터 링크 계층, 네트워크 계층만 있으면 목적지에 데이터를 보낼 수 있음
→ 하지만 데이터 손상 또는 유실 시 이 계층들에서는 아무것도 못함
→ 전송 계층의 존재 이유 - 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요
전송 계층의 2가지 기능
- 오류를 점검하는 기능
- 오류가 발생하면 데이터를 재전송하도록 요청
- 데이터가 제대로 도착했는지 확인
- cf. 네트워크 계층 → 목적지까지 데이터를 전달하는 것
- cf. 네트워크 계층 → 목적지까지 데이터를 전달하는 것
- 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능
- 컴퓨터가 데이터를 받아도 어떤 애플리케이션에 전달해야 하는지 모르면 안 됨
- 예 : 홈페이지용 데이터인데 메일 프로그램에 전달하면 안 됨
- 컴퓨터가 데이터를 받아도 어떤 애플리케이션에 전달해야 하는지 모르면 안 됨
연결혈 통신과 비연결형 통신
- 전송 계층의 특징 → 신뢰성/정확성과 효율성
신뢰성/정확성
: 데이터를 목적지에 문제없이 전달하는 것효율성
: 데이터를 빠르고 효율적으로 전달하는 것
신뢰성/정확성
을 가진 통신 → 연결형 통신- 신뢰할 수 있고 정확한 데이터를 전달하는 통신
- 신뢰할 수 있고 정확한 데이터를 전달하는 통신
효율성
을 가진 통신 → 비연결형 통신- 효율적으로 데이터를 전달하는 통신
연결형 통신과 비연결형 통신의 차이
- 연결형 통신
- 상대편과 확인해 가면서 통신하는 방식
- 데이터를 보내도 되는지 요청을 하고, 상대방이 허락을 하면 데이터를 보냄
- 전송 계층의 연결형 통신 프로토콜 → TCP
- 비연결형 통신
- 상대편을 확인하지 않고 일방적으로 데이터를 보내는 방식
- 동영상을 볼 때 비연결형 통신 사용
- 동영상은 빠른 전송이 필요 ← 데이터가 약간 유실되더라도 원활하게 보는 게 좋으니까
- 동영상은 빠른 전송이 필요 ← 데이터가 약간 유실되더라도 원활하게 보는 게 좋으니까
- 전송 계층의 비연결형 통신 프로토콜 → UDP
TCP의 구조
TCP란?
- 신뢰성과 정확성을 우선으로 하는 연결형 통신 프로토콜
- 캡슐화할 때, TCP로 전송할 때 붙이는 헤더를 TCP 헤더라고 함
- TCP 헤더가 붙은 데이터를 세그먼트(segment)라고 부름
TCP 연결(Connection)
- TCP 통신에서 데이터를 전송하려면 연결(connection)이라는 가상의 독점 통신로를 확보해야 함
- 연결을 확립한 후에 데이터를 전송할 수 있음
- 연결을 확립한 후에 데이터를 전송할 수 있음
- 연결을 확립하는 방법
- TCP 헤더의 코드 비트 부분에 저장
- TCP 헤더 코드 비트
- 헤더의 107번째 비트 ~ 112번째 비트까지의 6비트
- 연결의 제어 정보가 기록되는 곳
- 코드 비트는 각 비트별로 역할이 있음.(초기값 0, 활성화 시 1)
SYN
: 연결 요청ACK
: 확인 응답
- TCP 헤더 코드 비트
- TCP 헤더의 코드 비트 부분에 저장
3-way 핸드셰이크란?
- 연결은 SYN과 ACK을 사용하여 확립할 수 있음
- 신뢰할 수 있는 연결을 하기 위해 데이터를 전송하기 전에 패킷을 3번 교환
→ 3-way 핸드셰이크(3-way handshake) 3-way 핸드셰이크
: 데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세 번 교환하는 것- 데이터 통신에서도 확실하게 데이터가 전송되었는지 확인하면서 이루어지는 통신수단
패킷 교환 과정
- 통신을 위해 A에서 B로 연결 확립 허가를 받기 위한 요청(SYN)을 보낸다.
- 통신을 하기 위해서는 허가를 받아야 한다.
- 통신을 하기 위해서는 허가를 받아야 한다.
- B는 A가 보낸 요청을 받은 후 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보냄
동시에 B도 A에게 데이터 전송 허가를 받기 위한 SYN을 보낸다.
- B의 요청을 받은 A는 허가한다는 응답으로 ACK를 B로 보낸다.
데이터 전송 후 연결을 끊는 과정
- A에서 B로 연결 종료 요청(FIN)을 보낸다.
- B에서 A로 연결 종료 응답(ACK)을 반환한다.
- 또한 B에서 A로 연결 종료 요청(FIN)을 보낸다.
- A에서 B로 연결 종료 응답(ACK)을 반환한다.
일련번호와 확인 응답 번호의 구조
일련번호와 확인 응답 번호란?
- 3-way 핸드셰이크가 끝나고 실제 데이터를 주고받을 때 TCP 헤더의 일련번호와 확인 응답번호를 사용
일련번호
: 송신 측에서 수신 측에 ‘해당 데이터가 몇 번째 데이터인지’ 알려 주는 역할- 전송 데이터에 일련번호를 부여하면 수신자는 원래 데이터의 몇 번째 데이터를 받았는지 인지 가능
- 일련번호는 순서, 연속된 번호라는 뜻이 있음
확인 응답 번호
: 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할- 확인 응답 번호는 다음 번호의 데이터를 요청하는데도 사용 → 확인 응답
- 예 : 10번 데이터를 수신하면 11번 데이터를 송신 측에 요청
- 확인 응답 번호는 다음 번호의 데이터를 요청하는데도 사용 → 확인 응답
일련번호와 확인 응답 번호를 통한 데이터 송수신
- 3-way 핸드셰이크(데이터 전송 전)로 연결 수립이 이루어질 때 통신에 사용하는
일련번호인 3001번과 확인 응답 번호인 4001번이 결정된 상황
- A는 B로 200바이트의 데이터를 전송한다.
- B는 200바이트 수신 후, 다음에 수신하고자 하는 데이터 번호를 확인응답 번호에 넣는다.
다음에 수신하고자 하는 데이터는 3001+200 = 3201번을 요청 - A는 B로 3201번부터 200바이트의 데이터를 전송
- 2번과 같은 과정으로 200바이트 수신 후, 3201+200 = 3401번을 요청
- 여기서 나오는 TCP의 특징 → 재전송 제어
재전송 제어
: 일련번호와 확인 응답 번호를 사용해서 데이터 손상/유실 시 데이터를 재전송- 데이터를 전송하는 도중에 오류가 발생하면 일정 시간 대기 후 재전송
윈도우 크기
- 세그먼트(데이터)를 하나씩 보낼 때마다 확인 응답을 반환하는 통신은 효율인 낮음
→ 세그먼트를 연속해서 보내고 난 다음 확인 응답을 반환하면 효율이 높아짐 버퍼(buffer)
: 세그먼트를 일시적으로 보관하는 장소- 버퍼 덕에 세그먼트를 연속해서 보내도 수신 측은 대응할 수 있음
→ 확인 응답의 효율이 높아짐 - 오버플로가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 함
오버플로
: 수신 측은 대량으로 데이터가 전송되면 보관하지 못하고 넘쳐버리는 것
- 버퍼 덕에 세그먼트를 연속해서 보내도 수신 측은 대응할 수 있음
윈도우 크기의 정의
- 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타내는 것
- 버퍼의 한계 크기
- 윈도우 크기의 초깃값은 3-way 핸드셰이크를 할 때 판단
- 3-way 핸드셰이크를 하는 동안 서로의 윈도우 크기를 확인함
- 상대방 버퍼의 한계값을 인지하여 세그먼트(데이터)가 오버플로 되지 않도록 보내야 함
버퍼를 이용하여 세그먼트를 보낼 때
- 수신 측이 윈도우 크기를 가지고 있다면 확인 응답을 받지 않고도 세그먼트를 연속적으로 전송 가능
포트 번호란?
- 출발지 포트 번호와 목적지 포트번호로 나뉨
- 전송 계층의 역할인 ‘전송된 데이터의 목적지를 구분하는 역할’을 가능하게 함
- TCP 헤더에 포트 번호가 있기 때문에 애플리케이션을 구분할 수 있다.
- 동작하는 애플리케이션은 각각 포트 번호가 있어 다른 애플리케이션과 구분됨
- 어떤 애플리케이션이 사용되고 있는지 구분하기 위해선 TCP는 포트 번호가 필요
- 포트 번호를 붙이지 않고 통신을 하면 데이터가 도착해도 애플리케이션까지 도달 못함
- TCP 헤더에 포트 번호가 있기 때문에 애플리케이션을 구분할 수 있다.
포트 번호의 구분
- 포트 번호는 0 ~ 65535번을 사용 가능
0 ~ 1023번 포트
: 주요 프로토콜이 사용하도록 예약 → well-known port라고 부름- 일반적으로 서버 측 애플리케이션에서 사용됨
- 일반적으로 서버 측 애플리케이션에서 사용됨
1024번 포트
: 예약되어 있지만 잘 사용되지 않는 포트1025번 이상 ~ 65535번
: 클라이언트 측의 송신 포트로 사용 → 랜덤 포트라고 부름
포트번호를 붙여 통신하는 과정
- 컴퓨터 A의 웹 브라우저가 접속할 때 임의의 포트가 자동으로 할당(여기서는 1025번)
- 때문에 클라이언트 측에서는 포트 번호를 정할 필요가 없음
- 서버 측은 포트 번호를 정해야 함
UDP의 구조
- 비연결형 통신으로 효율성을 중요하게 여기는 프로토콜
→ 장점 : 데이터를 효율적으로 빠르게 보내는 것 - 동영상 서비스 같은 곳에 사용
UDP 헤더
- UDP 헤더가 붙은 데이터를 UDP 데이터그램이라고 함
- UDP는 상대방을 확인하지 않고 연속해서 데이터를 보냄 → 전송 속도가 빠르다.
- 확인 응답을 하지 않음
브로드캐스트
- UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있음
→ 이를 브로드캐스트(broadcast)라고 함 - TCP는 데이터를 전송할 때 확인 응답을 해야 하기 때문에 불특정 다수에게 보내는 통신에는 부적합
- UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보냄
But, TCP는 목적지를 지정하지 않으면 안 되기 때문에 일괄 통신을 할 수 없음
- UDP에서의 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보냄