본문 바로가기
  • 초부득3 - 어제보다 나은 내일을 위해
  • 꿈이 현실이 되는 날까지
sw사관학교 정글 2기/컴퓨터 시스템

네트워크 - Protocol, TCP/IP, OSI 계층, TCP, UDP, HTTP 등등

by 금의야행 2021. 9. 16.

 

 

중요 링크 및 출처들!

 

OSI 7계층부터, TCP/IP, TCP 와 UDP 의 연결 방식, HTTP/S 등등 네트워크 전반을 간결하고 명확하게 설명해준다

https://github.com/WeareSoft/tech-interview/blob/master/contents/network.md#osi-7%EA%B3%84%EC%B8%B5

 

TCP 프로토콜의 기능 및 특징 - 패킷 분할과 연결형 통신을 아주 명료하고 구체적으로 설명해준다!@

그리고 다른 내용도 엄청 많다! 강추강추!

https://better-together.tistory.com/140

 

 

목차

     

     

     

    통신 프로토콜이란

     

    우선 통신 프로토콜 ( communication protocol ) 이란

     

    어렵게는 

    • 시스템과 애플리케이션 프로그램에서 정보를 교환할 수 있도록 하는 메시지 형식 및 프로시저에 대한 규칙 세트입니다.

     

    쉽게는 

    • 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다.

     

    통신 프로토콜은 신호 체계, 인증, 그리고 오류 감지 및 수정 기능을 포함 할 수 있다. 

     

     

     

     

     

    네트워크 계층 추상화 OSI 7 layers , TCP/IP, TCP/IP Protocol Suite 

     

    개요

     

    계층화의 필요성은 각 프로토콜이 자신의 기능만을 충실히 수행하도록 하여 독립성을 보장하기 위함이다.

     

     

     국제표준화기구(ISO) 에서는 OSI (Open System Intercon-nection, OSI) 라는 모델을 개발해, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명하는 추상화를 제공한다.

     

    https://github.com/WeareSoft/tech-interview/blob/master/contents/network.md#osi-7%EA%B3%84%EC%B8%B5

     

    각 계층은 하위 계층의 기능만을 이용하고, 상위 계층에게 기능을 제공합니다.

     

     

    OSI 모델!

     

    와! 캡슐화 아시는구나!

     

    보이는 바와 같이 유저 (서버든 클라이언트든 호스트든) 가 DATA를 보내려고하는 경우 각 레이어를 거치며 헤더가 추가되어간다는 느낌으로 생각하면 좋다.

     

    이는 OSI 모델 뿐만 아니라 다른 계층 모델에서도 똑같이 적용된다

     

    데이터에 제어 정보를 덧붙이는 것을 캡슐화(Encapsulation)라 한다.

     

     

    4계층 기준

    구체적인 계층별 작업은 아래 링크를 참조! 
    https://velog.io/@inyong_pang/OSI-7-%EA%B3%84%EC%B8%B5%EA%B3%BC-TCPIP-%EA%B3%84%EC%B8%B5

     

    잠깐 소켓!

     

     

    첫번째 그림은 응용 프로그램, 시스템 라이브러리, 커널 (OS), 하드웨어 순의 계층 구조를 보이는 그림이다.

     

    여기서 알 수 있는 것은,

     

     

     소켓 ( Socket )은 응용 계층이 하위 계층인 TCP/IP 계층의 역할을 몰라도 되도록 TCP/IP의 역할을 감추어주는 역할을 한다. ( 투명성 )

     

     즉, 소켓은 프로그래머가 커널 내부를 몰라도 TCP/IP를 사용할 수 있도록 하는 TCP/IP 프로토콜 인터페이스라고 생각하면 된다.

     

     우측 그림과 위 그림을 동시에 참조해보자면 OSI 모델 기준으로 소켓은 session layer, TCP 는 Transport, IP는 Network layer에 위치한다.

     

    소켓에 대해 

    https://bdbest.tistory.com/165

     

     

     

     

     

     

     

     

     

    TCP/IP 혹은 internet protocol suite 의 계층 구조

     

     

     

    TCP/IP  혹은 인터넷 프로토콜 스위트 (internet protocol suite)통신 프로토콜의 집합으로 그 중 TCP와 IP 가 가장 많이 쓰이기에 TCP/IP라고 흔히 부른다. 

     

     TCP/IP는 OSI 모델과 다르게 보통 네 계층 구조응용 계층, 전송 계층, 인터넷 계층, 링크 (네트워크 인터페이스) 계층으로 나눈다. 중간 블록이 계층구조, 최우측 블록이 구성 요소라고 보면 된다.

     

     

     

     

     

     두 모델은 관련이 있으나 서로 완전히 들어맞지는 않는다. OSI 모델이 더 잘 맞는 경우는 SSL이나 TLS를 설명할 때이다.

     

     

     

     

     

     

     

     

     

    링크 계층 / 네트워크 엑세스 계층

    • 인터넷 계층에서 형성된 패킷을 전기신호 또는 광신호로 바꾸어 전달하는 역할을 합니다.

    인터넷 계층 / 네트워크 계층

    • IP( Internet Protocol ) 프로토콜은 인터넷 계층에 존재하며, 링크 계층을 통해 물리적으로 연결된 호스트 사이에서 패킷의 전달 경로를 결정합니다.
    • 즉, IP 프로토콜은 라우팅 방법을 정의하는 것인데, 상위 계층인 전송 계층이 데이터 전달의 신뢰성을 책임진다는 가정하에 어떤 경로로 패킷을 전송할 것인가에 초점을 둡니다.

    전송 계층

    • 전송 계층은 인터넷 계층에서 결정한 목적지까지 실제 데이터를 신뢰성 있게 전송하는 역할을 합니다.
    • 전송 계층에는 TCP와 UDP라는 프로토콜이 존재한다.

    응용 계층

    • 응용프로그램들 간의 데이터 통신이 이루어지는 계층입니다.
    • 예를 들어, 메일보내기( SMTP ), 파일 전송( FTP ), 웹에 접속( HTTP ) 등이 있으며, 괄호안의 프로토콜은 각각의 통신에 사용되는 프로토콜입니다.

     

    호스트 데이터 전송 및 수신

    https://www.ibm.com/docs/ko/aix/7.1?topic=protocol-tcpip-protocols 

     

     

     

     

    프로토콜 데이터 단위 PDU! 

    -데이터를 부르는 용어가 헷갈릴때

     

    용어 정리를 위해 필수적으로 집고 넘어가야하는 부분입니다.

     

    프로토콜 데이터 단위(Protocol Data Unit)는 데이터 통신에서 상위 계층이 전달한 데이터에 붙이는 제어정보를 뜻한다.

     

    모든 계층에서, 우리가 전송하는 데이터를 데이터라고 부를까? PDU를 알고난 후 부터는 그렇지 않을 것이다. 

     

    물론 데이터 자체는 동일하지만 각 레이어를 거치면서 헤더 정보가 추가되면서 이름이 달라진다.

     

    쉽게 생각하면 -

    사용자(응용 계층)는 Data 라고 부르고,

    TCP(전송 계층)는 Segment 라고 부르고,

    IP(네트워크 계층)는 Packet 이라고 부르고,

    데이터링크(링크 계층)는 Frame,

    컴퓨터 하드웨어는 그것을 Bit 로 연산하고 다루게 되는 것.

     

    TCP 세그먼트 를 TCP 패킷이라고 공식 비공식 가리지 않고 혼용하는 경우가 많지만 세그먼트가 맞다!

     

    추가:

    • Datagram : 데이터그램은 사용자의 순수한 message를 다르게 부르는 말이다.

    좀 더 자세한 정보는 ↓

    https://velog.io/@hidaehyunlee/%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%84%B8%EA%B7%B8%EB%A8%BC%ED%8A%B8-%ED%8C%A8%ED%82%B7-%ED%97%B7%EA%B0%88%EB%A6%B4-%EB%95%90-PDU%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

     

     

     

     

     

    그래서 TCP(Transmission Control Protocol)가 뭔데 씹덕아

    오래 기다리셨습니다.

     

    네트워크 계층 중 전송 계층에서 사용하는 프로토콜

     

    TCP와 IP를 함께 사용하는데, IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적 및 관리한다.

     

    연결형 서비스로 가상 회선 패킷 교환 방식을 제공한다

     

    TCP는 연결 지향적이며, 신뢰성이 보장된다는 특징이 있습니다.

     

    • TCP 에서는 데이터 송수신을 위해 클라이언트와 서버의 소켓이 연결되어 있어야 하며, 데이터가 유실되면 데이터 재전송을 요청함으로써 신뢰성을 보장합니다.
    • 즉, 신뢰성 있는 데이터 전송이 가능하다는 장점으로 인해 HTTP, FTP, TELNET 등 대부분의 응용 계층 프로토콜의 전송 계층으로 사용 됩니다.

    https://victorydntmd.tistory.com/288

    https://github.com/WeareSoft/tech-interview/blob/master/contents/network.md#osi-7%EA%B3%84%EC%B8%B5

     

     

     

    TCP 통신 과정 

    https://better-together.tistory.com/140

     

    쉽게 이해하는 네트워크 17. TCP 프로토콜의 기능 및 특징 - 패킷 분할과 연결형 통신

    TCP 프로토콜의 기능, 특징 - 세그먼트, 연결형 통신 TCP 프로토콜의 기능과 특징 전송 계층의 대표적인 프로토콜인 TCP는 신뢰할 수 있고 정확한 데이터를 전달하기 위해 연결형 통신을 사용하는

    better-together.tistory.com

    엄청 잘 설명 되어 있습니다! 

     

     

    요약!

    TCP 통신은
    ① 정상적인 통신이 가능한 상태인지를 확인하는 연결(또는 커넥션, connection) 확립에서 시작하여
    데이터를 전송하고
    연결을 해제
    하는 과정을 순차적으로 거치게 됩니다.

    하는 과정을 순차적으로 거치게 됩니다.

    1. 연결 확립
    3-way 핸드셰이크 기법을 통해 연결을 확립한다.

    2. 데이터 전송
    TCP 흐름제어 를 통해 전송효율을 높입니다. 
    나의 패킷을 보내고 응답을 기다리는 대신 여러 패킷을 한꺼번에 연속해서 전송한 후 확인 응답을 받음으로써 전송 효율을 높이는 것입니다.

    3. 연결 종료
     4-way 핸드세이크 를 통해 연결을 종료한다.

     

     

     

    잠깐 UDP

    TCP의 안정성을 필요로 하지 않는 애플리케이션 (응용)의 경우 일반적으로 TCP 대신, UDP (User Datagram Protocol, 비접속형 사용자 데이터그램 프로토콜) 을 사용한다.

     

    데이터를 데이터그램 단위로 처리하는 프로토콜으로 비연결형 서비스로 데이터그램  패킷 교환 방식을 제공

     

    이것은 전달 확인 및 순차 보장 기능이 없는 대신 오버헤드가 작고 지연시간이 짧다는 장점이 있다.

     

    • 전송한 데이터가 잘 전달이 되었는지 확인하지 않고 단지 데이터만 보낸다는 점이 TCP와 다릅니다.
    • 즉, 신뢰적이지 않으며( 비신뢰성 ), 대신 속도가 빠르다는 장점이 있습니다.
    • 그렇다고 UDP가 아예 신뢰성이 없다는 것은 아닙니다. ( 헤더에 checksum 존재 )
    • 그래서 UDP는 음악이나 동영상 스티리밍(streaming)과 같은 서비스에 적합합니다.

     

     

     

     

     

     

     

     

     

    이 아래는 심해다... 정리되어있지 않다고!

     

     

     

     

     

     

    컴퓨터 시스템 간단 용어 설명

     

    Process 란?

     

    In computing, a process is the instance of a computer program that is being executed by one or many threads. It contains the program code and its activity. Depending on the operating system (OS), a process may be made up of multiple threads of execution that execute instructions concurrently.

     

     

    instance 란?

    In a computer system, any time a new context is created based on some model, it is said that the model has been instantiated. In practice, this instance usually has a data structure in common with other instances, but the values stored in the instances are separate. Changing the values in one instance will then not interfere with the values of some other instance. A compute instance can be software or hardware which can run code, like for example a CPU, GPU or a virtual machine.

     

     

    Endian 이란?

     

    AF_INET 이 뭐야

     

    AF_INET is an address family that is used to designate the type of addresses that your socket can communicate with (in this case, Internet Protocol v4 addresses). When you create a socket, you have to specify its address family, and then you can only use addresses of that type with the socket.

     

    그래서 AF_INET 이랑 PF_INET의 차이가 뭔데

     

    In some documentation, you'll see mention of a mystical "PF_INET". This is a weird etherial beast that is rarely seen in nature, but I might as well clarify it a bit here. Once a long time ago, it was thought that maybe a address family (what the "AF" in "AF_INET" stands for) might support several protocols that were referenced by their protocol family (what the "PF" in "PF_INET" stands for).
    That didn't happen. Oh well. So the correct thing to do is to use AF_INET in your struct sockaddr_in and PF_INET in your call to socket(). But practically speaking, you can use AF_INET everywhere. And, since that's what W. Richard Stevens does in his book, that's what I'll do here.

     

     

    What is the difference between a socket and a port

     

    Sockets, ports and port numbers have functional overlap, but the terms are distinct. A socket is part of a port, while a port number is part of a socket. We explain.

     

    socket descriptor

     

     Each socket within the network has a unique name associated with it called a socket descriptor—a fullword integer that designates a socket and allows application programs to refer to it when needed.

     

     

    https://hackmd.io/@ofAlpaca/S1OZ7bGb4?type=view 

     

    2018q3 Tiny(Webserver) - HackMD

    # 2018q3 Tiny(Webserver) contributed by < `TerryShu` > 、 < `ofAlpaca` > ###### tags: `CSIE5006` `HW`

    hackmd.io

     

     

     

    장병규 의장님의 간단 네트워크 프로토콜 설명

     

    • 초간단 설명 (25년 이상 안 바뀜)
      • TCP/IP : network layer, TCP 위의 HTTP, TCP 옆의 UDP
      • Sockets : the low level endpoint used for processing information across a network
      • Server:
      • Create a socket with the socket() Bind the socket to an address using the bind() Listen for connections with the listen() Accept a connection with the accept() To send and receive data, use the write() and read()
      • Client:
      • Create a socket with the socket() Connect the socket to the address of the server using the connect() To send and receive data, use the write() and read()
    • [요약]
      1. 서버와 클라이언트의 통신
        • socket() : 연결 통로 준비
        • bind() : 특정IP와 연결
        • listen() : 연결 후 요청을 기다리기
        • accept() : read/write 또는 receive/send 메소드를 짝으로 사용하여 요청/응답 처리. 단, listen()에서의 스레드와 다른 스레드를 만들어 진행한다. → 스레드 분리 이유: 서버는 여러 요청을 받아야 하기에, listen() 스레드는(母) 놔두고 계속 기다리게 하고, accept() 스레드는 (子) 요청을 처리하도록 만들어 둠 → 단, 우리 과제에서는 멀티프로세싱까지 다루지는 않음
        클라이언트
        • socket() : 연결 통로 준비
        • connect() : 연결. 끝. 스레드 분리하지 않음
      2. 서버쪽
      3. HTTP / TCP / IP 통신 등
        • IP 위에 → TCP 위에 → HTTP 가 있음. 모두 P. 즉 protocol. 규약=약속
        • → Physical 레이어에 가까울 수록 밑에 있다고 표현
        • IP단으로 갈 수록 하드웨어 환경(와이파이, LTE, 랜선, ...) 레이어를 나눠서 설계하는 이유는, 각 단계 별 환경이 변할 수 있고, 다양한 이종의 장치들이 나올 수 있기 때문
        • → 한번에 설계하면 다 바꿔야 하니까, 레이어를 나눠서 약속을 정해둔 것
        • TCP는 패킷 받는 게 보장됨 vs UDP는 패킷 받는 게 보장 안됨. 그냥 쏘는 것→ 참고로 11장은 TCP 소켓으로 만들어지게 되어있음. 2kb를 주면 2kb를 받는 구조.
        • → 요새 동영상 스트리밍 같은 곳에 UDP 많이 씀. 중간에 화질 저하돼도 보는 데 문제 없으니까
        • HTTP가 처음 나왔을 때 뜬 이유: 사람이 읽을 수 있어서

     

     

     

     

    장병규 의장님

    이번 주차는 소프트웨어 개발을 떠난 사람도 다룰 정도로 쉬운 개념을 이번 주차에 다룹니다.

     

    네트워크 자체는 파기 시작하기엔 엄청 너무 많다.

     

    하지만 처음 시작하는 ㅏ람은 TCP , TCP 소캣 정도만 알면 된다.. 대부분 TCP 소캣만 쓴다. 그 이상은 경력 3~4 년 이상 부터 의미가 있으니 이 이상은 억지로 알려고 할 필요가 없다.

     

    HTTP 

    ---------

    TCP , UDP

    --------

    IP

     

    위부터 아래로 깊어진다. 모든 프로토콜은 IP 위에 쌓여있는 그림이다. 

    HTTP가 TCP 혹은 UDP 라는 약속을 기반으로 짜여진 규약이다.

     

     

     

    양쪽이 만나기 위한 규약 = protocol 

    네트워크에서는 너무 다양한 만남? 요청 요구 전송 등이 있기에 이를 레이어로 나누었을 뿐이다. 

    지구 상엔 거의 TCP, IP 만 남았다.

    우리가 알아야하는 것은 HTTP 와 TCP

     

    웹프로토콜은 1995년에 나왔다.

     

    요즘 프레임 워크에 HTTP가 거의 담겨 있기에 실무에서 HTTP도 거의 다룰 일이 없다.

     

    하지만 기본 기저 우너리을 이해하면 도움이 되기에 이번 주차 공부를 하는 것이다.

     

     

    TCP는 반드시 받을 수 있게 프로토콜 자체가 보장해준다.

    UDP는 보장해주지 않는다. 

     

    엔지니어링 세상에선 정답이란게 없다. 때에 따라 다 다르다.

    10년전에는 비가 오면 패킷로스 등이 물리적으로 생기고 한다. 하드웨어나 조건이 로스가 생기지 않는 상황이라면 UDP가 효율적이다.

     

    FTP 는 대부분 TCP 위에서 만들어졌다. 

     

    UDP 평소엔 잘 다루지 않지만 종종 몇몇 영역에서 사용한다. 

     

    그림 자체는 서버는 소캣을 만들고 기다리고 있고 클라이언트는 요청을 보내는 그림이다. 이 기본 개념 위에서 네트워크가 만들어진다.

     

    이 장을 잘 배우면 앞으로 오랫동안 써먹을 수 있고 실제로 다루는 영역의 80% 가량을 이해했다고 생각해도 된다. 

     

    댓글