Client와 Server는 인터넷망으로 연결 되어있어 데이터를 송수신 한다. 이 때 어떤 방법을 이용하는지 알아보자.
Client와 Server가 데이터를 송수신 할때 데이터에 대한 아무런 정보 없이 데이터만 보내버리면 누가보냈는지 어디서 보냈는지 같은 정보를 알 수 없다. 그렇기에 데이터에 어떤 정보들을 담아야 하는지에 대한 규약을 만드는데 그게 IP이다.
IP: 인터넷 프로토콜은 송신 호스트와 수신 호스트가 패킷 교환 네트워크에서 정보를 주고받는 데 사용하는 정보 위주의 규약
IP를 이용한 통신은 간략하게 보면 출발지의 IP 주소,목적지의 IP 주소, 전송데이터를 보낸다.
※구체적으로는 (헤더길이,서비스타입,식별자,플래그,단편화 오프셋,Time-To-Live(TTL),
프로토콜,헤더 체크섬,송신자 IP주소,수신자 IP주소) 다양한 정보들을 보낸다
하지만 이러한 IP에 한계점도 존재한다.
비연결성: 패킷을 받을 대상이 없거나 서비스 불능 상태여도 클라이언트는 대상 서버가 패킷을 받을 수 있는 상태인지 모른다. 즉 상대를 생각하진않고 자신이 데이터를 보내면 끝이다.
비신뢰성: 중간에 패킷이 문제가 생겨 전송을 실패하던가,패킷의 순서가 잘못 간다던가에 대한 보장이 없다.
프로그램구분: 같은 IP에서 여러 애플리케이션이 있을 수 있는데 이를 구분할 수 없습니다.
이러한 IP의 문제점을 보완하기 위해 쓰인다. TCP는 전송된 패킷에대해 추적 ,관리를 한다.
TCP의 대략적인 흐름을 보면 다음 이미지와 같다.

가상회선을 통해 정해진길로 패킷 순서를 보장한다.
구체적인 TCP의 특징을 알아보자.
ip의 비연결성을 보완하기 위해 논리적으로 client와 server를 연결한다. 연결하기 위해 3-way handshaking 방식을 이용한다.
#1:client에서 SYN을 Server에 보냅니다
#2:Server에서 SYN을 정상적으로 수령 받으면 ACK=(수령받은 SYN)+1과 함께 새로운
SYN을 보냅니다
#3:Client에서 SYN을 정상적으로 수령 받으면 ACK=(수령받은 SYN)+1을 보냅니다
->SYN(Synchronize Sequence Number)임의의 숫자를 의미한다
->ACK(Acknowledgement number)
이를 통해 양방향으로 서로 통신이 원할하게 될 수 있음을 확인합니다.
통신을 끊을때는 4-way handshaking 방식을 사용합니다
#1:client에서 연결을 종료하겠다는 의미로 FIN Server에 보냅니다
#2:Server에서 FIN을 정상적으로 수령 받으면 ACK을 보내고 서버 연결을 종료할 준비를 합니다
#3:종료할 준비가 됐다고 알리기 위해 FIN을 Clinet에게 보냅니다
#4:Client에서 FIN을 정상적으로 수령 받으면 ACK를 Server에 보내고 연결을 종료합니다
마지막으로 Server는 ACK를 받고 연결을 종료합니다
통신 방법엔 TCP말고 UDP방식도 있다. UDP 는 TCP 와 다르게 비연결형 프로토콜이다.
UDP의 대략적인 흐름을 보면 다음 이미지와 같다.

데이터그램 패킷은 가상회선과 다르게 패킷별로 독립적인데 이러한 특징때문에 패킷의 순서가 보장되지 않는다.
구체적인 UDP의 특징을 알아보자.
UDP는 TCP와 다르게 따로 연결을 하지 않는다. 연결과정이 없으므로 TCP에 비해 속도가 빠르다. 또한 N:M으로 데이터를 전송할 수도 있다.
UDP는 서로 연결을 하지 않기 때문에 데이터가 잘 오고 갔는지 확인하지 않는다. 그로 인해 데이터의 안정성을 보장할 순 없다.
일반적인 경우엔 데이터의 안정성이 높은
TCP방식을 사용하고 속도가 중요한 실시간 서비스(채팅,스트리밍)등엔UDP를 쓴다