Socket Basics
- Protocol은 peer-to-peer Protocol
- 상대방에 대한 정보들을 담아서 보내야한다.
Network Application Programming

Application Layer
- 네트워크를 향한 인터페이스
- 데이터 네트워크로 전송될 변환 수단
Application programs
- run on (different) end systems(computer, phone etc)
- 하지만 network-core devices를 위한 software를 적을 필요없다.
Why "no need to write application programs for network core devices" ?

- (peer-to-peer) protocol: 중앙 서버를 거치지 않고 device끼리 직접 통신하는 방식
-> 네트워크 코어 장치에 대해 애플리케이션 프로그램을 작성할 필요가 없다.
- 네트워크 코어 장치들(라우터, 스위치, 리피터)은 하위 계층만을 처리하기 때문
- 애플리케이션 계층 프로토콜은 오직 양 끝의 호스트 간에만 존재함
Process, API, and sockek

1. 프로세스: 호스트 내에서 '실행되는' 프로그램을 의미한다
2. API: 프로세스와 운영체제 사이의 어플리케이션 프로그래밍 인터페이스이다.
3. 소켓(Socket): 프로세스와 네트워크 프로토콜 사이의 네트워크 프로그래밍 인터페이스이다.
Application, OS, Device and Socket

1. 사용자 공간(User Space)
- 최상위 계층, 사용자의 애플리케이션이 여기에서 실행된다.
2. API 계층
- libpcap(Unix/Linux용) 또는 winpcap(Windows용) 라이브러리를 사용하는 '소켓 인터페이스'가 위치한다.
- 애플리케이션과 커널 공간 사이의 인터페이스 역할을 한다.
3. 커널 공간 (Kernel Space)
- 운영 체제(Windows, Unix/Linux)와 TCP/IP 프로토콜 스택이 포함
- TCP/IP 프로토콜 스택: TCP/IP를 중심으로 한 네트워크 프로토콜들의 집합. 데이터가 어떻게 패키징되고, 주소가 지정되고, 전송되고, 라우팅되고, 수신되는지를 정의한다.
- 애플리케이션이 소켓 API를 통해 TCP/IP 스택과 상호작용한다.
- 운영체제는 이 요청을 받아 적절한 프로토콜 레이어로 전달한다.
- 데이터는 애플리케이션 계층에서 시작해 각 계층(전송, 네트워크, 데이터링크)을 거쳐 처리됨
- 수신측에서는 역순으로 데이터를 처리하여 최종적으로 애플리케이션에 전달.
- 네트워크 통신의 핵심기능 처리
4. 드라이버 계층:
- 네트워크 디바이스 드라이버가 위치한다.
- 운영체제와 하드웨어 사이의 통신을 관리한다.
5. 하드웨어 계층
- 실제 물리적 네트워크 인터페이스 카드(NIC)가 여기에 해당한다.
Socket Descriptor
descriptor

1. descriptor:
- 추상적인 지시자(abstract indicator)이다.
- 파일이나 다른 I/O 리소스(ex: 파이프, 네트워크 소켓 등)에 접근하는데 사용된다.
- 특정 애플리케이션 프로그램 내에서만 유효
- descriptor table
- 값과 포인터로 구성된다.
- 0~2는 이미 존재(stdin stdout stderr) , 3부터는 동적으로 할당된다.
자세한 것은 따로 file descriptor 개념으로 알아보도록 하자.
how to operate descriptor

1. 어플리케이션 계층
- 각각의 appl 1, appl 2는 어플리케이션 프로세스를 의미한다.
- 각 프로세스는 파일 디스크립터 넘버(fd),소켓 디스크립터 넘버(sd)를 가지고 있다.
2. 소켓 계층:
- 애플리케이션과 전송 계층 사이의 인터페이스 역할을 한다.
3. 포트번호:
Socket의 Encapsulation Process

- socket() 함수를 사용하게 되면 sk_buff 구조의 형태가 생성된다.
- bind() -> socket descriptor를 필요한 곳에 바인딩하여 메모리에 저장 후 사용
Encapsulation Memory Copy Issue

- 버퍼를 사용하지 않으면 메모리를 복사하는 과정을 계속해서 거쳐야한다.
- CPU가 메인메모리에 접근하는 시간이 너무 오래걸리기 때문에 위와 같은 방법을 사용한다.
찾아봐야하는 것.
- SDU : 23쪽 upper layer SDU
- SDU란? : 한 계층에서 상위 계층으로부터 받은 순수한 데이터를 의미한다.
즉, 애플리케이션 계층에서 받은 데이터(순수 데이터).