계층순서
application -> trasport -> network -> data link -> physical
application : SMTP, DNS, HTTP
application <-> transport : TCP/UDP
network -> data link : 큐잉지연 발생 자주 하는 곳(확인 필요)

호스트(host)간의 통신
최선형(best-effort) 서비스
비연결성(connectionless) 서비스
IP(Internet Protocol)
위의 network계층의 서비스를 이용해서, transport 계층 정의.
정의된 transport 계층을 기반으로, application 계층 정의.

정리) 어플리케이션끼리 통신 -> 트랜스포트로 요청이 내려와. -> 트랜스포트에서 세그멘테이션, 리어셈블리, 다중화, 역다중화 작업 실행 -> network 계층으로 이동(여러개 존재 가능) -> IP통신으로 주소 지정 -> packet이라는 data gram단위로 짤라내. -> data link 로 이동
조금 세부) application 계층에서 응용 프로세스가 통신을 위해 메시지를 생성 (메시지를 transport 계층으로 전달.) -> transport 계층은 메시지를 적절한 크기로 세그멘테이션하고, 각 세그먼트에 포트 번호를 부여.(한 application process가 여러개의 segment가 된 경우, 모두 동일한 port number를 갖게 된다.) 이후 다중화를 통해 여러 응용 프로세스의 데이터를 하나의 연결로 통합 (세그먼트는 네트워크 계층으로 전달) -> 네트워크 계층은 세그먼트에 IP 헤더를 추가하여 패킷을 생성. IP 주소를 사용하여 패킷의 출발지와 목적지를 지정하고, 패킷이 네트워크를 통해 올바른 경로로 전달 -> 패킷은 데이터 링크 계층으로 전달. 데이터 링크 계층은 패킷에 데이터 링크 헤더와 트레일러를 추가하여 프레임을 생성. -> MAC 주소를 사용하여 물리적으로 연결된 장치 간의 통신을 관리합니다. 프레임은 물리 계층을 통해 실제 전송 매체로 전달되어 수신 측으로 전송됩니다.
트랜스포트 계층 서비스 (application으로부터 정보 받아온 다음, 트랜스포트에서 밑의 과정 실행하고, network/application으로 넘겨줌.)

port number : 어느 application process에서 왔는지, 최종 목적지가 어디인지에 대한 정보를 갖고 있다.


다중화 : client application process들을 transport에서 port번호를 부여해서, 네트워크 계층으로 보내는 것 (여러개 가 input되고, network계층으로 하나가 나가니, 다중화라 한다.)
정리하자면, application process는 port번호를 사용해서 구분해준다. 그 port번호를 사용해서, application process 구분해서, 각각을 전달해주는 역할을 하는 계층이 transport이고, 이를 다중화라 하고, 반대를 역다중화라고 한다.
IP주소 + PORT 번호 주어지면, 인터넷 통신의 모든 application process를 구분할 수 있다.
IP주소 : NIC(network interface card)의 종류를 구분하기 위한 것
흐름) 송신 측:
애플리케이션 계층: 데이터 생성 →
전송 계층: 세그멘테이션, 다중화 →
네트워크 계층: IP 패킷화 →
데이터 링크 계층: 프레임화 →
물리 계층: 비트 전송
수신 측:
물리 계층: 비트 수신 →
데이터 링크 계층: 프레임 재구성 →
네트워크 계층: 패킷 추출 →
전송 계층: 세그먼트 재조립, 역다중화 →
추가 설명!
애플리케이션 프로세스 간의 통신
애플리케이션 계층에서 실행되는 두 개의 애플리케이션 프로세스가 서로 통신할 때, 전송 계층이 이 통신을 지원하고 관리합니다. 이 과정은 다음과 같이 이루어집니다:
1. 애플리케이션 프로세스의 데이터 생성:
예를 들어, 웹 브라우저(클라이언트)가 웹 서버에 HTTP 요청을 보냅니다.
3. 애플리케이션 계층 → 전송 계층:
클라이언트의 웹 브라우저는 HTTP 프로토콜을 사용하여 데이터를 생성하고, 전송 계층으로 전달합니다. 이때 소켓 API를 통해 TCP 또는 UDP를 선택하여 데이터를 전송합니다. 대부분의 웹 통신은 TCP를 사용합니다.
3. 전송 계층 → 네트워크 계층:
전송 계층은 데이터를 TCP 세그먼트로 분할하고, 네트워크 계층(IP)을 통해 패킷으로 캡슐화하여 전송합니다.
4. 네트워크 계층 → 데이터 링크 계층 → 물리 계층:
패킷은 데이터 링크 계층과 물리 계층을 통해 실제 네트워크 매체(케이블, 무선 등)를 통해 전송됩니다.
5. 수신 측에서의 역과정:
서버 측의 물리 계층에서 패킷을 수신하고, 데이터 링크 계층과 네트워크 계층을 거쳐 전송 계층으로 전달됩니다.
6. 전송 계층은 TCP 세그먼트를 재조립하고, 애플리케이션 계층으로 데이터를 전달합니다.
7. 애플리케이션 계층에서 데이터 처리:
서버의 애플리케이션 프로세스(웹 서버)는 수신한 HTTP 요청을 처리하고, 응답을 생성하여 다시 전송합니다.

segment에 port number 붙인 것이 datagram의 data 부분에 encapuslation되어 전달됨.


UDP 예시 (DNS 요청)
클라이언트:
임시 출발지 포트 번호(예: 50000번)를 사용하여 DNS 서버의 포트 번호 53번으로 요청을 보냅니다.
DNS 서버:
목적지 포트 번호 53번으로 수신된 요청을 처리하고, 응답을 보낼 때 클라이언트의 출발지 포트 번호 50000번을 목적지 포트로 사용합니다.
소켓 식별:
서버는 (서버 IP, 포트 53번) 소켓으로 요청을 수신합니다.
TCP 예시 (웹 브라우징)
클라이언트:
임시 출발지 포트 번호(예: 50000번)를 사용하여 웹 서버의 포트 번호 80번으로 연결을 요청합니다.
웹 서버:
출발지 IP와 포트 번호를 확인하여 해당 클라이언트와의 연결을 생성합니다.
소켓 식별:
서버는 각 클라이언트와의 연결을 (클라이언트 IP, 클라이언트 포트, 서버 IP, 포트 80번)으로 식별합니다.
따라서 여러 클라이언트가 동시에 서버의 포트 80번에 연결하더라도 각 연결을 구분할 수 있습니다.