CS스터디-05

전재우·2021년 4월 14일
0

2021-03-31

3월의 마지막 스터디

TCP / IP 프로토콜

  1. TCP/IP 란
    TCP/IP는 컴퓨터간 통신을 위해서 만들어 졌습니다.

TCP/IP 는 가장최근에 발명된 컴퓨터와 컴퓨터간의 지역네트워크(LAN) 혹은 광역네트워크(WAN)에서 원할한 통신을 가능하도록 하기 위한 통신규약(Protocol) 으로 정의할 수 있다.
가장 인기있는 인터넷 서비스인 WWW, EMAIL, TELNET, FTP등 대부분이 TCP/IP 기반에서 만들어져있다. 인터넷으로 연결된 수많은 컴퓨터와 통신을 위해서 TCP/IP를 선택한 이유는 그 개방성에 있다. 즉 하드웨어, 운영체제, 접속매체에 관계없이 동작할수 있다는점때문에, 인터넷 통신을 위한 핵심으로 선택되었다. TCP/IP 란 이름에서 알수 있듯이, TCP/IP 는 TCP와 IP 의 2개의 프로토콜로 이루어져 있는데, 통상 IP 프로토콜 위에 TCP 프로토콜이 놓이게 되므로 TCP/IP 라고 부르게 되었다.
IP - node(단말기)와 node - 이해하기 쉽게 컴퓨터와 컴퓨터 - 간의 데이타 패킷을 전송하기 위해서는 각 node 에 (우편번호와 같은)주소를 필요로 한다.
IP는 4바이트로 이루어진 주소번호를 사용하여서 각각의 node 를 구분하고, 목적지를 찾아가게 된다. 우리는 이를 IP Address라고 하며, "192.168.100.100" 형식으로 사용한다.
IP 는 Internet Protocol 의 줄임말이다. 숫자로된 인터넷주소를 사람이 식별하는건, 그리 쉽지 않기 때문에, IP주소를 인간이 식별하기 쉬운 Domain 네임으로 변환시켜주는 Domain Name 서비스를 사용한다. www.yahoo.co.kr 이 211.234,109.2 이런것 보다는 외기가 수월 할것이다.
TCP - 서버와 클라이언트간에 데이타를 신뢰성있게 전달하기 위해 만들어진 프로토콜이다. 데이타는 네트워크선로를 통해 전달되는 과정에서 손실되거나 순서가 뒤바뀌어서 전달될수 있는데, TCP는 손실을 검색해내서, 이를 교정하고 순서를 재조합할수 있도록 해준다. Transmission Control Protocol 의 줄임말이다. 데이타를 전송하기 전에 데이타전송을 위한 연결을 만드는 연결지향 프로토콜이다.


2. LAN 과 WAN 그리고 TCP/IP
LAN 은 Local Area Network 의 줄임말로 우리나라 말로 풀어쓰자면 지역내트웍(근거리 통신망) 이며 WAN 은 Wide Area Network 의 줄임말로 광역네트웍(원거리 통신망) 으로 해석할수 있을것이다1
즉 LAN 은 지역적으로 가까운 컴퓨터가 서로 연결(Network)된 상태를 말하며 WAN은 지역적으로 멀리떨어진 컴퓨터가 서로 연결 된 상태를 말한다. 다음의 그림은 이러한 LAN과 WAN의 구성을 보여주는 가장 단적인 그림이다.

HOST 와 HOST 그리고 HOST 와 Router 는 다양한 종류와 다양한 품질을 가지는 네트웍연결 회선으로 연결될수 있다(광케이블, 구리선, 인공위성등...). 통화품질이 다르다는 것은 데이타를 보내는중 데이타 손상이 일어날수도 있으며, 데이타의 순서가 뒤바뀔수도 있다는걸 의미한다.
데이타의 순서가 뒤바뀔수 있는 이유는, 패킷이 전달되는데 하나의 고정된 전달 경로만을 이용하지 않고 임의의 경로를 사용하기 때문으로 각경로를 구성하는 회선의 품질이 다르게되면 먼저 보내어진 패킷이라도 나중에 보내어진 패킷보다 더 느리게 도착하는 문제가 생길 수 있다. 예를들어, 구리선으로 전달되는 패킷은 인공위성이나 광케이블로 전달된 패킷보다 아무래도 느리게 움직일 것이다.
TCP/IP는 이러한 연결된 상태에서 서로 올바른 통신을 하도록 도와준다. 정확히 말하자면 TCP가 올바른 통신을 하도록 도와주는 기능을 가지고 있으며, IP는 이러한 기능없이 오로지 TCP 패킷을 전송하는 일만을 한다.
올바른 통신을 위해 TCP가 가지고 있는 기능은
패킷이 빠졌을경우, 재전송을 요청하는 기능
패킷에 일련번호를 줌으로써, 서로 다르게 도착될지도 모르는 패킷의 순서를 재조합하는 기능
이다.
3. UDP와 TCP
위에서 데이타를 전송하기 위한 TCP 프로토콜에 대해서 설명했는데, TCP외에 UDP(:12) 라는 프로토콜 존재한다. 데이타를 전송한다는 점에서 TCP, UDP 모두 비슷하지만 특성에 있어서 약간의 차이가 있다. UDP 는 User Datagram Protocol 의 줄임말이다.
TCP - 연결지향이며, 자체적으로 오류를 처리하며, 네트웍 전송중 순서가 뒤바뀐 메시지를 교정시켜주는 기능을 가지고 있다. 연결지향이란말은 데이타를 전송하는 측과 데이타를 전송받는 측에서 전용의 데이타 전송 선로(Session)을 만든다는 의미이다. 데이타의 신뢰도가 중요하다고 판단될때 주로 사용된다.
UDP - 비연결지향이며, 오류를 처리하거나 순서를 재조합시켜주는 기능을 가지고 있지않다. 단순히 데이타를 받거나, 던져주기만 하는 프로토콜이다. UDP는 특히 실시간 멀티미디어 정보를 처리하기 위해서 주로 사용한다.
TCP를 실시간 멀티미디어 정보를 처리하는데, 사용할경우 TCP의 오류정정 특성상 메시지가 도착하지 않거나 할경우 다음 메시지를 받지 않고, 메시지 재전송을 요구하므로, 실시간으로 전송하기에는 그리 적당하지 않기 때문이다. 반면 UDP를 사용하면 중간에 패킷이 소실되더라도 개의치 않고 다음 패킷을 받아들이므로 실시간으로 메시지 처리가 가능하다.
물론 약간의 데이타 손실로 인해서 멀티미디어 데이타의 질이 떨어질수도 있으나, 화질이나 음질에 약간의 손상이 있더라도 계속적으로 서비스가 되는게 훨씬 더 유리할것이다. 전화를 하는데, 약간 잡음이 섞인다고 해서, 잡음을 정정하기 위해서 서로 통화를 못하는 사태가 발생하면 안되는것과 같은 이치이다. 여기에서는 주로 TCP 에 대해서 다룰것이며, UDP는 필요할경우 약간식 부연설명하도록 하겠다.
4. 어떻게 TCP/IP 를 이용해서 컴퓨터간 데이타 통신이 가능한가 ?
지금까지 TCP/IP 그리고 UDP에 대한 개괄적인 내용을 살펴봤는데, 해결되지 않은 문제가 있다. 그렇다면, 각 컴퓨터간을 연결해주는 이더넷 카드를 통해서 어떻게 TCP/IP 메시지가 전달되는 것일까 ?
이것을 이해하기 위해서는 OSI7에 대한 이해가 필요하다. OSI 는 각종 시스템간의 연결을 위하여 ISO 에서 제안한 모델로써, OSI(Open System Interconnection Reference Model)에서 유추할수 있듯이, 시스템에 상관없이 서로의 시스템이 연결될수 있도록 만들어주는 모델이다.
OSI 는 아래와 같이 7개의 계층으로 되어 있다.

컴퓨터와 컴퓨터사이의 데이타전송을 위해서는 위의 7개의 계층을 "직-간접적" 으로 거쳐서 전송이 되게 된다.
위와 같이 7개의 계층으로 나눈 이유는, 각 계층에 대한 캡술화와 은닉이 가능하기 때문이다. 캡슐화, 은닉에 대해서는 아마도 C++ 을 공부해 본적이 있다면 많이 들어본 개념일건데, 예를들어 서비스 개발자는 Application Layer 와 Prsentation Layer 만 신경쓰면 된다. 실제 어플리케이션 개발자는 Session Layer 와 Transport Layer 정도만 신경쓰면 될것이다. Network Layer 계층 아래는 운영체제(:12)가 알아서 챙겨주므로 거의 신경쓸 필요가 없다. 마찬가지로 하드웨어를 만드는 사람은 Physical Layer 만 신경쓰면 되며, 그위의 계층에 대해서는 신경쓸필요가 없다.(물론 개발자가 Application Layer 와 Presentation Layer 까지 몽땅 신경써서 개발하는 경우도 있지만 - 사실은 거의 대부분이겠지만)
OSI를 이렇듯 계층별로 나눔으로써, 각 계층에서 필요한 부분만을 개발자들이 신경쓰게 되고 통신서비스 개발시간을 줄일수 있도록 도와준다.
5. OSI 7 계층과 TCP/IP 4계층
TCP/IP 계층은 OSI 7계층을 더 단순화 시켜서 4개의 계층(Layer)로 만들어서 사용한다.

Application Layer
이 계층은 네트웍을 사용하는 응용프로그램(FTP, Telnet, SMTP) 등으로 이루어지며, OSI 계층의 Aplication Layer 와 Presentation Layer 를 모두 포함한다.
Transport Layer
계층의 이름에서 알수 있듯이, 도착을 원하는 시스템까지 데이타를 전송하기 위한 일을 하는 게층이다. OSI 모델의 Session Layer 과 Transport Layer 를 포함하고 있으며, 각각의 시스템을 연결하고, TCP 프로토콜을 이용하여 데이타를 전송한다.
Internet Layer
데이타를 정의하고 데이타의 경로를 배정하는일(라우팅)을 담당한다. 데이타를 정확히 라우팅 하기 위해서 IP프로토콜을 사용한다. OSI 의 Network Layer 과 Data Link Layer 를 포함한다.
Physical Layer
물리적 계층 즉 이더넷 카드와 같은 하드웨어를 말한다.
6. TCP/IP 4계층에 의한 데이타 전송
그럼 실제로 TCP/IP 4계층을 이용해서 어떻게 데이타가 전송되는지 알아보도록 하자. 아래는 이러한 계층 통신의 가장 단적인 모습을 보여주는 그림인데, 현재 가장 많이 사용하는 인터넷 서비스중 하나인 WWW 을 예를 들어 그림을 그려 보았다.

WWW (World Wide Web)은 더이상 설멍이 필요없는 유명한 서비스로써, HTTP (HyperText Transfor Protocol)이라는 프로토콜을 이용한다.
위의 그림을 설명해 보자면, 일단 사용자는 Mozilla 나 IE 같은 브라우저를 사용하여서 www.joinc.co.kr 같은 URL 입력을 통해서 웹페이지를 요쳥한다.
사용자의 요청(문자 메시지가 될것이다)은 인터넷상에서 전달되기 용이한 패킷으로 만들기 위해서 TCP 패킷으로 만들어지게 된다.
이것은 다시 인터넷 상에서 원하는 주소로 이동할수 있도록 하기 위해서 IP 패킷으로 다시 만들어 지고(IP 패킷에는 자신의 주소와, 도착해야될 상대방의 주소정보가 들어있을것이다) 이것은 이더넷 카드로 보내어져서 Internet 으로 나가게 된다.
Internet 상에서는 원하는 주소로 TCP/IP 패킷을 보내기 위한 여러가지 장치들이 존재하는데(라우터, 토큰링 같은), 이들 장치를 통해서, www.joinc.co.kr 의 이더넷카드로 TCP/IP 패킷이 전달되게 된다. 그럼 이더넷 카드는 TCP/IP 패킷을 바로 윗 계층(Internet Layer)으로 보내는데, 여기에서는 IP 패킷을 분석해서, 이 패킷이 어디에서 왔으며, 그 도착지가 어디인지를 판단하게 된다.(물론 이는 IP주소 기반으로 판단한다)
그리하여 목적지가 자신이면 이것을 다시 Transport Layer 로 보내고, TCP 프로토콜을 사용하여, 메시지가 누락된게 있으면 다시 요청하고, 순서를 재조합하는등 통신 메시지를 검사해서 이것을 다시 Application Layer 에게 보낸다
Application Layer 에서는 웹서버(IIS, Apache 같은)가 통신메시지를 HTTP 프로토콜에 준하여, 검사를 하여서 사용자가 요청한 웹페이지를 읽어들여서, Transport 계층으로 보내게 된다. 웹페이지를 브라우저까지 전송하는 과정은 위의 정반대의 과정을 순차적으로 거치게 된다.
최종적으로 웹브라우저는 웹페이지를 받아서(text) 역시 HTTP 프로토콜에 준하여, 렌더링 작업을 거친후 화면에 뿌려주게 된다.
위의 그림에서 보면 알겠지만 각각의 계층은 각각의 계층만을 상관하고 있음을 알수 있다. 즉 Application Layer 에 위치하는 브라우저와 webserver 는 HTTP 프로토콜에 의해서 자신의 계층끼리만 통신을 하고, Transport Layer 은 역시 TCP 프로토콜에 의해서 Transport Layer 끼리 통시을 함을 알수 있을것이다. 말그대로 계층적 구조를 가지며, 각 계층은 대응되는 상대편의 계층에 대해서만 상관한다.
7. 연결지향 이란 무엇인가 ?
TCP는 UDP와 달리 연결지향이라고 배웠었다. 그렇다면 연결지향이란 무엇을 의미하는것일까 ? 우리는 바로 위에서 TCP/IP 에 의해서 데이타가 어떻게 전송되어지는지를 알아봤는데, 데이타가 전송되기전에, Browser 와 Server 간의 연결을 성립하는 과정이 데이타를 전송하는 과정전에 이루어지게 된다. 연결을 만드는 과정은 이를테면 우리가 전화할때 어떤내용을 말하기에 앞서서, "안녕하세요 ?" "누구누구씨 맞아요" "아내 저 누구누구 맞습니다"라고 상대편을 먼저 확인하는 과정과 동일한 과정이다.

즉 데이타가 전송되기 전에, 먼저 Browser 는 Server 에 "서버 잘있읍니까?" 라고 메시지를 보내고, Server 는 다시 Browser(:12) 에게 "서버 준비되어 있으니, 데이타 보내시요" 라는 메시지를 보내고 Browser 는 다시 서버에게 "네, 그럼 지금부터 데이타를 보내겠습니다" 라고 서로 의 존재를 확인하는 절차를 수행한후, 정식 데이타를 교환하기 위한 통신선로를 개설하게 된다. 통신선로를 하나 만들기 위해서는 3번의 데이타 전송이 일어나게 되므로, 이것을 three way handshake이라고 한다. 위 그림은 three way handshake 의 과정을 보여주고 있다.
이렇게 연결이 이루어지면 모든 정식데이타는 연결된 통신선로를 통해서 교환되게 되며, 이러한 이유로 TCP를 "연결 지향" 프로토콜이라고 부르는 것이다. UDP 는 이러한 과정이 없이 단순히 데이타만을 전송함으로 "데이타 그램" 프로토콜이라고 부른다.
히스토리

profile
코린이

0개의 댓글