파일 전송 프로그램을 짜는 과제를 하는중 입니다

궁금한 점에 관해서 일단 제가 이해하고 있는데로 쓸게요

---------------------------------------------
프로토콜 : 통신을 위해 정한 규칙, 약속
(다른 경우에 대해선 모르겠고)
서버와 클라이언트간에 패킷(데이터)을 주고 받을 때, 호스트(단말기 - 사용자가 직접 사용하는 하드웨어 - 컴퓨터 등)의 메모리를 
정해진 크기만큼 보낸다(바이트 단위로 이루어져있다).
10바이트를 보냈다고 치면, 이게 char형 변수 10개 인지 int형 변수2개와 char형 2개인지 받은 입장에서 모르니까 데이터를 어떻게 해석해서 받아들여야하는지를 모른다.
그래서 필요한게 프로토콜. 전달 받은 바이트 크기를 정해진 규칙대로 잘라서 받아들인다. 이 규칙을 프로토콜이라고 한다.

패킷 : 통신을 할 때 주고 받는 것. 데이터가 있는 메모리를 복사하고 거기에 헤더를 더해서 이루어진다. 곧 패킷 = 헤더 + 데이터

헤더 : 데이터에 관한 정보를 저장해 놓은 것. 받은 입장에서 헤더를 보고 데이터를 분석 할 수 있게 하는 역할. 프로토콜로 정해진 규칙대로 만들어진다.

그러니까 통신을 할 때 데이터를 주고 받는데, 받는 입장에서 이 데이터가 어떤 것인지 알 수가 없어서 데이터에 대한 정보를 알려주는 헤더라는걸 붙여야 되고, 이 헤더는 서버와 클라이언트 간에 약속한 규칙대로 이루어져 있으니, 그 규칙에 맞게 분석해서 데이터를 확인한다. 라고 생각합니다.
----------------------------------------------

과제에 대해서 설명하자면

클라이언트는 서버에 요청할 수 있는건 파일 목록 // 파일 전송 이다.
파일 목록을 전송 할 때는 파일 이름과 크기를 알려준다.
파일 전송은 선택한 파일을 보낸다.

이고, 강사님이 하신 말씀은

TCP/IP를 쓴다.
TCP는 너희가 뭘 어떻게 하는게 아니다. 그냥 API 쓰면 된다.
그런데, 서버와 클라이언트 간에 프로토콜이 필요하다.
서버가 보내는게 파일 목록인지, 파일을 잘라서 전송하는 중인지 알아야 하기 때문.
그러니 너희가 프로토콜을 만들어서 해야한다.
FTP서버를 만드는 것이 아니다.
프로토콜은 구조체나 클래스로 만들면 된다.

입니다.

-------------------------------------------

질문

1. 위에 제가 이해하고 있는 내용이 맞는지
2. TCP에서 말하는 세번 악수 기법이 bind, listen, accept api를 활용해서 이루어지는 것을 말하는 건지, 그러니까 api 가져다 쓰면 그걸로 된건지,
3. TCP는 전송계층에서 표준화?된 프로토콜이라고 알고있는데, TCP로 통신하는 프로그램이라고 만든다는 것이 api를 쓰는걸로 알아서 되는 것인지, 
4. 코딩할 때 만들라는 사용자 정의 프로토콜은 어느 계층인건지,
5. 파일 전송 과정이 서버가 open -> read -> 소켓에 write -> 클라이언트가 소켓에서 read 하던데, 텍스트파일, 그림파일, 동영상파일 모두 똑같이 적용되는지, 적용된다면 read할 때 버퍼의 자료형을 뭘로 해야하는지,
6. 구조체나 클래스로 만든 프로토콜은 헤더를 말하는게 아닌지, 직접 코딩하는 건 헤더에 대한 내용이고 프로토콜은 나타나진 않지만 패킷을 받고 헤더를 분석하는 과정에서 정한 프로토콜 대로 하면 되는것이 아닌지(헤더 맨 앞 1바이트가 파일 목록 전송인지, 내용 전송인지 나타낸다고 치면 조건문을 통해 1바이트의 내용을 a냐 b냐 비교해서 a이면 이 데이터는 파일 목록에 관한것이다. 라고 클라이언트에서 코딩하면 되는지)

입니다.

-------------------------------------------
책을 읽어봤지만 수업 내용 이상으로 받아들이질 못하겠고, 파일 전송 프로그램 예제를 보면 프로토콜에 관한건 없고 그저 파일입출력 하듯이 read, write 할 뿐이고, 구글링을 해도 프로토콜 이란 단어 때문인지 TCP / UDP에 대해서만 나오고......
글이 많이 길지만 그만큼 이해하고 있는것, 궁금한 것을 확실히 보여드리고 싶었습니다
도와주세요 ㅠㅠ