빠직2
131
2020-02-26 16:36:46
3
645

쌩초보 네트워크 관련해서 질문이 있는데용....


파이썬 입문한지 1달 좀 된 사람인데요.

회사에서 tcp_ip프로토콜 문서 보게 됏는데.

이해가 아예 하나도 안되서 인터넷에서 이것저것 찾아봤어요.

그래도 이해 안되는게 많아서 그러는데 알려주시면 감사하겠습니다.

어디 물어볼 데도 없고 답답해죽겟습니다


1. 프로토콜

디바이스에서 TCP/IP 통신에 사용 프로토콜을 정리하여 고객이 TCP/IP 서버를 구현하는데 필요한 프로토콜 내용을 디바이스 중심으로 정리한 문서


라고 되잇는데.

가령 라즈베리파이에 센서 달아서 측정한 값을 와이파로 제 컴퓨터(서버)에다가 채팅프로그램형식으로 데이터를 계속 쏴요.

온도는 몇도, 습도는 몇, 날짜는 ㅡ. 이런식으로 형식을 정해서 보낸다할때

이 형식이 프로토콜 맞나요???


사람들이 엄~~청 많이쓰는 인터넷프로토콜도 있는거고

그냥 사용자1 서버1있는 프로토콜도 있는거 맞나요??



2. 


TCP로 데이터를 보낼 때 이런 형식으로 보낸다고 하는데요.

제가 블로그에 돌아다니는 파이썬 소켓채팅프로그램을 복붙해서 라즈베리파이로 Client와 내컴퓨터로 Server를 구축을 해요. 라즈베리파이에서 센서로 측정한 값을 3초에 한번씩 한줄로 보낼때

그 한 줄에 저 그림내용이 들어가는건가요?

실제 채팅창에서 보이는 글자는 저기서 '데이터'영역에 들어가나요?


3. 프로토콜 문서에 이런 그림이 있는데요.

라즈베리파이(device)에서 측정데이터 업로드 올리는게 

채팅프로그램에서 한줄씩 보내는거 같은데. 맞나요???


문서에 또 이런 내용도 있는데요 



서버가 control order하는 단계에서 저런 내용을 보낸다는 거 같은데.

이것도 라즈베리파이가 서버에 센서값을 보내는 것처럼

그 방식으로 저 2가지 정보를 채팅처럼 전달하는건가요???


그니까 저 ~~위쪽 위에 그림에서 IP헤더 TCP헤더  데이터 FCS이거 있는 그림 기준으로

'데이터'영역에 저 2가지 정보가 들어가는 건가요???


 파이썬 소켓통신프로그램 하다보면 저기서 '데이터'부분에 들어가는 거만 화면에 나오고 다루는 거 같았는데  프로토콜 문서에 나오는 많은 내용들이 저 '데이터'부분에 들어가는 걸 다루는건가요???


4. 위에 그림 보면 0x56 0x75막 이런 헥사값??이 있는데.

   프로토콜 문서에서  굳이 이걸쓰는 이유가 무엇인가요?

  버전이 2.3이면 걍 2.3이라고 보내면되지 ox56 0x75이런식으로 하는 이유가 뭔가요?

  파이썬 메세지 보낼때보면 decode encode를 자동으로 utf-8방식으로 보내는거 같앗는데

  그 utf-8로 인코딩하고나면 2.3이라는 글자가 0x56이런식으로 바껴서 통신으로 보내진다 이런거 맞나요??

  이런내용같았는데 굳이 프로토콜 문서에서 0x56이런식으로 쓰는 이유가 궁금합니다.




파이썬으로 소캣프로그램만들어라 하믄 걍 따라해서 하겟는데

프로토콜 문서는 봐도봐도 먼소린지 몰겟습니다.


둘 중 하나같은데..

뭐 하나만 뚫리면 걍 아무것도 아닌 쉬운 내용들이거나

아예 내가 손도대면 안되는 내용들이거나.



인터넷에서 이것저것 읽어보고 책도 보고 했는데

명쾌하게 정리가 잘 안되서 물어봅니다..


0
0
  • 댓글 3

  • 빠직2
    131
    2020-02-26 16:38:25

    또 중간에 checksum이라고 되있는게...찾아보니까 tcp헤더부분에 있는 암호화같은거던데.  이런것도 코딩으로 구현해서 보내야 하나요??아니면 파이썬 소켓 자체에서 이미 구현이 되있는건가요???


    파이썬 소켓 자체에 구현이 되있는거라면 프로토콜 문서에 저게 왜 들어가있는건가요?

    0
  • spyrogira256
    377
    2020-02-26 17:20:28

    프로토콜은 전송규약입니다.

    난 너한테 문자를 보낼때 AAA:ccc 이렇게 보낼껀데 앞에 3자리는 이름이고 나머지 3 자리는 데이터야.

    이걸 규정으로 정한게 프로토콜 입니다


    Checksum은 이런 비트 기반 데이터 중에서 

    11110 이라고 보냈을때 체크섬도 같이 보내서

    체크섬으로 체크를 해보면 이가 빠졌나 확인할 수 있게 해주는 데이터 입니다.


    모든 네트워크는 이런 기반으로 돌아갑니다.


    이런 부분은 네트워크 기초책을 먼저 읽어 보시길 바랍니다. Osi 7계층


    Tcp도 이런 규칙의 프로토콜입니다. 

    보통 네트워크 프로그래밍이라도 하면 Tcp/ip기반 프로그래밍을 주로 얘기합니다.


    1
  • birewall
    423
    2020-02-26 17:37:34

    1. 네. 말씀하신 경우에는 서버-클라이언트간의 메시징 프로토콜로 볼 수 있습니다.


    2. 맞습니다. 만약 보내고자하는 텍스트가 MTU보다 커지면 텍스트를 쪼개보낸 후 클라이언트에서 재조립합니다.


    3. 맞습니다.

    일반적으로 TCP/IP같은 프로토콜은 OS 내부의 디바이스 드라이버가 담당하여 처리합니다.

    유저가 단순히 파이썬같은 프로그램으로 텍스트를 전송하면 이 디바이스 드라이버가 헤더를 씌워 보내줍니다.

    반면 직접 만드는 서비스 프로토콜의 경우 직접 프로토콜 스펙에 있는대로 텍스트를 파싱해야 합니다.


    4. 편리성과 효율성 측면에서 헥사를 사용합니다.

    예를들어 2.3은 float기 때문에 4바이트를 사용하는 반면, 0x56 0x75는 총 2바이트기 때문에 훨씬 효율적입니다.


    5. checksum은 데이터의 무결성을 확보하기 위한 장치입니다.

    어떤 checksum을 사용했는지는 스펙에 따라 다릅니다. (보통 CRC를 씁니다.)

    하지만 tcp를 말씀하시는거라면 디바이스 드라이버에서 알아서 해주므로 신경 안쓰셔도 됩니다.


    아직 관련 개념정리가 더 필요하신 듯 합니다.

    그리고 굳이 프로토콜이 아니더라도 비슷한 예시는 많습니다.

    예를들어 이미지 파일(bmp, jpg 등)같은 경우에도 헤더파일과 데이터파일로 구분됩니다.

    만약 이미지 파일을 변경하는 프로그램을 만들고싶다면 이미지 파일의 헤더파일을 파싱하는 모듈을 만드셔야 합니다.

    jpg 파일포맷을 찾아보셔도 말씀하신것과 비슷한 내용을 보시게 될겁니다.

    1
  • 로그인을 하시면 댓글을 등록할 수 있습니다.