I.전송 계층의 역할
1.전송 계층의 두 가지 역할
물리계층, 데이터 링크 계층 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있다. 하지만 중간에 데이터가 손상되거나 유실되더라도 3계층은 이를 해결 해주지 않는다. 이를 해결하기 위해 전송계층이 필요하다. 전송 계층은 목적지에 신뢰할 수 있는 데이터를 전달 한다.
데이터를 제대로 전달하기 위해 두 가지 기능을 하는데 첫 번째로 전송 계층에서는 오류를 점검하는 기능을 한다. 만약 오류가 발생하면, 데이터를 재전송하도록 요청한다. 네트워크 계층은 목적지까지 데이터를 전달하고 전송 계층은 데이터가 제대로 도착 했는지 확인한다고 할 수 있다.
전송 계층은 두 번째 기능은 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별한다. 만약 컴퓨터가 데이터를 받아도 어떤 애플리케이션에 전달할지 모르면 몹시 곤란할거다. 전송 계층은 이 데이터가 어떤 애플리케이션에서 사용되는 데이터인지 판단하고 식별하여 전달한다.
2.연결형 통신과 비연결형 통신
전송 계층의 특징을 간단히 신뢰성/정확성과 효율성으로 구분할 수 있다. 신뢰성/정확성은 데이터를 목적지에 문제없이 전달하는 것이고 연결형 통신을 사용한다. 연결형 통신은 상대편과 확인해가면서 통신하는 방식이다 가장 대표적인 프로토콜은 TCP다. 반면 효율성은 데이터를 빠르고 효율적으로 전달하기 위해 사용되고 비연결형 통신 방식을 사용한다. 비연결형 통신은 상대편을 확인하지 않고 일방적으로 데이터를 보내는 방식이다. 가장 대표적인 프로토콜은 UDP다.
연결형 통신 | 비연결형 통신 | |
가치 | 신뢰성/정확성 | 효율성 |
방식 | 상대편과 확인 후 보냄 | 상대편 확인하지 않고 일방적으로 데이터를 보냄 |
프로토콜 | TCP | UDP |
II.TCP의 구조
1.TCP
2. Three-way HandShake
TCP에서는 연결하기 위해 3번 확인한다. 1. 연결확립을 요청(SYN), 2.요청에 대한 응답(ACK)과 다시 연결 확립에 대한요청(SYN), 3.연결 확립에 대한 응답으로 확인한다(ACK). 이를 Tree-way HandShake라하는데 'HandShake'는 사람들이 상대방을 확인하고 악수를 하는 것처럼 데이터 통신에서도 확실하게 데이터가 전송되었는지 확인하면서 이루어지는 통신 수단이다. 연결을 끊을 땐 FIN과 ACK가 사용된다.
III.일련번호와 확인 응답 번호의 구조
1.일련번호와 확인 응답 번호
Tree-way HandShake가 끝나고 실제 데이터를 보내거나 상대방이 받을 때는 TCP헤더의 일련번호(sequence number)와 확인 응답 번호(acknowledgement number)를 사용한다. 일련번호는 송신 측에서 수신 측에 '이 데이터가 몇 번째 데이터인지' 알려 주는 역할을 한다. 확인 응답 번호는 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할을 한다. 다음 번호의 데이터를 요청하는데에도 사용된다.
2.윈도우 크기
통신이 세그먼트(데이터)를 하나 보낼때 마다 응답하는 방식이면 매번 응답해야하기에 효율성이 떨어진다. 효율성을 높이기 위해 세그먼트를 한번에 보내고 난 다음에 확인 응답을 할 수 있다. 그런데 세그먼트가 쌓여 문제가 생길 것이라는 염려가 생긴다. TCP 헤더에서는 이 문제를 해결하기 위해 윈도우 크기를 설정한다. 윈도우 크기는 세그먼트를 일시적으로 저장하는 장소인 버퍼(buffer)에 저장용량을 초과해 나타나는 현상인 오버플로우(overflow)를 막기위해 버퍼의 한계 크기를 지정한다. 여기서 말하는 버퍼의 한계 크기 값은 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타낸다. 즉, 확인응답을 일일이 하지 않고 연속해서 송수신할 수 있는 데이터 크기다.
윈도우 크기의 초깃값은 위의 사진과 같이 Three-way HandShake를 할 때 판단한다. 위의 사진을 보면 컴퓨터 1의 한계 값이 3000바이트고 컴퓨터 2의 한계값이 2000바이트인 걸 알 수 있다. 서로의 윈도우 크기를 확인하면서 버퍼의 크기를 벗어나지 않게 보내 오버플로우를 막을 수 있다.
IV.포트 번호의 구조
1.포트 번호
앞서 우리는 전송 계층이 데이터를 정확히 전달하는 역할과 전송된 데이터의 목적지가 어떤 애플리케이션으로 가는지 알려주는 두 가지 역할을 한다고 했다. 연결확립, 재전송 제어, 윈도우 제어가 모두 데이터를 정확히 전달하는 첫 번째 역할을 한다. 그렇다면 데이터의 목적지가 어떤 애플리케이션으로 가는지는 무엇이 결정할까?
포트 번호(port number)가 그 역할을 한다. 포트 번호는 전송된 데이터의 목적지가 어떤 애플리케이션인지 구분하여 데이터가 제대로 전달 될 수 있게 한다. 만약 A라는 데이터의 목적지 애플리케이션은 웹인데 메일 프로그램으로 전달되면 데이터가 제대로 전달되지 않는 문제가 생긴다. 포트 번호는 이를 방지한다.
TCP헤더에는 출발지 포트 번호와 목적지 포트번호가 있다. 이 두 포트가 데이터가 향하는 애플리케이션이 무엇인지 판별한다. 포트 번호는 0~65535번 까지 사용할 수 있다.
- 0~1023: 잘 알려진 포트 번호, 서버측 애플리케이션
- 1024: 예약되어 있지만 사용되지 않는 포트 번호
- 1025: 랜덤포트, 클라이언트 송신포트
포트 번호가 실제로 볼 수 없는 것이기에 상상하기 어려울 수 있다. 이를 비유로 풀어볼 수 있다. 애플리케이션을 아파트 주민 A씨와 B씨, 포트 번호를 각 방의 번호로 생각하면 포트 번호가 이해하기 쉽다. A씨(애플리케이션)에게 치킨(데이터)을 보내려면 방 번호(포트 번호)가 '22'인 집에 보내줘야 한다. C씨의 집인 '53'으로 보내면 문제가 생긴다.
V.UDP의 구조
1.UPD의 개념과 UDP 헤더
TCP는 Three-Way HandShake등 일일이 확인하면서 정확성을 따지는 연결형 통신방식이다. 반면에 UDP는 효율성을 중시하고 TCP와 같이 확인작업을 하나하나 하지 않는 비연결형 통신방식이다. 데이터를 빠르게 보낼 수 있기에 UDP는 스트리밍 방식으로 전송되는 동영상 서비스에 사용된다.
UDP가 붙은 데이터를 UDP 데이터 그램이라고 부른다. UDP헤더는 앞서 살펴본 TCP헤더와는 달리 많은 정보를 가지고 있지 않다. 하지만 UDP 또한 TCP와 마찬가지로 출발지 포트 번호와 목적지 포트 번호를 가지고 있다. UDP를 사용하면 랜에있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있는데 이를 브로드캐스트(broadcast)라 부른다.
VI.정리
- 전송 계층(transport layer, 트랜스포트 계층) : 신뢰할 수 있는 데이터를 순차적으로 전달하는 역할을 하므로 상위 계층들이 데이터 전달의 유효성이나 효율성을 신경 쓰지 않도록 한다. 데이터가 중복되거나 누락되지 않고 오류 없이 순서에 맞게 전송되도록 관리한다.
- 연결형(connection-oriented) : 데이터를 교환하기 전에 연결을 맺고 데이터를 교환하는 동안 계속 연결을 관리하는 포로토콜의 한 형태.
- 비연결형(connectionless) : 연결(connection)에 대한 초기화 과정이 없는 통신.
- TCP(Transmission Control Protocol, 전송 제어 프로토콜) : 전송 계층의 프로토콜은 연결형(connection-oriented) 통신 방식이며 신뢰할 수 있는 데이터 전송을 보장한다.
- 대역폭(bandwidth) : 정해진 시간 동안 전송될 수 있는 데이터의 양(주로 속도를 의미한다)을 말한다. 대역폭은 제한적이다.
- UDP(User Datagram Protocol) : 정보를 서로 주고받을 때 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜이다. 연결을 맺을 필요가 없고 정보를 보내거나 받는다는 신호도 필요하지 않다.
- 3-way 핸드셰이크(three-way handshake) : TCP 통신에서 사용하는 신뢰성을 제공하기 위한 통신 방식이다. 컴퓨터 간에 연결을 맺기 위한 초기화 과정으로 세 단계로 되어 있어서 three-way라고 부른다.
- 잘 알려진 포트(well-known ports) : 특정 애플리케이션이 사용할 수 있도록 예약되어 있는 포트로 1~1023번 포트를 말한다.
- 브로드캐스트(broadcast) : 네트워크의 모든 컴퓨터와 장비에 같은 패킷을 일괄 전송하는 방식이다.
- 일련번호(sequence number) : TCP에서는 데이터를 보낼 때마다 각 데이터에 고유한 번호를 부여해서 전송을 시도한다. 이 번호를 이용하여 TCP 패킷의 순서를 제어할 수 있다.
- 포트 번호(port number) : 컴퓨터가 데이터 통신을 할 때 통신하고자 하는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위다. 포트 번호는 0~65535번을 사용할 수 있다. 0~1023번은 잘 알려진 포트(well-known ports)로 특정 애플리케이션이 사용할 수 있도록 예약된 번호다.
출처:모두의 네트워크(저자:미즈구치 카츠야 / 옮긴이: 이승룡 / 출판사:길벗)
'CS > 네트워크' 카테고리의 다른 글
[네트워크]응용 계층: 애플리케이션에 데이터 전송하기 (0) | 2022.09.08 |
---|---|
[네트워크]네트워크 계층: 목적지에 데이터 전달하기 (0) | 2022.09.03 |
[네트워크]데이터 링크 계층: 랜에서 데이터 전송하기 (0) | 2022.08.30 |
[네트워크]물리 계층:데이터를 전기신호로 변환하기 (0) | 2022.07.06 |
[네트워크]네트워크의 기본 규칙 (0) | 2022.07.04 |