전송 계층 : 신뢰할 수 있는 데이터 전송하기
![post-thumbnail](https://velog.velcdn.com/images/doforme/post/497d34c7-4478-45db-b28f-d5e58fdd97ea/image.png)
23. 전송 계층의 역할
- 전송 계층 : 신뢰할 수 있는 데이터를 순차적으로 전달하는 역할을 하므로 상위 계층들이 데이터 전달의 유효성이나 효율성을 신경쓰지 않아도 된다. 데이터가 중복되거나 누락되지 않고 오류 없이 순서에 맞게 전송되도록 관리한다.
전송 계층의 두 가지 역할
- 전송 계층은 목적지에 신뢰할 수 있는 데이터를 전달하기 위해 필요하다.
- 물리 계층, 데이터 링크 계층, 네트워크 계층으로 목적지에 데이터를 보낼 수 있다. 하지만 데이터가 손상되거나 유실되더라고 이들 계층에서는 아무것도 해 주지 않는다.
- 전송 계층의 두 가지 역할
- 오류를 점검하는 기능
- 전송된 데이터의 목적지가 어떤 애플리케이션인지 식별하는 기능
연결형 통신과 비연결형 통신
- 전송 계층의 통신은 연결형 통신과 비연결형 통신으로 구분된다.
- 연결형 : 데이터를 교환하기 전에 연결을 맺고 데이터를 교환하는 동안 계속 연결을 관리하는 프로토콜의 한 형태다.
- 비연결형 : 연결(connection)에 대한 초기화 과정이 없는 통신이다.
24. TCP의 구조
TCP란?
- Transmission Control Protocol, 전송 제어 프로토콜
- 신뢰할 수 있고 정확한 데이터 전송을 보장하는 연결형 통신 프로토콜이다.
- 전송 계층에서는 TCP 헤더가 붙는다. TCP 헤더가 붙은 데이터를 세그먼트라고 한다.
- TCP 헤더는 출발지 포트 번호, 목적지 포트 번호, 일련번호, 확인 응답 번호, 헤더 길이, 예약 영역, 코드 비트, 윈도우 크기, 체크섬, 긴급 포인터, 옵션 순서로 구성되어 있다.
- 연결형 통신은 데이터를 전송하기 전에 먼저 연결(connection)이라는 가상의 독점 통신로를 확보해야 한다.
- 연결을 확립하기 위해 TCP 헤더에 있는 코드 비트를 사용한다.
3-way handshake
![](https://velog.velcdn.com/images/doforme/post/52f42686-d1ec-4f81-86df-2ad1436a24dc/image.png)
- TCP 통신에서 사용하는 신뢰성을 제공하기 위한 통신 방식이다. 컴퓨터 간에 연결을 맺기 위한 초기화 과정으로 세 단계로 되어 있어서 three-way라고 부른다.
- 연결(connection)은 SYN과 ACK를 사용하여 확립할 수 있다.
- 절차
- 통신을 하려면 컴퓨터 2(서버)에게 허가를 받아야 하므로, 먼저 컴퓨터 1(클라이언트)에서 컴퓨터 2로 연결 확립 허가를 받기 위한(SYN)을 보낸다.
- 컴퓨터 2는 컴퓨터 1이 보낸 요청을 받은 후에 허가한다는 응답을 회신하기 위해 연결 확립 응답(ACK)을 보낸다. 동시에 컴퓨터 2도 컴퓨터 1에게 데이터 전송 허가를 받기 위해 연결 확립 요청(SYN)을 보낸다.
- 컴퓨터 2의 요청을 받은 컴퓨터 1은 컴퓨터 2로 허가한다는 응답으로 연결 확립 응답(ACK)을 보낸다.
4-way handshake
![](https://velog.velcdn.com/images/doforme/post/cd034cb7-c62d-4fc9-a226-59c783bc46e5/image.png)
- 데이터를 전송한 후에는 연결을 끊기 위한 요청을 교환해야 한다. 이때는 FIN과 ACK를 사용한다.
- 절차
- 컴퓨터 1(클라이언트)에서 컴퓨터 2(서버)로 연결 종료 요청(FIN)을 보낸다.
- 컴퓨터 2에서 컴퓨터 1로 연결 종료 응답(ACK)을 반환한다.
- 또한 컴퓨터 2에서도 컴퓨터 1로 연결 종료 요청(FIN)을 보낸다.
- 컴퓨터 1에서 컴퓨터 2로 연결 종료 응답(ACK)을 반환한다.
25. 일련 번호와 확인 응답 번호의 구조
일련 번호와 확인 응답 번호란?
- 3-way 핸드셰이크 이후 데이터를 전송할 때는 TCP 헤더의 일련번호와 확인 응답 번호가 사용된다.
- 일련 번호 : TCP 에서는 분할한 데이터를 보낼 때마다 각 데이터에 고유한 번호를 부여해서 전송을 시도한다. 이 번호를 이용하여 TCP 패킷의 순서를 제어할 수 있다.
- 확인 응답 번호는 수신 측이 몇 번째 데이터를 수신했는지 송신 측에 알려주는 역할을 한다. 그래서 다음 번호의 데이터를 요청하는 데도 사용된다.
![](https://velog.velcdn.com/images/doforme/post/e4b501e7-2607-4b37-8444-9af1da646871/image.png)
- 3-way 핸드셰이크로 연결 수립이 이루어질 때, 이번 통신에 사용하는 일련번호인 3001번과 확인 응답 번호인 4001번이 결정된다.
- 절차 예시
- 컴퓨터 1은 컴퓨터 2로 200바이트의 데이터를 송신한다.
- 컴퓨터 2는 200바이트를 수신하고 다음에 수신하고자 하는 데이터 번호(3001 + 200)를 확인 응답 번호에 넣는다.
- 데이터 전송이 완료될 때까지 반복한다.
- 데이터가 항상 올바르게 전송되는 것이 아니므로 일련번호와 확인 응답 번호를 사용해서 데이터가 손상되거나 유실된 경우에 데이터를 재전송하게 되어있다. 이를 재전송 제어라고 한다.
- 데이터 전송 도중 오류가 발생하면 일정 시간 동안 대기한 후에 재전송한다.
윈도우 크기란?
- 세그먼트 하나를 보낼 때마다 확인 응답을 반환한느 통신은 비효율적이다.
- 세그먼트를 연속해서 보내고 난 다음에 확인 응답을 반환하면 효율이 높아진다.
- 수신한 세그먼트를 일시적으로 보관하는 장소인 버퍼가 존재한다.
- 버퍼 크기를 초과하는 대량의 데이터가 전송되면 오버플로 현상이 발생한다. 따라서 송수신 측은 서로의 윈도우 크기를 알고 있어야 한다.
- 윈도우 크기 : 얼마나 많은 용량의 데이터를 저장해 둘 수 있는지를 나타낸다. 즉, 버퍼 용량의 크기를 말한다.
- 윈도의 크기의 초깃값은 3-way 핸드셰이크를 할 때 판단한다.
포트 번호의 구조
포트 번호란?
- 포트 번호 : 컴퓨터가 데이터 통신을 할 때 통신하고자 하는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위다.
- 전송된 데이터의 목적지가 어떤 애플리케이션인지 구분하기 위해 포트 번호가 필요하다.
- 포트 번호는 0 ~ 65535번을 사용할 수 있다.
- 0 ~ 1023번 포트는 잘 알려진 포트(well-known ports)로, 주요 프로토콜이 사용하도록 예약되어 있다. 일반적으로 사용하는 서버 측 애플리케이션에서 사용되고 있다.
- ex) SSH - 22, SMTP - 25, DNS - 53, HTTP - 80, POP3 - 110, HTTPS - 443
- 1024는 예약 되어 있지만 사용되지는 않는 포트이다.
- 1025번 이상은 랜덤 포트라고 해서 클라이언트의 송신 포트로 사용된다.
- 웹 브라우저로 접속할 때 서버 측에서는 포트 번호를 정해둬야 하지만 클라이언트 측은 정하지 않아도 괜찮다.
- 웹 브라우저에는 임의의 포트가 자동으로 할당된다.
27. UDP의 구조
UDP란?
- User Datagram Protocol
- 정보를 서로 주고받을 때 보내는 쪽에서 일방적으로 데이터를 전달하는 통신 프로토콜이다. 즉, 신뢰성을 보장하지 않지만 효율적으로 데이터를 전송하는 비연결형 통신 프로토콜이다.
- UDP는 비연결형 통신이라서 데이터를 전송할 때 TCP처럼 시간이 걸리는 확인 작업을 하지 않는다.
- UDP의 장점은 데이터를 효율적으로 빠르게 보내는 것이다. 따라서 스트리밍 방식으로 전송하는 동영상 서비스와 같은 곳에 사용된다.
- UDP로 랜에 있는 컴퓨터나 네트워크 장비에 데이터를 일괄로 보낼 수 있ㅖ다. 이를 브로드캐스트라고 한다.
- TCP는 3-way 핸드셰이크와 같이 데이터를 전송할 때도 확인 응답을 하나씩 보내야 하기 때문에 불특정 다수에게 보내는 통신에는 적합하지 않다.
UDP 헤더란?
- UDP 헤더가 붙은 데이터를 UDP 데이터그램이라고 한다.
- UDP 헤더는 출발지 포트 번호, 목적지 포트 번호, 길이, 체크섬 순서로 구성된다.
- TCP 헤더에 비해 간단하다. 신뢰성과 정확성이 필요하지 않아서 이 정보만으로 충분하다.