애플리케이션 계층1

ChoiYongHyeun·2023년 11월 20일
0

네트워크

목록 보기
3/10
post-thumbnail
post-custom-banner

소켓

웹앱이 되었건 어떤 어플리케이션이 되었건 결국 하나의 OS 이며 네트워크 기능이 있기 때문에 서버와 통신하며 데이터를 주고 받는다.

애플리케이션의 프로세스는 네트워크 기능이 있는 웹앱 프로세스네트워크 기능이 있는 서버 프로세스 의 통신이다.

우리가 어떤 웹앱을 사용 할 때 우리는 웹앱의 구조가 어떻게 되었는지 전혀 몰라도 웹앱 을 사용하는데 무리가 없다.

ICP , 인터페이스 , API 가 뭔데 ?

OSIPC 하기 위해서는 인터페이스 가 필요하다.

IPC : Inter process Communication 으로 프로세스 간에 데이터를 주고 받는 메커니즘을 이야기 한다. 예를 들어 모니터에서 컴퓨터가 보고 있는 내용을 디스플레이 하는 경우를 가정하자.
컴퓨터 본체와 모니터는 서로 다른 기기이기 때문에 이들간 ICP가 필요하다. 컴퓨터의 내용을 모니터에 보내버려야 하기 때문이다.
이 때 컴퓨터 본체의 내용을 모니터로 보내주는 어떤 인터페이스 를 이용해 다른 기기인 컴퓨터와 모니터가 상호작용 한다.
컴퓨터와 모니터의 인터페이스는 HDMI 선이 될 것이다.
즉 인터페이스는 IPC 를 하기 위한 매개체이며 ICP 는 인터페이스를 통해 진행된다.

또한 IPC 에는 정해진 규칙이 필요할 것이다. 이런 규칙과 메소드를 API 를 통해 정한다.

API : Application Programming Interface 의 약자로 프로그램 간에 상호작용 하기 위한 규약이나 인터페이스를 말한다. 그니까 ICP 를 가능하게 하는 규칙과 메소드의 집합
예를 들어서 컴퓨터에서 모니터로 데이터를 전송 하는 기능과 규칙이 있을 것이고 모니터의 해상도 를 설정하는 메소드도 있을 것이다.

결국 IPC 를 하기 위한 인터페이스 가 바로 API 이다.

웹앱서버 또한 OS 이기 때문에 이들이 통신을 하기 위해선IPC 를 한단 것이고 IPC 를 하기 위한 매개체인 API 가 필요하다.

이러한 역할을 하는 것이 바로 소켓 이다.

이전 강의에서 말 했듯이 네트워크 레이어 최상단에 위치한 애플리케이션 레이어 는 하위 계층 레이어의 기능들을 이용한다고 하였다.

애플리케이션 레이어 의 하위 계층인 트랜스포트 레이어 의 기능을 이용해 서버IPC 한다.

트랜스포트 레이어TCPUDP 를 사용한다.

내가 애플리케이션 레이어 에서 TCP 를 사용할거면 TCP 소켓 을 사용하면 되고 UDP 를 사용할거면 UDP 소켓 을 사용하면 된다 .

정리 : 소켓 의 종류는 TCP 소켓 , UDP 소켓 이 존재한다.
TCP 소켓소켓 스트림 , UDP 소켓소켓 데이터그램 이라고 불린다.

지피티한테 오구오구 받으며 강의를 이해하고 있다 ..

소켓 API

서버측에서 클라이언트한테 요청을 받기 전까지의 프로토콜

서버 측에서는 우선 socket() 을 연다.

이후 열려있는 소켓bind() 한다. HTTP 포트를 사용한다면 80bind 할 것이다.

그리고 요청을 받을 준비를 하기 위해 listen() 을 실행하고

요청을 받을 준비가 되었다면 accept() 를 실행하여 클라이언트의 요청을 기다린다.

이후 클라이언트한테 요청을 받기 전까지 blocking 이 된다.

서버는 항상 수동적이다.

클라이언트가 서버한테 요청을 보내는 프로토콜

클라이언트 도 맨 처음 socket() 으로 소켓을 열어주고

connect() 를 이용해 서버소켓연결한다.

이렇게 되면 현재 클라이언트서버 는 단단하게 연결 되어 있다.

이 둘은 서로 단단하게 연결 되어 있기 때문에 온 세상에 다양한 클라이언트가 많지만 연결 된 소켓 을 찾을 수 있는 이유이다.

관계를 맺고 나면 서로 데이터를 보내고, 받고 하는 것이며 연결이 끝나면 close() 로 연결을 끊는다.

자세히 공부해보자

create

3가지 파라미터가 사용되는데 이 때 type 에 사용되는 파라미터가 중요하다.

type 에 들어가는 것은 TCP 를 사용할지 UDP 를 사용할지를 정해준다.

create 는 해당 매개변수들을 가지고 있는 소켓의 idreturn 한다.

해당 id 를 가지고 만든 소켓 을 지칭한다.

bind

우리가 방금 만든 소켓특정 포트bind 하겠다.

listen

방금 만든 소켓listen 하는 용도로 사용 할 것이며 만약 요청이 여러개 들어오면 최대 몇 개까지 들을 것이다를 지정한다.

accept

우리는 연결 받을 준비를 끝냈으니 기다리겠다.

sockaddr 파라미터에 클라이언트의 주소포트넘버 를 받은 후 연결을 기다린다.

정리

서버측에서 소켓을 만들고, 포트에 바인드하고 , 들을 준비를 하고, 연결 받을 준비를 한다. 연결 받을 준비를 할 때 연결 될 클라이언트의 주소포트넘버 를 매개변수로 받는다.

클라이언트측에서도 통신하기 위해 소켓을 만들고 서버 와 연결한다. 이 때 연결 할 때에는 서버 측 소켓주소포트넘버 를 매개변수로 받은 후 연결한다.

왜 클라이언트에는 바인드가 없나요 ?

바인드는 특정 포트와 바인드하는 개념인데 클라이언트는 특정 포트에 바인드 할 필요가 없다. 그냥 남아도는 포트에 바인드하면 된다. 뭐 1000번 포트에 쓰든 2000번 포트에 쓰든 상관 없다.
하지만 서버측은 어떤 포트를 사용할지 정해뒀기 때문에 포트에 바인드해줘야한다.

이후 C언어를 통한 이해가 있었으나 나는 C언어를 배워본적 없으니 흐름만 대충 슥슥 삭삭
교수님이 실제 프로젝트랑 서적이나 인터넷 뒤져보라고 한다 .. 강의 이후 추가공부를 꼭 하자 ..

강의 듣다가 처음 알은 내용

예전에 파이썬 을 공부할 때 쥬피터 노트북을 이용한 적 있다.

이 때 웹 브라우저 형태에서 ipython을 이용했었는데 이 때 뜨는 주소창인

localhost:8888 이 뭔 뜻인가 했더니 내 현재 IP : 포트넘버 였다.

오마이가아아아앗

Multiplexing , demultiplexing


컴퓨터 내부에 프로세스들이 많이 존재한다. 프로세스 별로 소켓이 여러개 있을 텐데 여러 소켓에서 내려오는 트랜스포트 레이어 에서 세그멘테이션 한 후에 더 하위 계층 레이어 로 내려서 전송 할 것이다.

이렇게 여러 개의 프로세스와 여러 개의 소켓 에서 내려오는 다양한 데이터를을 한 번에 묶어서 세그멘테이션 시키는 것을 멀티플렉싱 이라고 한다.

멀티 플렉싱 : 여러 신호를 하나의 통로를 통해 전송하고, 다시 여러 신호로 분리하는 기술
다양한 프로세스 또는 소켓에서 내려오는 데이터를 한 번에 묶어서 전송하는 것은 일종의 멀티플렉싱이다.

sender 가 여러 개의 프로세스에서 멀티플렉싱 하여 하나의 세그멘테이션 으로 receiver 한테 하나의 세그멘테이션 을 보냈다고 해보자

그럼 receiver 는 또 한 덩어리의 세그멘테이션 을 적절한 프로세스 에게 쪼개서 보내야 할 것이다.

이렇게 한 덩어리의 신호를 여러 신호로 나눠 적절한 프로세스로 보내는 것이 디멀티플렉싱

어떻게 멀티플렉싱 하고 디멀티플렉싱 할건데 ?

데이터들이 packet 안에 dataheader 가 존재함

손이 가리키고 있는 곳이 header 부분

  • segmentdataheader 로 이뤄짐
  • header 안에 source port , dest port 필드가 존재한다.
    - 저 두 필드안의 내용을 가지고 디멀티플렉싱 한다.

UDP 경우의 멀티플렉싱

포트별로 통신 하기 위해서 소켓 을 열고 포트넘버 를 적는다.

포트에 보낼 때 source port (자기 자신의 포트 넘버) , dest port (목적지 포트 넘버)header 에 작성한 채로 데이터를 보낸다.

정리 : UDP 소켓 의 경우 멀티플렉싱 , 디멀티플렉싱 은 어떻게 일어나냐면 source port , dest port 만을 사용해서 어떤 소켓 으로 올릴지 디멀티플렉싱 을 하게 된다.

TCP 경우의 디멀티플렉싱

포트에 보낼 때는 source IP , source port , dest IP , dest port 를 이용해서 어떤 port 로 갈지 결정한다.

그 중에 하나라도 틀리면 다른 port 로 보낸다.

이것이 TCP 에서 말하는 Connection oriented 이다.

TCPsender주소 , reciever주소 까지 고려해서 신호를 보내기 때문에 다른 포트로 유실 없이 신호가 통하는 것이 가능하다.

정리

  • UDP포트 넘버 만 가지고 멀티 플렉싱 하기 때문에 어떤 데이터든 오면 받고 보내버림

  • TCP포트 넘버 뿐이 아니라 포트 주소 까지 고려하여 데이터를 주고 받기 때문에 각각을 위한 고유의 포켓을 생성하고 연결 한다.

  • TCP connection 이란 클라이언트 만을 위한 소켓 을 생성하고 관리
    - Connection oriented 는 유지할 수 있으나 클라이언트 마다의 소켓 ㅇ을 생성하고 관리하기 때문에 자원이 많이 든다.

  • 애플레케이션 레이어 에서는 header 에 어떤 정보가 있는지까지는 잘 몰라도 되지만 TCP , UDPIP 에서는 header 에 어떤 정보가 있는지가 중요하다.

우편 배달부가 편지 봉투 안에 들은 내용 (data)을 보고 판단하나 ? 편지지 안에 들은 내용 (header) 을 보고 행동하지 ~!!

UDP의 세그먼트

UDP 세그먼트4개의 필드를 갖는다.

동작이 단순하겠구나 룰루랄라

필드 별 용량이 16비트 이기 때문에 포트 넘버0번 ~ 2^16 - 1 번까지 존재한다.

한 컴퓨터 내의 포트 넘버는 이론상 6만 몇개가 가능하다.

UDP 는 포트 넘버를 가지고 뭘 하는데
멀티플렉싱 , 디멀티플렉싱 을 한다.

  • checksum : 전송 도중에 에러가 있었는지 없었는지 확인하는 영역
    - 전송 도중에 에러가 있으면 올리지 않고 그냥 drop 해준다.
    • UDP 가 아무것도 안하고 데이터만 우다다 보내는 것만 같았지만 사실 두 가지 기능은 하는 것이다.
    1. 멀티플렉싱 , 디멀티플렉싱
    2. 에러체킹

전체 내용 정리

  1. 서로 다른 OSIPC(inter process comunication) 를 통해 신호를 주고 받음

  2. IPC 를 하기 위해서는 적절한 interpace 가 필요한데 그게 바로 API (Application Programming Interface)

  3. 클라이언트서버네트워크 기능을 가진 os 이기 때문에 이 둘이 통신을 한다는 것은 IPC 를 한다는 것

  4. 둘이 IPC 하기 위해있는 API 가 바로 소켓

  5. 소켓 은 두 가지 소켓 으로 구성 되어 있음
    5.1 애플리케이션 레이어 는 하위 레이어인 트랜스포트 레이어의 기능을 사용하는데 트랜스포트 레이어TCP / UDP 를 사용함
    5.2 그러니까 신호를 주고 받을 때 TCP 혹은 UDP 를 사용함
    5.3 위에서 말한 두 가지 소켓 의 두 가지 종류는 TCP 소켓 , UDP 소켓

  6. 소켓의 작동 방식
    6.1 서버 측에서 소켓 을 생성함
    6.2 생성한 소켓포트바인드
    6.3 응답을 받을 준비를 하기 위해 리슨
    6.4 응답 받을 준비가 완료 되었으며 어떤 클라이언트 한테 응답을 받을지를 설정하는 엑셉트
    6.5 클라이언트 측에서 소켓 을 생성함
    6.6 서버커넥트 (TCP Connection)
    6.7 이후 신호를 wirte , read 하며 통신
    6.8 연결이 끝나면 두 곳 모두 소켓close

  7. 멀티플렉싱디멀티플렉싱
    7.1 OS 에서 프로세스 는 엄청나게 많이 존재함
    7.2 sender 의 다양한 프로세스 들의 다양한 신호를 receiver 한테 보낼 때 하나의 packet 으로 만들어 receiver한테 전송 -> 멀티플렉싱
    7.2.1 그 packet 안에는 headerdata 영역이 존재함
    7.3 packetreceiver 한테 보냄
    7.4 recevier 는 한 덩어리의 packet 을 적절한 process 한테 보내야됨
    7.5 적절한 process 에게 보낼 때 packetheader 에 적힌 내용을 통해 적절한 process 한테 데이터를 보냄

  8. UDP 소켓디멀티플렉싱
    8.1 UDP 소켓은 packet 을 구성 할 때 headersource port (보내는 사람의 포트 넘버) , dest port (받는 사람의 포트 넘버) 를 이용해서 process디멀티플렉싱

  9. TCP 소켓디멀티플렉싱
    9.1 TCP 소켓source port , dest port 뿐이 아니라 source IP , dest IP 까지 고려하여 디멀티플렉싱 한다.
    9.2 그 말은 즉 한 명의 sender 의 IP 에 따라서 독립적인 TCP 소켓 을 생성하고 연결한다는 것이다. -> connection oriented : 연결 보장하지만 자원 소모

profile
빨리 가는 유일한 방법은 제대로 가는 것이다
post-custom-banner

0개의 댓글