목표
클라이언트/서버, 소켓 통신에 대하여 배운다.
소켓
:전송계층과 세션계층을 연결해주는 인터넷 인터페이스
라고 할 수 있음.
전송계층
- 패킷의 단위를 전송할 때마다 마치 우편물 봉투를 만들어서 보내는 사람, 받는 사람 주소를 쓰듯이 보내는 사람의 주소 ip address와 받는 사람의 주소 ip address와 port번호를 모두 적어서 보내는 역할을 한다.
- 그런데 응용 layer에 매번 뭐 보낼때마다 적는건 불편함
간단히 알고가는 전송 계층
응용계층을 deep하게 알기 위해선 전송 계층을 짧게 알고 가야함.
인터넷 전송계층의 서비스
TCP
1) 연결기반 전송계층
:우선 두개의 프로세스들을 연결해놓고 난 다음 통신을 한다
2) process1이 process2한테 보내기 위해 이 소켓을 통해서 일종의 파이프로 데이터가 전송
연결을 함으로서 관리
를 하겠다는 뜻.
- 데이터 유실 복구
3) 데이터 순서 보장
4)혼잡에 민감한 패킷 전송률 조정
UDP
1) 무연결 전송계층
: 연결을 만들어놓지 않고, 매 패킷마다 받는 사람의 주소를 써줘야 한다.
- 두 프로세스간 소켓은 연다.
어처피 주소를 매전 지정해야 하는데 왜 UDP에서 소켓을 사용해야 하는가?
2) 데이터 유실 가능
3) 데이터 순서 역전 가능
4)최대한의 성능으로 패킷 전송세션 계층
FTP(File Transfer Protocl)
- 목적
: 원격 host에 있는 file을 가져오거나, 원격 host의 file을 보내기 위한 protocol
- 어떻게 사람간 소통을 쉽게 할 것인가? => 이메일 프로토콜
: 우편시스템을 그대로 복사한 시스템
- 메일 서버, 컴퓨터는 client 복잡한 프로토콜임.
- 어떻게 자료를 잘 전송할 것인가? => FTP
- 가정
- client 사용자는 server의 파일을 읽을 수 있는 권한 계정이 있다.
ex) 유정은 네이버 계정이 있음.
- 계정이 없는 경우도 접근 가능하도록 설정 가능하다.
ex) 모두에게 공유하고 싶은 경우. 파일에 따라 권한제한을 할 수도 있음.
- 특징
- 세션 로그인과 종료가 존재
- 로그인 한 뒤 원하는 작업(host에게 파일 보내거나 받는 일)을 하고 나서 종료를 명시해줘야 함.
- 로그인을 통해서 파일 접근 권한 획득
- 로그인 정보를 서버가 관리
Stateful Protocol
: 사용자가 로그인을 했다, 안했다, 어떤 파일을 보고있고, 전송하고 있다 등 작업의 상태를 서버가 하나하나 보고 있고, 관리함.
- 단점: 서버가 상태를 다 관리하는 것은 안좋음. 사용자가 또 뭐 기능 요구할 때마다 또 서버가 다~ 관리해야함. 요즘은 그래서 serverless protocol을 사용함. 그러면 사용자의 상태관리는 누가? HTTP 프로토콜이 하는가? NOPE ! 이제 세션 계층이 아닌, 응용계층에서 해준다 ~~ 즉, 사용자의 상태관리를 세션계층에서 하는 프로토콜은
FTP protocol
이라 할 수 있음. 응용계층에서 관리하는 프로토콜은 HTTP 프로토콜
이 해준다.
HTTP는 세션계층이 굉장히 얇다. 세션계층은 그냥 줄게 ~ 나 줘 ~ 이런 단순한 작업을 할 뿐이고, 사용자가 어떤 권한이 있고, 어떻게 로그인을 했는지, 이런 정보는 응용계층이 한다. 응용계층은 웹사이트 개발자가 관리하기 때문에 확장이 커질 수 있다. 그래서 사이트가 변화무쌍해질 수 있음. 이런 내용을 세션 계층에 넣어두면 어떤 기능을 추가해야 할 때마다 세션 프로토콜 자체를 바꿔야 하는데, 세션 Layer는 많은 사람들이 사용하기 때문에 바꾸기 쉽지 않음. 확장이 잘안돼. 그래서 세션 layer를 얇게 하는 HTTP적 접근을 선호한다 이그야 ~