
이제 정말 웹을 안해본 사람이 드물다고 할 정도로 많은 사람들이 웹에서 통신을 한다.
게임을 하거나, 유튜브를 보거나 메일, 인터넷 채팅을 통해서, 또는 지금 여러분들이 이렇게 이 블로그글을 보고 있는 것처럼 말이다. 그런데 도대체 이런 통신은 어떻게 이루어 지는 걸까?
IP (인터넷 프로토콜은) 말 그대로 IP adress를 통해서 Packet 단위로 웹 통신을 주고 받는 방식이다.
각 통신을 할 기기들은 고유의 IP address를 부여받고 Packet에 데이터와 함께 전송자의 IP adress와 받는쪽의 IP adress를 적는다. 이를 인터넷에 있는 노드들이 정보를 읽고 전달하는 과정을 통해 목적지에 도착하게 된다.
마치 우편을 보내는 것과 동일하다. 주소는 IP adress가 되고, 편지의 내용은 전송데이터가 되며, 우편 허브와 우편원이 인터넷 역할을 맡게 된다.
그러나 해당 통신에는 몇가지 문제점이 존재한다. 이는 IP의 특징에서 나오는 문제점인데
- 비연결성
- 비신뢰성
- 단순한 구조
의 특징 때문이다.
우선 비연결이기 때문에 해당 전송은 받는 사람의 상태을 신경쓰지 않는다.
즉 전송대상의 컴퓨터가 꺼져있어도 Packet은 그대로 날라간다. 마치 우편이 받는 대상이여도 부재중이여도 전송이 되는 것처럼 말이다.
또한 비신뢰성이기 때문에 해당 Packet 이 인터넷망에 올라간 이후 결과에 신경쓰지 않는다.
즉 중간에 인터넷망에 문제가 생겨 Packet이 유실되거나, 여러 Packet을 날렸을때 해당 순서에 관계없이 뒤죽박죽으로 도착하는 상황이 발생하게 된다.
또한 단순히 상대와 나의 IP adress 만 첨부하여 보내기 때문에 만약 한 기기에 여러 어플리케이션이 해당 통신을 사용할 경우 어떤 어플리케이션이 해당 통신을 받아야 하는지 알수 없는 문제가 발생한다.
위의 단점으로 실질적으로 IP를 써먹기에는 여러 에로사항이 존재한다.
이러한 상황을 해결하기 위해 나온 통신이 바로 TCP, UDP 통신이다.
위에서 본 것처럼 IP 통신은 몇가지 문제가 발생한다.
이러한 문제를 해결하기 위한 추가된 통신방법이 TCP와 UDP다.
해당 통신에 필요한 정보들이 IP Packet 이전에 덧되어 씌어지게 된다. 이때의 정보를 Segment라고 부른다.

TCP 통신은 IP의 모든 문제점을 잡아준다.
TCP 에는 출발 및 목적지 포트 번호, 전송제어, 순서, 검증번호 등의 정보가 추가로 담기게 된다.
또한 TCP는 IP와 다른 방식의 통신방법으로 작동하게 된다.
IP는 상대의 상태 및 인터넷 상태 여부와 관계없이 통신하지만 TCP는 전송대상자와 연결을 확보하고 통신을 진행한다. 이러한 행동을 3 way handshake 라고 부른다. 이러한 통신 방법 때문에 기존에 IP에서 가졌던 상대 서버가 꺼져있는 경우나 인터넷 상태가 문제여도 Packet를 보내는 문제점이 해결된다.
또한 TCP는 Packet을 보낼 때마다 seq 넘버를 보내고 ack 넘버를 받음으로서 순서대로 데이터를 전송하게 된다. 이 정보를 통해 순서보장의 문제와 제대로 전송되지 않은 데이터 문제를 해결할 수 있다.
TCP 에는 전송자와 수신자 IP Address와 동시에 PORT번호도 추가한다.
PORT는 여러 어플리케이션이 한 IP Address에서 통신할 때 해당 Packet이 필요한 어플리케이션을 구분하는 데에 사용한다. 이로 인해 IP 통신의 다수 어플리케이션의 인터넷 공유를 해결할 수 있다.
문제점이 없는 것은 아니다. 해당 통신방법은 지속적으로 3 way handshake와 sequence number를 주고받기 때문에 상대적으로 통신 속도가 늦을 수 밖에 없다. 또한 해당 Packet을 개발자가 커스터마이징하기 어렵다는 것도 큰 단점으로 존재한다.
UDP는 TCP처럼 통신을 미리 체크하지도, 순서를 보장하지도 않는다. 오직 PORT와 데이터가 전송 도중 변형이 일어나지 않았나 검사하는 체크섬 데이터만 저장되어 있을 뿐이다.
그렇다고 장점이 없는 것은 아니다.
첫번째로 해당 패킷은 TCP에 비해 상당히 빠르다.
이러한 특징때문에 실제 데이터의 손실이 약간 일어나도 문제가 되지 않는 음악, 동영상, 스트리밍 기능 같은 대용량 데이터의 전송 등에 주로 사용하게 된다.
두번째로는 개조하기 쉽다는 것이다.
TCP의 복잡한 구조와는 다르게 UDP는 그렇게 큰기능이 추가되어 있지 않다.
이러한 점 때문에 개발자들이 이를 개조하여 자신에 맞는 Protocol 를 제작하는 데에 이용된다.