Transport Layer | 전송 계층
전송계층의 역할
전송 계층의 두 가지 역할
물리 계층, 데이터 링크 계층, 네트워크 계층의 3계층이 있으면 목적지에 데이터를 보낼 수 있다.
하지만 데이터가 손상되거나 유실되면 이들 계층에서는 아무것도 안 한다.
전송 계층은 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다.
전송 계층에는 오류를 점검하는 기능이 있다 오류가 발생하면 데이터를 재전송하도록 요청한다.
네트워크 계층은 목적지까지 데이터를 전송하고 전송 계층에서는 데이터가 제대로 도착했는지 확인한다.
전송 계층에서는 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능도 있다.
연결형 통신과 비연결형 통신
전송 계층의 특징을 간단하게 설명하면 신뢰성/정확성 과 효율성으로 구분한다.
신뢰성/정확성은 데이터를 목적지에 문제없이 전달하는 것이고 효율성은 데이터를 빠르고 효율적으로 전달하는 것이다.
여기서 신뢰할 수 있고 정확한 데이터를 전달하는 통신을 연결형 통신이라고 하고
효율적으로 데이터를 전달하는 통신을 비연결형 통신이다.
연결형 통신은 상대편과 확인해 가면서 통신하는 방식이고 비연결형 통신은 상대편을 확인하지 않고 일방적으로 데이터를 전송하는 방식이다.
동영상은 비연결형 통신을 사용한다. 동영산은 신뢰할 수 있고 정확한 데이터 전송보다는 빠른 전송이 필요하기 때문이다.
전송계층의 연결형 통신 프로토콜에는 TCP가 사용되고 비연결형 통신 프로토콜에는 UDP가 사용된다.
TCP의 구조
TCP란?
TCP로 전송할 떄 붙이는 헤더를 TCP 헤더라고 하고 TCP 헤더가 붙은 데이터를 세그먼트라고 한다.
데이터를 전송하려면 먼저 연결이라는 가상의 독점 통신로를 확보해야한다.
이 연결을 확립한 후에 데이터를 전송할 수 있다.
TCP 헤더의 코드 비트는 TCP 헤더의 107번쨰 비트부터 112번쨰 비트까지의 6비트로 연결의 제어 정보가 기록되는 곳이다.
코드 비트는 각 비트별로 역할이 있다. 초기값은 0이고 비트가 활성화되면 1이 된다.
연결을 확립하려면 이중에 SYN와 ACK가 필요하다
SYN는 연결 요청, ACK 확인 응답을 뜻한다.
3-way 핸드세이크란?
연결은 SYN과 ACK를 사용하여 확립할 수 있다.
신뢰할 수 있는 연결을 하려면 데이터를 전송하기 전에 패킷을 교환하는데 세번 확인한다.
통신을 하려면 컴퓨터 2에게 허가를 받아야 하므로 먼저 컴퓨터 1에서 2로 연결 확립 허가를 받기 위한 요청(SYN)를 한다.
컴퓨터 2는 컴퓨터 1이 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보낸다. 동시에 컴퓨터 2도 컴퓨터 1에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)를 보낸다.
컴퓨터 2의 요청을 받은 컴퓨터 1은 컴퓨터 2로 허가한다는 응답으로 연결 확립 응답 (ACK)를 보낸다.
이처럼 데이터를 보내기 전에 연결을 확립하기 위해 패킷 요청을 세번 교환하는 것을 3-way 핸드세이크 라고 한다.
데이터를 전송한 후에는 연결을 끊기 위한 요청을 교환한다.
연결을 끊을 때는 FIN과 ACK를 사용하는데 FIN은 연결 종료를 뜻한다.
컴퓨터 1에서 2로 연결 종료 요청(FIN)을 보낸다
컴퓨터 2에서 1로 연결 종료 응답(ACK)를 보낸다.
또한 컴퓨터 2에서 1로 연결 종료 응답(FIN)을 보낸다.
컴퓨터 1에서 2로 연결 종료 응답(ACK)을 반환한다.
TCP는 신뢰성과 정확성을 중요하게 여기는 프로토콜라서 상대방이 문제가 없는지 확실히 확인한다.
일렬번호와 확인 응답 번호의 구조
일련번호와 확인 응답 번호란?
3-way 핸드세이크가 끝나고 실제 데이터를 보내거나 상대방이 받을 떄는 TCP 헤더의 일련번호와 확인 응답 번호를 사용한다.
TCP는 데이터를 반할해서 보내는데 일련번호는 송신 측에서 수신측에 이 데이터가 몇번쨰 데이터인지 알려주는 역할을 한다.
전송된 데이터에 일련번호를 부여하면 수신자는 원래 데이터의 몇번쨰 데이터를 받았는지 알 수 있다.
확인 응답 번호는 수신 측이 몇 번쨰 데이터를 수신했는지 송신 측에 알려주는 역할을 한다.
그래서 이 번호는 다음 번호의 데이터를 요청하는데도 사용된다.
이것을 확인 응답이라고 한다.
컴퓨터 1은 2로 200 바이트의 데이터를 전송한다.
컴퓨터 2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번호를 확인 응답 번호에 넣는다.
컴퓨터 1은 2로 3201번부터 200바이트의 데이터를 전송한다.
컴퓨터 2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터의 번호를 확인 응답 번호에 넣는다.
데이터가 항상 올바르게 전달되는 것은 아니므로 일렬번호화 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송하게 되어 있다.
이것을 재전송 제어라고 한다.
데이터를 전송하는 도중에 오류가 발생하면 일정 시간동안 대기한 후에 재전송한다.
윈도우 크기란?
세그먼트 하나를 보낼 때마다 확인 응답을 한 번 반환하는 통신이다.
매번 확인 응답을 기다리는 대신 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아진다.
세그먼트를 일시적으로 보관하는 장소가 있는데 그 장소를 버퍼라고 부른다.
이 버퍼 덕분에 세그먼트를 연속해서 보내도 수신 측은 대응할 수 있고 확인 응답의 효율도 높아진다.
수신 측은 대량으로 데이터가 전송되면 보관하지 못하고 넘쳐 버린다 이것을 오버플로 라고 한다.
오버플로가 발생하지 않도록 버퍼의 한계 크기를 알고 있어야 한다. 그것이 TCP 헤더의 윈도우 크기 값에 해당한다.
윈도우 크기는 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지 나타낸다.
이 윈도우 크기의 초기값은 3-way 핸드세이크할때 판단한다.
확인 응답을 기다리지 않고 세그멘트를 연속해서 보내면 컴퓨터 1은 첫 번쨰 세그먼트를 전송했지만 컴퓨터 2에서 그에 대한 확인 응답을 수신하기 전에 두번쨰 세그먼트를 보낸다.
포트 번호의 구조
포트 번호란?
전송 계층에는 전송된 데이터의 목적지가 어떤 애플리케이션인지 구분하는 역할이 있다.
목적지가 어떤 애플리케이션인지 구분하지 못하면 사용자가 홈페이지를 보기 위해 웹 브라우저를 사용하는 데도 메일 프로그램으로 데이터가 전송될 수 있다.
그래서 TCP 헤더의 출발지 포트 번호와 목적지 포트 번호가 필요하다.
0 ~ 1023번 포트는 주요 프로토콜로 사용하도록 예약되어 있다. 이러한 포트를 잘 알려진 포트라고 한다.
1024번은 예약되어 있지만 사용하지 않는 포트이고, 1025번 이상은 랜덤 포트라고 해서 클라이언트 측의 송신 포트로 사용된다.
0 ~ 1023번은 서버측 애플리케이션에서 사용한다.
데이터를 전송할 때는 상대방의 IP주소가 필요하지만 어떤 애플리케이션에서 사용되고 이쓴ㄴ지 구분하려면 TCP는 포트 번호가 필요하다.
포트번호를 붙이지않고 통신하면 컴퓨터에 데이터가 도착하더라도 애플리케이션까지는 도착할 수 없다.
웹 브라우저로 접속할때 웹 브라우저에는 임의의 포트가 자동으로 할당된다.
UCP의 구조
UDP란?
TCP는 3-way 핸드세이크로 연결이 확립된 후에 데이터를 전송하고 그때 확인 응답을 한다.
데이터 전송 도중에 오류가 발생하면 재전송하거나 포트 번호로 애플리케이션을 구분하여 데이터를 정확하게 전달하기 위한 기능도 있다.
UDP는 비연결형 통신이라 데이터를 전송할떄 TCP처럼 확인 작업을 하지 않는다.
UDP는 TCP와 달리 효율성을 중요하게 여기는 프로토콜이다.
UDP는 데이터를 효율적으로 빠르게 보내는 것이라서 동영상 서비스와 같은 곳에 사용된다.
UDP 헤더란?
UDP 헤더가 붙은 데이터를 UDP 데이터 그램이라고 한다.
UDP는 효율성과 빠른 속도가 중요해서 상대방을 확인하지 않고 연속해서 데이터를 보낸다.
UDP를 사용하면 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼수 있다. 이것을 브로드캐스트라고 한다.
TCP는 3-way 핸드세이크와 깉이 데이터를 전송할떄 도 확인 응답을 하나씩 보내야 하기 때문에 브로드캐스트와 같이 불특정 다수에게 보내는 통신은 적합하지 않다.
UDP에서 브로드캐스트는 목적지에 관계없이 랜에서 일괄적으로 보내지만 TCP는 목적지를 지정하지 않으면 안되기 떄문에 일괄 통신을 할 수 없다.