on
[Network]TCP/IP는 뭘까? + UDP, Port
[Network]TCP/IP는 뭘까? + UDP, Port
728x90
순서
IP란?
ㄴ IP address / 아이피 주소
ㄴ IP의 한계점(TCP의 등장 배경)
TCP란?
ㄴ TCP 세그먼트
ㄴ Port(포트)란?
ㄴ 3-way handshake
ㄴ TCP와 UDP의 차이점
IP(Internet Protocal)란?
IP는 인터넷 프로토콜 혹은 인터넷 통신규약 이라고 불린다.
통신규약이란게 무슨 말일까?
인터넷은 아주 멀리 떨어져있는 두 서버 혹은 컴퓨터간에 데이터를 주고 받게해주는 역할을 해주는 편리한 존재이다.
우리가 컴퓨터로 데이터를 전송하면(메세지나, 메일 같은 것을 전송) 인공위성으로 데이터가 날아가서 상대편의 컴퓨터에게 데이터를 전송해주는 줄 알았지만(컴퓨터를 공부하기전에 난 그렇게 생각했었다...) 사실 그렇지 않다.
컴퓨터가 데이터를 주고 받을 때, 선으로 연결되어 있다면, 받아들이기 쉽다(나는 그렇다).
우리가 사용하는 인터넷은(와이파이 역시) 결국 선으로 연결되어있다. 이걸 랜선이라고 부른다.
내가 전송할 데이터를 지구 반대편에 있는 친구에게 전송할 때, 사실 그 사이에는 더 많은 서버(컴퓨터 혹은 노드)를 거치는 것이다.
인터넷망에서 패킷 전송
사실 이렇게 복잡한 과정을 거쳐서 데이터(혹은 패킷)이 전송되는데 정해진 규칙이 없다면, 길을 잃고 데이터를 손실할 확률이 높다.
최소한 어디서 어디로 보내는지는 알아야지...
그래서 필요한 것이 통신규약이다.
우리가 인터넷으로 데이터를 보낼 때, 제대로 전송하기 위해서 특정한 규칙을 따르자고 약속한 것이다.
데이터를 전송할 때, 패킷(packet)이라는 통신 단위로 전송하는데 이 패킷에 어떤 정보를 담을 것인가를 정하는 것이 IP의 역할이다.
IP address / 아이피 주소
모든 서버(혹은 컴퓨터)는 각자 고유의 IP주소를 가진다. 인터넷 상의 주소라고 생각하면 된다.
IPv4(IP version 4)라는 것 본적 있을텐데 IP주소의 체계를 의미한다. IPv4는 3자리씩 4마디를 가지며 한 마디를 옥탯(octet)이라고 부른다. 각 옥텟은 0~255사이의 숫자이다.
ex) 192.111.111.121
컴퓨터의 수가 많이지면서 IPv6까지 나와있다. 이 부분은 나중에 다른 글에서 다루는 걸로..
데이터를 전송할 때, 패킷이 길을 잃지 않게 보내는 곳과 받는 곳의 IP주소를 넣어준다.
IP 패킷 정보
IP의 한계점
TCP가 필요한 배경이 IP가 만능이 아니라는 점이다.
IP의 문제점이 3가지가 있는데 비연결성 / 비신뢰성 / 프로세스(프로그램) 구분 이다.
▶ 비연결성
패킷에는 도착지(도착 IP주소)가 있는데 만약 해당 IP주소가 없다면?(메세지를 받을 사용자가 서버를 종료)
패킷은 전달되지 않을 것을 것이고 패킷을 보낸 사용자는 이를 알 방법이 없다.
▶ 비신뢰성
인터넷망에서는 데이터가 전송될 때, 여러 노드(인터넷상의 많은 서버)를 통해서 도착지도 이동한다고 했다.
이렇게 이동하는 과정에서 중간 단계의 노드(서버)에 문제가 생겨 패킷이 소실된다면?
또 전송할 데이터가 여러 패킷으로 나뉘는데 이 패킷들이 서로 다른 노드를 거쳐서 전송될 수도 있다.(노드의 경로가 보장되지는 않는다.)
그렇다면 패킷 최종 도착하는 순서가 보장되지는 않는다.
예) 보낼 메시지가 패킷1, 패킷2, 패킷3의 순서대로 도착해야하는데 패킷2, 패킷1, 패킷3의 순서로 도착할 수도 있다.
▶ 프로세스 구분
우리는 컴퓨터를 사용할 때, 하나의 작업만하지는 않을 것이다.
이 글을 쓰고 있는 나도 메신저를 켜놓고 스트리밍 음악을 틀고 그림 툴을 켜고 IDE도 사용한다. 물론, 인터넷 브라우저까지..
이처럼 각 프로그램(프로세스)들이 인터넷에서 필요한 데이터를 전송 받을텐데 모두 하나의 컴퓨터(서버)에서 이뤄지므로 도착하는 IP주소는 동일하다.
패킷에 도착IP주소가 담겨있어 내 컴퓨터까지는 올테지만 어떤 프로그램(프로세스)에 필요한 것인지는 알 수가 없다.
위 같은 문제점을 해결하기 위해서 TCP가 사용된다.
TCP( (Transmission Control Protocol)
TCP (Transmission Control Protocol)는 IP 네트워크의 두 컴퓨터 간의 연결 지향 통신을 위한 전송 계층 호스트 간 프로토콜입니다. TCP는 가상 포트를 사용하여 두 컴퓨터 간의 물리적 연결을 재사용 할 수 있는 가상 종단 간 연결을 만듭니다. TCP는 HTTP 및 SMTP (email)과 같은 상위 레벨 프로토콜 데이터를 캡슐화합니다.
-출처: MDN 홈페이지
https://developer.mozilla.org/ko/docs/Glossary/Transmission_Control_Protocol_(TCP)#tcp_핸드_셰이크
쉽게 말해 앞서말한 IP의 한계점을 극복할 수 있는 정보를 메세지에 먼저 감싼다는 이야기이다.
TCP 세그먼트(TCP segment)
TCP 세그먼트와 캡슐화 되어있는 모습
TCP의 역할은 전송할 데이터를 스트림에서 받아 헤더에 송신포트, 수신포트, 시퀀스 넘버 등 전송 제어에 필요한 정보를 넣어서 캡슐화 해준다.
이렇게 캡슐화된 단위를 TCP segment라고 한다. 이를 다시 IP 데이터그램 혹은 패킷에 캡슐화해서 전송한다.
TCP헤더에는 어떤 프로그램에 사용될 정보인지, 패킷의 순서는 어떻게 되는지 등에 대한 정보를 담아 놓는다.
TCP 세그먼트를 캡슐화해서 보냄으로써, IP가 가지는 비신뢰성 문제를 해결 할 수 있다.
여기서 포트(Port)란?
포트란, 같은 아이피 상에서 프로세스를 식별하기 위한 번호이다.
IP:PORT 같이 쓰인다.
ex) http://192.111.23.1:80 => IP주소 192.111.23.1의 80번 포트라는 의미이다.
3-way handshake
TCP 세그먼트를 캡슐화하는 것만으로는 IP한계점 비연결성을 해결해주지는 않는다.
이를 해결할 수 있는 방법이 3-way handshake 이다.
3-way handshake는 데이터를 서버가 클라이언트에 데이터를 전송하기 전에 클라이언트가 연결되어있음을 확인하는 과정 입니다.
3 way handshake
1. 클라이언트는 동기화를 요청, SYN(Synchronize)
2. 서버는 클라이언트에게 동기화 요청 SYN과 클라이언트의 요청이 승인되었음을 알림 ACK(Acknowledgement)
3. 클라이언트는 서버의 요청을 승인 ACK
위 세 과정(3 way handshake)를 거쳐 연결성을 보장합니다.
원문 설명은 아래에 링크에서 확인할 수 있습니다.
MDN TCP 핸드쉐이크: https://developer.mozilla.org/en-US/docs/Glossary/TCP_handshake
TCP와 UDP의 차이
먼저 TCP와 UDP는 IP의 한계점을 해결하기 위해서 필요한 것인데 대부분의 경우 TCP를 사용한다.
그래서 TCP/IP라고 불린다.
UDP(User Datagram Protocol)는 TCP를 커스터마이징 할 수 있는 프로토콜이라고 생각하면 된다. 이 글에서는 TCP에 대한 부분만 다룹니다.
잘못되거나 수정해야할 부분이 있다면 의견 남겨주시면 감사합니다.
728x90
from http://reinvestment.tistory.com/60 by ccl(A) rewrite - 2021-12-30 17:01:04