
💡 유한상태기기, UDP 검사합,
9.1 전송층 서비스
- 전송층은 응용층과 네트워크층 사이에 위치한다.
- 이것은 두 응용층, 즉 지역호스트와 원격 호스트 사이의 통신을 제공한다. 이를 process-to-process 통신이라 한다.
- 통신은 논리적 연결을 이용해 제공된다.
- 2개의 응용층이 가상적으로 직접 연결을 통하여 이들 사이에 메시지 송신과 수신이 가능하다는 것을 의미한다.

- 전송층은 네트워크층과 응용층 사이에 위치한다.
- 전송층은 응용층에 서비스를 제공하는 책임이 있다.
- 이것은 네트워크층으로부터 서비스를 받는다.
- 이 절에서 우리는 전송층에 의해 제공될 수 있는 서비스를 다루고 다음 절에서는 다수의 전송층 프로토콜을 다룬다.
9.1.1 프로세스-대-프로세스 통신
9.1.2 포트번호
- 프로세스 간 통신을 달성하는 몇 가 지 방법이 있지만, 가장 일반적인 방법은 클라이언트-서버 패러다임을 사용하는 것이다.
- 클라이언트라고 하는 로컬 호스트의 프로세스는 일반적으로 서버라고 하는 원격 호스트의 프로세스에서 서비스를 필요로 한다.
- 그러나 오늘날 운영체제는 다중 사용자 및 다중 프로그래밍을 모두 지원한다.
- 여러 로컬 컴퓨터가 동시에 하나 이상의 클라이언트 프로그램을 실행할 수 있는 것처럼 원격 컴퓨터는 동시에 여러 프로그램을 실행할 수 있다.
- 통신을 위해서는 로컬 호스트, 로컬 프로세스, 원격 호스트, 원격 프로세스를 정의해야 한다.
- 로컬호스트와 원격호스트는 IP주소를 이용해 정의되고, 로컬 프로세스와 원격 프로세스는 포트번호라 불리는 두 번째 식별자가 필요하다.

- IP 번호를 통해 호스트를 찾고, 포트번호를 통해 프로세스를 찾는다.
- ICANN 포트번호 범위
- well-known (0~1,023)
- Registered (1,024~49,151)
- Dynamic or Private (49,152~65,535)
9.1.3 캡슐화와 역캡슐화

- 이를 통해 실제 통신을 한다.
- 결국 프로세스에서는 애플리케이션 프로토콜을 포함하고 있다. 거기서 메시지를 만들어서 transport 계층으로 내리면 헤더를 붙이게 되는데, 헤더를 붙이고 캡슐화를 하고 상대편에게 보내준다.
- 상대편에 도착하면 헤더를 제거하고 페이로드를 서버에 보내준다.
- 이 과정에서 상대편으로 갈 때 IP 주소가 필요하고, 해당 Process를 찾는 데에 포트번호가 필요하다.

9.1.4 다중화 및 역 다중화

- 클라와 서버가 통신을 할 예정이다
- 서버 1에 P1과 P3가 있고, 서버 2에 P2가 있다고 해보자.
- 클라에선 P1, P2, P3를 전부 보내야 할 때, Multiplexer을 통해서 보내야하는데, 이때 서버 1에는 P1, P3를 하나로 묶어서 보낼 수 있다. 이를 Multiplexing이라고 한다.
- Sever1에서는 이렇게 묶여서 온 P1, P3를 풀어야 한다. 이를 Demultiplexing 이라고 한다.
- 즉, 전송계층은 상위계층에서 온 것을 묶어서 보낼 수 있고, 이렇게 묶여서 온 것을 풀어서 상위 계층으로 보낼 수 있다.
Pushing or Pulling

9.1.5 흐름 제어 (Flow Control)
- 데이터를 보낼 때 상대가 처리 가능한 양으로 보내야 한다.
- 한꺼번에 여러 개 보내고 잘 받았다 응답 받으면 다시 여러 개 보내는 방식이다.
