TCP/IP
✔️ 요약
TCP/IP는 OSI 7계층 중에서 Layer 3, Layer 4를 다루는 프로토콜입니다.
패킷 통시 방식의 인터넷 프로토콜인 IP(Internet Protocol)와 전송 조절 프로토콜인 TCP(Transmission Control Protocol)로 이루어 졌습니다.
IP는 패킷 전달 여부를 보증하지 않고, 패킷을 보낸 순서와 받는 순서가 다를 수 있습니다.
TCP는 IP 위에서 동작하는 프로토콜로, 데이터의 전달을 보증하고 보낸 순서대로 받게 해줍니다.
TCP/IP는 송신자가 수신자에게 IP 주소를 사용하여 데이터를 전달하고 그 데이터가 제대로 갔는지, 너무 빠르지는 않는지, 제대로 받았다고 연락은 오는지에 대한 이야기를 하는 것입니다.
✔️ OSI 7계층이란?
- Transport Layer (4 Layer)
송신자와 수신자의 논리적 연결을 담당하는 부분으로, 신뢰성 있는 연결을 유지할 수 있도록 도와줍니다.
즉 Endpoint(사용자) 간의 연결을 생성하고 데이터를 얼마나 보냈는지 얼마나 받았는지, 제대로 받았는지 등을 확인합니다.
TCP와 UDP가 대표적입니다.
-Network Layer (3 Layer)
IP(Internet Protocol)이 활용되는 부분으로, 한 Endpoint가 다른 Endpoint로 가고자 할 경우, 경로와 목적지를 찾아줍니다.
이를 Routing이라고 하며 대역이 다른 IP들이 목적지를 향해 제대로 찾아갈 수 있도록 돕는 역할을 합니다.
OSI 7계층(OSI 7 Layer)
✔️요약 OSI 모형(Open Systems Interconnection Reference Model)은 국제표준화기구(ISO)에서 개발한 모델로, 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명한 것이다. 이 모델은 프로토콜
0chn-xxx.tistory.com
✔️ TCP란?
전송 제어 프로토콜(Transmission Control Protocol)은 인터넷 프로토콜 스위트(IP)의 핵심 프로토콜 중 하나로, IP와 함께 TCP/IP라는 명칭으로 널리 불립니다.
TCP는 근거리 통신망이나 인트라넷, 인터넷에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로, 순서대로, 에러 없이 교환할 수 있게 합니다.
전송 계층에 위치하며 네트워크의 정보 전달을 통제하는 프로토콜이자 인터넷을 이루는 핵심 프로토콜의 하나입니다.
TCP는 웹 브라우저들이 월드 와이드 웹에서 서버에 연결할 때 사용되며, 이메일 전송이나 파일 전송에도 사용됩니다.
✔️ IP란?
각 패킷의 주소 부분을 처리해 패킷들이 목적지에 정확하게 도달하도록 하는 일을 담당합니다.
IP의 특징은 신뢰성(에러 제어) 및 흐름 제어 기능이 전혀 없다는 것입니다. 신뢰성을 확보하려면 IP 계층 위의 TCP와 같은 상위 트랜스포트 계층에 의존해야 합니다.
비연결성 데이터그램 방식을 채택하고 있으며 패킷의 완전한 전달(소실, 중복, 지연, 순서바뀜 등이 없게 하는 것)을 보장하지 않습니다.
IP Header 내 수신 및 발신 주소를 포함하고, IP Header 내 바이트 전달 순서는 최상위 바이트(MSB)를 먼저 보낸다는 것도 IP의 특징입니다.
경우에 따라 단편화가 필요하며 모든 상위 계층 프로토콜(TCP, UDP, ICMP, IGMP 등)이 IP 데이터그램에 실려서 전송됩니다.
✔️ TCP와 IP의 차이점
IP가 패킷들의 관계를 이해하지 못하고 그저 목적지를 제대로 찾아가는 것에 중점을 둔다면
TCP는 통신하고자 하는 양쪽 단말(Endpoint)이 통신할 준비가 되었는지, 데이터가 제대로 전송되었는지, 데이터가 가는 도중 변질되지는 않았는지, 수신자가 얼마나 받았고 빠진 부분은 없는지 등을 점검합니다.
이런 정보는 TCP Header에 담겨 있으며 SYN, ACK, FIN, RST, Source Port, Destination Port, Sequence Number, Window Size, Checksum과 같은 신뢰성 보장과 흐름 제어, 혼잡 제어에 관여할 수 있는 요소들도 포함되어 있습니다.
또한 IP Header와 TCP Header를 제외한 TCP가 실을 수 있는 데이터 크기를 세그먼트(Segment)라고 부릅니다.
TCP는 IP의 정보뿐만 아니라 Port를 이용하여 연결합니다. 한쪽 단말(Endpoint)에 도착한 데이터가 어느 입구(Port)로 들어가야 하는지 알아야 연결을 시도할 수 있기 때문입니다.
예를 들어 양쪽 단말(Endpoint)이 HTTP로 이루어진 문서를 주고 받고자 할 경우 데이터 통신을 하려면 Endpoint의 3306 Port도 아니고 21 Port도 아닌 80 Port로 연결해야 합니다.
✔️ TCP/IP의 장, 단점
📌 장점
1. 통합 주소지정 체계. 즉, 소형과 대형 네트워크 모두에서 사용할 수 있는 장비 식별, 주소 지정 체계를 가집니다. 따라서 점점 커지는 네트워크에 적절하며, 유일한 주소를 보장하기 위해 주소체계를 중앙에서 관리합니다.
2. 라우팅에 용이합니다. 장비보다는 네트워크를 연결하는데 초점이 맞춰져있고, 한 네트워크에서 다른 네트워크로 한 단계씩 데이터를 전달하며,서로 다른 네트워크에 있는 장비 간에 데이터 교환이 가능합니다.
3. 하부 네트워크에 독립적이기 때문에 근거리 네트워크(LAN), 무선(WLAN), 원거리 네트워크(WAN) 같은 모든 하위 계층 네트워크에서 운영이 가능합니다.
📌 단점
1. TCP의 3-way handshake 메커니즘, 승인 메커니즘 및 혼잡 제어 메커니즘은 네트워크가 불안정 할 때 대역폭과 시간 낭비를 초래합니다.
2. 네트워크 변동이 발생하면 TCP/IP는 대역폭 사용량을 제대로 관리할 수 없고 전송 효율을 빠르게 저하시킬 수 없으며 블록체인과 같은 대규모 정보 방송 네트워크를 완벽하게 지원할 수 없어 최신 블록과 동기화하여 이미 채굴된 블록의 시간과 리소스를 낭비합니다.
✔️ TCP의 작동
📌 3-way handshake (연결 성립)
TCP를 사용하는 송신자와 수신자는 데이터 전송하기 전 먼저 서로 통신이 가능한 지 의사를 묻고 한 번에 얼마나 받을 수 있는지 등의 정보를 확인합니다. 앞서 언급했던 신뢰성 있는 통신을 하기 위함입니다. 데이터를 안전하고 빠지는 부분 없이 보내기 위함입니다.
TCP는 TCP Header 내의 SYN, SYN/ACK, ACK Flag을 사용하여 통신을 시도합니다.
1. 송신자가 수신자에게 'SYN'을 날려 통신이 가능한지 확인합니다. 이때 Port가 열려 있어야 합니다.
2. 수신자가 송신자로부터 'SYN'을 받고 'SYN/ACK'을 송신자에게 날려 통신할 준비가 되어있음을 알립니다.
3. 송신자가 수신자의 'SYN/ACK'을 받고 'ACK'를 날려 전송을 시작함을 알립니다.
TCP로 이루어지는 모든 통신은 반드시 3-way handshake를 통해 시작합니다.
수신자가 받을 생각이 있는지 준비가 되어 있는지 송신자가 보낼 준비가 되어 있는지를 미리 확인한 후 통신을 시작하여 데이터를 안전하게 보내는 것입니다. 그리고 데이터를 받았을 때 잘 받았음을 알리는 'ACK'를 송신자에게 날립니다.
송신자는 이 'ACK'를 보고 수신자가 데이터를 잘 받았음을 확인하고 다음 데이터를 전달할 준비를 합니다.
이 밖에 주로 사용하는 Flag으로는 RST, FIN/ACK, PUSH 등이 있습니다.
📌 4-way handshake (연결 해제)
연결 성립 후, 모든 통신이 끝났다면 해제해야 합니다.
1. 송신자는 수신자에게 연결을 종료한다는 'FIN' 플래그를 보냅니다.
2. 수신자는 'FIN'을 받고, 확인 했다는 'ACK'를 송신자에게 보냅니다. (이 때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 됩니다.)
3. 데이터를 모두 보냈다면, 연결이 종료되었다는 'FIN' 플래그를 송신자에게 보냅니다.
4. 송신자는 'FIN'을 받고, 확인했다는 'ACK'를 수신자에게 보냅니다. (아직 수신자로부터 받지 못한 데이터가 있을 수 있어 TIME_WAIT을 통해 기다립니다.)
+ 서버는 'ACK'를 받은 이후 소켓을 닫습니다. (Closed)
+ TIME_WAIT 시간이 끝나면 클라이언트도 닫습니다. (Closed)
✔️ TCP의 특징
📌 흐름 제어
송신자는 자신이 한 번에 얼마나 보낼 수 있는지, 수신자는 자신이 데이터를 어디까지 받았는지 끊임없이 확인하고 TCP Header 내의 'Window size'를 사용해 한 번에 받고/보낼 수 있는 데이터의 양을 정합니다.
여기서 Window size는 일정량의 데이터를 말합니다. 아무래도 받는 측의 사정이 더 중요하다 보니 Window size는 3-way-handshake 때 수신자가 정합니다.
그리고 자신의 상황에 따라 'Window size'를 조절합니다. 그리고 자신이 지금까지 받은 데이터 양을 확인하여 송신자에게 보내는데 이를 'Acknowledgment Number'라고 합니다.
만약 수신자가 300번째의 데이터를 받았으면 Acknowledgment Number에 1을 추가하여 300번까지 받았으니 301번부터 보내라는 뜻으로 301을 보냅니다.
그리고 이 데이터의 순서 번호를 표기한 것이 바로 'Sequence Number'입니다.
📌 혼잡 제어
데이터를 주고 받는 양 단말(Endpoint)도 중요하지만 데이터가 지나가는 네트워크망의 혼잡 또한 중요합니다.
연결 초기에 송신자와 수신자가 데이터를 넉넉히 주고받을 준비가 되어있더라도 중간 경로인 네트워크가 혼잡하다면 제대로 보낼 수 없을 것입니다.
그렇기 때문에 송신자는 연결 초기에 데이터 송출량을 낮게 잡고 보내면서 수신자의 수신을 확인하며 데이터 송출량을 조금씩 늘립니다.
그리하면 현재 네트워크에서 가장 적합한 데이터 송출량을 확인할 수 있게 됩니다.
이것이 혼잡 제어의 다양한 방법 중 'Slow Start'입니다.
📌 연결지향적(Connection-oriented)
같은 전송계층의 UDP가 비연결성(Connectionless)인 것과는 달리, TCP는 연결지향적입니다.
이 경우 느슨한 연결(Loosly connected)을 가지므로 강한 연결을 의미하는 가상회선이라는 표현보다는 오히려 연결지향적이라고 표현합니다.
✔️ OSI 7 Layer와 TCP/IP 4 Layer의 비교
TCP/IP 프로토콜은 OSI 모델보다 먼저 개발되었습니다. 그러므로 세션과 표현 2개의 계층이 TCP/IP 프로토콜 그룹에 존재하지 않는 것처럼 TCP/IP 프로토콜의 계층은 OSI 모델의 계층과 정확하게 일치하지 않습니다.
또한 두 모델 모두 계층형이라는 공통점을 가지고 있으나 TCP/IP는 인터넷 개발 직후 이후 계속 표준화되어 신뢰성이 우수한 반면, OSI 7계층은 표준이 되기는 하지만 실제적으로 구현된 예가 거의 없어 신뢰성이 저하되어 있습니다.
마지막으로 OSI 7계층은 장비 개발과 통신 자체를 어떻게 표준으로 잡을지 사용되는 반면에 실질적인 통신 자체는 TCP/IP 프로토콜을 사용합니다.
📌 TCP/IP 4계층
4계층(응용 계층)
- OSI 7계층에서 세션, 프레젠테이션, 애플리케이션 계층에 해당합니다.
- 응용플그램들이 네트워크 서비스, 메일 서비스, 웹 서비스 등을 할 수 있도록 표준적인 인터페이스를 제공합니다.
- TCP/IP 기반의 응용 프로그램을 구분할 때 사용합니다.
- 프로토콜 : HTTP, FTP, TELNET, DNS, SMTP
3계층(전송 계층)
- OSI 7계층에서 전송 계층에 해당합니다.
- 네트워크 양단의 송수신 호스트 사이에서 신뢰성 있는 전송기능을 제공하고, 시스템의 논리주소와 포트를 가지고 있어서 각 상위 계층의 프로세스를 연결해서 통신합니다.
- 정확한 패킷을 보장하는 TCP와 정확한 전송을 보장하지 않는 UDP 프로토콜을 이용하며, 데이터의 정확한 전송보다 빠른 속도의 전송이 필요한 멀티미디어 통신에서 UDP 프로토콜을 이용하며, 데이터의 정확한 전송보다 빠른 속도의 전송이 필요한 멀티미디어 통신에서 UDP를 사용하면 TCP보다 유용합니다.
- 통신 노드 간의 연결을 제어하고, 자료의 송수신을 담당합니다.
- 프로토콜 : TCP, UDP
2계층(인터넷 계층)
- OSI 7계층에서 네트워크 계층에 해당합니다.
- 인터넷 계층의 주요 기능은 상위 트랜스포트 계층으로부터 받은 데이터에 IP 패킷 헤더를 붙여 IP 패킷을 만들고 이를 전송하는 것입니다.
- 통신 노드 간의 IP 패킷을 전송하는 기능 및 라우팅 기능을 담당합니다.
- 프로토콜 : IP, ARP, RARP, ICP, OSPF
1계층(네트워크 접근 계층)
- OSI 7계층에서 물리계층과 데이터링크 계층에 해당합니다.
- OS의 네트워크 카드와 디바이스 드라이버 등과 같이 하드웨어적인 요소와 관련되는 모든 것을 지원하는 계층입니다.
- 송신측 컴퓨터의 경우 상위 계층으로부터 전달받은 패킷에 물리적인 주소인 MAC 주소 정보를 가지고 있는 헤더를 추가하여 프레임을 만들고, 프레임을 하위 계층인 물리계층으로 전달합니다.
- 수신측 컴퓨터의 경우 데이터 링크 계층에서 추가된 헤더를 제거하여 상위 계층인 네트워크 계층으로 전달합니다.
- CSMA/CD, MAC, LAN, X.25, 패킷망, 위성통신, 다이얼 모뎀 등 전송에 사용됩니다.
- 프로토콜 : 이더넷, 토큰링, PPP
✔️ TCP와 UDP의 차이
UDP는 TCP의 대안으로, IP와 같이 쓰일 땐 UCP/IP라고도 부릅니다.
TCP와 마찬가지로 실제 데이터 단위를 받기 위해 IP를 사용하지만 TCP와 달리 메시지를 패킷으로 나누고 반대편에서 재조립하는 등의 서비스를 제공하지 않습니다.
즉, 여러 컴퓨터를 거치지 않고 데이터를 주고 받을 컴퓨터끼리 직접 연결할 때 UDP를 사용합니다.
UDP를 사용해 목적지(IP)로 메시지를 보낼 수 있으며, 컴퓨터를 거쳐 목적지까지 도달할 수도 있습니다.
정보를 받는 컴퓨터는 포트를 열어두고 패킷이 올 때까지 기다리며 데이터가 오면 모두 다 받아들입니다.
패킷이 도착했을 때 출발지에 대한 정보(IP, Port)를 알 수 있습니다.
UDP는 이런 특성 때문에 비신뢰적이고 안정적이지 않은 프로토콜입니다.
하지만 TCP보다 속도가 매우 빠르고 편해서 데이터 유실이 일어나도 큰 상관이 없는 스트리밍이나 화면 전송에 사용됩니다.