인터넷 통신
출발지 IP -> 목적지 IP, 메시지를 기재해 인터넷 망에 던져준다. 그러면 IP 프로토콜내에서 출발지부터 목적지까지 메시지를 들고 갈 수 있다.
비연결성
비신뢰성
중간에 패킷이 사라지면?
패킷이 순서대로 안오면?
프로그램 구분
클라이언트는 대상 서버가 패킷을 받을 수 상태인지 알 수가 없다. 아무리 요청을 해도 서버가 꺼져 있으면 요청을 받을 수 가 없다.
클라이언트에서 보낸 데이터는 여러 데이터로 쪼개져서 노드를 타게 되는데 이 때 서버에 도착하는 데이터가 요청 데이터와 순서가 완전 일치하다고 보장 할 수는 없다.
이러한 문제를 해결하는 방법이 TCP프로토콜 이다.
TCP 3 way handshake
클라이언트 -> 서버로 연결 요청 신호 (SYN)
요청 받은 서버 -> 클라이언트로 요청에 대한 수락과 클라이언트에 대한 접속 요청 (SYN + ACK)
요청을 받은 클라이언트도 요청에 대한 수락을 보내줌 (ACK)
ACK와 함께 데이터 전송이 가능함!
이러한 방식으로 서버에 이상이나 종료된 상태면 요청에 대한 수락이 오지않아 서비스 불능일 때 대비 가능
클라이언트가 데이터를 보내면 서버도 클라이언트로 요청에 대한 답변을 보내준다. 이를 통해 데이터 전달에 대한 불확실성이 대비가 된다.
순서가 잘못된 데이터가 서버로 도착하면, 서버는 클라이언트에게 알린 후 데이터를 다시 보내라는 요청을 한다
이런 과정들은 TCP 데이터 안에 전송 제어 정보, 순서 정보, 검증 정보들이 추가되어 같이 전달되기 때문에 신뢰할 수 있는 프로토콜 이라고 얘기를 한다.
IP프로토콜과 거의 유사하나,
PORT를 통해 패킷을 구별하고, 메시지에 대한 검증 정도만 추가 되었다.
그럼 TCP대신 UDP를 쓸 때의 이유는 뭘까?
UDP는 데이터 전달 및 순서가 보장되진않지만 일단 빠르다. 그리고 UDP(User Datagram Protocol)은 사용자 데이터 프로토콜이라는 뜻으로 TCP와 다르게 UDP는 확장성에 대해 열려있어 수정이 가능하다.
해당 포스팅은 인프런 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 수강하며 작성하였습니다.
즐겁게 읽었습니다. 유용한 정보 감사합니다.