대상 서버가 패킷을 받을 수 있는 상태인지 모른다.
패킷 = 수화물, 그리고 덩어리를 뜻함 택배물이라고 생각하면 이해하기가 쉽다.
[애플리케이션] 네트워크 게임 채팅 프로그램 (Hello 입력) --> socket 라이브러리 (입력한 Hello 운반중) --> [OS] TCP (입력한 Hello TCP 씌워서 운반중) --> [OS] IP(Internet Protocol) 입력한 Hello IP 씌워서 운반중 --> [네트워크 인터페이스] LAN 드라이버 LAN 장비 ====> Ethernet Frame에 씌워져서 나가게된다.
출발지 PORT, 목적지 PORT, 전송제어, 순서, 검증 정보
전송 제어 프로토콜(Transmission Control Protocol)
연결지향 TCP 3 way handshake(가상연결) : 연결이 되어야 메시지를 전송한다.
클라이언트에서 서버로 syn를 보낸다. 그럼 서버가 알아먹고 SYN + ACK를 보내고 클라이언트도 알겠다고 ACK를 보낸다 (에크에크) 총 3번 주고받아서 '쓰리 웨이 핸드쉐이크'라고 함.
데이터 전달 보증 (메시지 보내면 패킷이 중간에 누락되면 반대편에서 메시지를 못받았다는 것을 알려준다)
순서 보장 : 클라이언트에서 서버로 패킷1, 패킷2, 패킷3 순서로 전송했다. 그럼 예를들어 서버에 도착한 것은 1,3,2 순서로 도착. 그럼 서버에서 패킷 2부터 다시 클라이언트로 돌려보낸다. 그러면 클라이언트가 2번부터 잘못됐구나 인식하고 다시 전송한다.
그렇게 연결이 되고 나면 마지막에 데이터 전송을 도와준다.
사용자 데이터그램 프로토콜
마무리 정리하자면 IP와 거의 같다고 보면 된다. PORT 체크섬 정도만 추가(이 메시지에 대해서 제대로 맞는지 검증해주는 것) 애플리케이션에서 추가 작업이 필요하다.
📌 코드를 좀 더 최적화 시켜주고 싶다면 TCP는 그대로 쓰고 UDP만 더 개선시키면 된다.
내가 원하는 것을 더 레벨업 시켜서 만들어 내서 최적화 할 수 있다고 한다. 근데 시간이 지나면서 TCP 프로토콜이 90프로 점유율 했다고 함. 시대가 변하면서 최근에는 UDP가 뜨고있다고 한다. 웹 브라우저에서 HTTP 통신할 때 최근에 3스펙(3WAY 핸드쉐킹)이 나왔는데 여기서 TCP 3핸드쉐킹 할 때 (씽 보내고 에크보내고 씽에크씽엨) 이렇게 해야되는데 이런거를 다 줄여보자! 해서 더 최적화 하면서 UDP 프로토콜을 사용하면서 요즘들어 굉장히 뜨고있다고 한다~
하지만 기본적으로는 TCP 프로토콜만 이해해도 괜찮다.