클라이언트/서버는 두 개의 컴퓨터 프로그램 사이에 이루어지는 역할 관계를 나타내는 것이다. 클라이언트는 다른 프로그램에게 서비스를 요청하는 프로그램이며, 서버는 그 요청에 대해 응답을 해주는 프로그램이다.
클라이언트가 'Hello, world!'라는 메세지를 인터넷을 통해 보내고자 할 때 인터넷 망은 우리가 생각한 것보다 훨씬 더 복잡한 망으로 이뤄져있을 수 있다.
복잡한 인터넷 망에서 데이터는 어떻게 안전하게 넘어갈 수 있을까?
송신 호스트와 수신 호스트가 패킷 교환 네트워크에서 정보를 주고받는 데 사용하는 정보 위주의 규약이며, OSI 네트워크 계층에서 호스트의 주소지정과 패킷 분할 및 조립 기능을 담당한다.
① 비연결성 : 패킷을 받는 대상이 없거나 서비스 불능 상태여도 패킷 전송
ㄴ 목적지의 컴퓨터가 패킷을 받을 수 있는 상태인지 확인을 하지 않는다.
② 비신뢰성 : 중간에 패킷이 사라지거나 순서대로 오는 것에 대해 보장을 해주지 않음
③ 프로그램 구분 : 같은 IP를 사용하는 서버에서 통신하는 애플리케이션을 구분하지 못함
IP 프로토콜의 한계점을 보완하기 위해 사용되며, 두 개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 중요한 네트워크 프로토콜이다. TCP는 데이터와 패킷이 보내진 순서대로 전달하는 것을 보장해준다.
① 응용프로그램에 의해서 전달하고자 하는 메시지를 생성하고 socket 라이브러리를 통해 os계층에 전달한다.
② 메시지에 생성된 TCP 정보를 씌우고 IP에 전달하여 TCP 데이터를 포함한 IP 패킷을 생성한다.
③ LAN카드에 의해 이더넷 프레임, 즉 물리적 주소가 포함되어 전송된다.
TCP 3way handshake
TCP 3way handshake를 통해 클라이언트와 서버가 연결되면 서로를 신뢰할 수 있게 되며 데이터를 전송할 수 있게 된다. 이때의 연결은 실제로 이뤄진 것이 아닌 논리적으로만 연결된 것이다.
단점
3way handshake을 하면 전송속도가 느려지며 패킷을 추가하면 데이터 양도 크고 전송속도도 빠르게 하기 어렵다.
SYN : 접속 요청
ACK : 요청 수락
서버가 순서에 맞지 않는 패킷을 전달받은 경우, 클라이언트에게 패킷 재전송을 요청한다.
IP를 사용하는 네트워크 내에서 컴퓨터들 간에 메시지들이 교환될 때 제한된 서비스만을 제공하는 통신 프로토콜이다.
네트워크 서비스나 특정 프로세스를 식별하는 논리 단위이다. 주로 포트를 사용하는 프로토콜은 전송 계층 프로토콜이라 하며, 예를 들어 전송 제어 프로토콜(TCP)와 사용자 데이터그램 프로토콜(UDP)가 있다. 각 포트는 번호로 구별되며 이 번호를 포트 번호라고 한다.
클라이언트가 한번에 여러 서버와 통신을 해야할 때, 서버에서 보내는 패킷이 게임에 필요한 패킷 응답인지, 화상통화에 필요한 패킷 응답인지 구분할 수 있게 해주는 것이 PORT이다.
TCP에는 이러한 port정보를 포함하고 있으며 TCP와 IP를 합쳐서 TCP/IP패킷이라 한다.
① 클라이언트가 도메인 명으로 DNS 서버에 요청을 한다.
② DNS 서버는 해당 도메인 명으로 저장된 IP를 알려준다.
③ 클라이언트는 응답받은 IP 주소로 서버에 요청한다.
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/