

클라이언트에서 서버로 요청을 보낼 때 필요한 data만 전송하는게 아닌, 각각의 layer에서 header 및 기타 정보를 추가하여 서버로 요청한다.

payload : 프로토콜을 통해 송/수신되는 실제 데이터
payload는 각 레이어마다 상대적인 개념이다. 상위 레이어에서 내려온 데이터 전부를 payload라 부른다.

application layer에서 내려온 application layer header + data 위에 transport layer header를 추가한다. application layer header + data를 transport layer에서는 payload라고 부른다. 즉, payload는 각 layer마다 상대적인 개념이다.
TCP의 경우 TCP segment라 부르고, UDP의 경우 UDP datagram이라 부른다.

transport layer에서 추가하는 header에는 출발지 port와 도착지 port가 포함되어있다.

internet layer에서는 실질적으로 호스트간 데이터 통신을 담당한다. 여러 라우터를 이용하여 출발지 도착지의 최적의 경로를 찾아 송수신을 담당한다.
internet layer에서 header를 추가하면 (IP)datagram, (IP)packet이라 부른다.
internet layer에서 추가한 header에는 출발지 IP 주소와 도착지 IP 주소가 포함되어있다. 호스트에서 호스트로 데이터를 전송하는 역할.
Datagram의 종류 : UDP datagram, IP datagram

TCP인지 UDP인지 정보를 추가하는 layer는 internet layer이다.

link layer에서는 header와 trailer가 추가된다.
link layer에서는 두 호스트 사이에서 데이터를 주고 받는 역할.
기존 payload + link layer의 header와 trailer가 붙으면 frame이라 부른다.
link layer는 라우터에 frame을 전송하고, 라우터는 인터넷 레이어 헤더의 도착지 IP 주소와 도착지 IP주소 정보를 확인하고 라우터 테이블을 확인해 도착지 호스트 전송시켜준다.

각 layer에 맞는 header 데이터를 확인하면서 제거시키고 상위 layer로 정보를 전달한다.
internet layer에서 추가한 IP 주소 및 프로토콜은 frame에서 제거하지만 정보들은 따로 저장해놓는다.

transport layer에서 특정 socket을 통해 애플리케이션에 데이터를 정보를 전달해 주어야하는데 헤더에 담긴 port를 확인하고 socket을 식별한다.

UDP의 socket은 고유하기 때문에 도착지 port만 확인하고 socket을 식별한다.

이미 connection은 맺은 호스트의 요청인지 새로운 connection을 맺어야하는 호스트인지 확인한다.
syn 플래그 값이 1이면 connection이 없는 호스트의 요청이라 여겨 listening socket으로 데이터를 넘겨주고, 새로운 소켓을 생성하고 커넥션을 연결한다.

이미 connection이 연결되어있는 호스트라면 클라이언트IP:port, 서버IP:port를 확인하여 해당값들을 이용해 socket을 특정하고 해당 socket으로 데이터를 넘겨준다.


transport layer의 주된 역할 : Demultiplexing, Multiplexing
application layer 와 transport layer에서 socket을 통해 데이터를 송/수신 하는 과정


application layer에서 순수 data만 남아서 애플리케이션에서 사용한다.

Pakcet은 IP Packet을 뜻 할수도 있고, 범용적인 개념으로 사용될 수도 있다.
Datagram의 경우 UDP datagram 인지 IP datagram인지 잘 구분해야한다. UDP와 IP는 큰 차이가 없기 때문에 이렇게 불려지는거 같다. 두 프로토콜은 신뢰성이 낮으며 순서 보장과 데이터 전송을 보장하지 않는다. IP 프로토콜에 port정도만 추가된 프로토콜
