간단하게 패킷이란?
한번에 전송하는 정보의 단위
쉽게 보면 한 묶음이라고 생각하면 된다.
인터넷 프로토콜 스택 4계층 (오른쪽) 이미지 출처
현재 수많은 프로그램들이 인터넷으로 통신하는데 있어 가장 기반이 되는 프로로콜로 실제 대다수 프로그램은 TCP와 IP로 통신하고있음.
보통 하나로 표현하지만 TCP와 IP는 별개다-
1계층 네트워크 액세스 계층
2계층 인터넷 계층
3계층 전송 계층
4계층 응용 계층
TCP 특징
연결지향 TCP 3 way handshake (가상 연결)
상대랑 나랑 연결이 됬나 확인을 하고 메세지를 보낼떄 가능
간단하게 상대랑 연결됬을때 메세지 보냄.
순서로 보면
클라이언트에서 서버한테 접속 요청 -> 서버가 클라이언트한테 요청을 수락하는 동시에 접속 요청 -> 클라이언트가 요청을 수락 -> 데이터 전송
왜 3 way 인지 했더니 왔다 갔다총 3번 해서 3 way 였음.
요즘에는 최적화가 되서 3번째 부분에서 같이 데이터를 전송한다고 한다.
논리적으로 연결이 됬다고 생각하는 것.
데이터 전달 보증
메세지를 보낸 상황에서 패킷이 누락이됬을떄 내가 알수있는것
데이터를 전송 -> 서버에서 데이터를 잘 받은것을 보내줌
메세지가 잘 전달 됬는지 이해할수 있음.
순서 보장
ex) 패킷을 1,2,3 순서대로 전송 -> 서버가 1,3,2 순서로 도착을 하게됨. -> 서버가 패킷 2번부터 다시 보내라고 보냄.
기본적으로 순서가 잘못 되면 클라이언트가 다시 보냄.
물론 서버에서 최적화 할수 있음.
UDP 특징
기능이 거의 없음
그럼 왜씀.
IP와 거의 같다. +PORT +체크섬 정도만 추가
그럼 UDP의 장점은 뭘까?
소프트웨어에서는 네트워크 서비스나 특정 프로세스를 식별하는 논리 단위.
각 포트는 번호로 구별되며 이 번호를 포트 번호라고 함.
포트 번호는 IP 주소와 함께 쓰여 해당하는 프로토콜에 의해 사용
예를 들어
클라이언트의 IP, PORT가 있고 서버의 IP,PORT가 있을때
클라이언트에서 서버에 IP 주소에 PORT에 데이터를 보냄 -> 서버가 클라이언트 IP, PORT에 결과를 보냄
그럼 서버는 어떻게 클라이언트에 PORT를 알수 있는것인가?
클라이언트에서 애초에 보낼때 출발지 IP, PORT를 보내니까 알수있음.
일단 IP는 기억하기 어렵다! IP는 변경될 수 있다.
전화번호부 같은 서버를 제공을 해준다
이 방법으로 위 2가지를 해결할수 있음.
[출처]