인터넷 통신은 어떻게 이루어질까?
주소지라고 생각하면 좋다.
우리가 택배를 시킬 때 (데이터를 요청할 때) 배송지를 적어야 하는 것 처럼,
지정한 IP주소로, 패킷 단위로 데이터를 전달한다.
출발지 IP, 목적지 IP, 기타 데이터 등으로 전송데이터를 감싼다.

클라이언트, 서버는 IP 패킷에 담긴 정보에 따라 정보를 보내고, 받는다.

• 비연결성
패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
• 비신뢰성
중간에 패킷이 사라지면?
패킷이 순서대로 안오면?
• 프로그램 구분
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
얘를 해결 하는 것이 TCP/UDP


소켓 라이브러리가 Hello World라는 메세지를 OS로 보내고, OS의 TCP, IP패킷이 순서대로 메세지를 감싸 네트워크 인터페이스로 보낸다. 여기서 또 이더넷 프레임으로 한번 더 감싸 서버로 전송한다.

TCP 세그먼트를 통해 전송 제어, 순서 등 기존 IP패킷으로 해결할 수 없었던 정보들을 집어넣는다.

요즘은 최적화가 잘 되어서 3번의 ACK를 보낼 때 데이터도 같이 전송한다고 함
개념적으로만 연결 된 것이다!


신뢰할 수 있는 프로토콜. 현재는 대부분 TCP 사용
UDP는 TCP와 같은 계층의 프로토콜
• 하얀 도화지에 비유(기능이 거의 없음)
• 연결지향 X - TCP 3 way handshake X
• 데이터 전달 보증 X
• 순서 보장 X
• 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
정리
• IP와 거의 같다. +PORT +체크섬 정도만 추가
• 애플리케이션에서 추가 작업 필요

클라이언트가 IP가 필요한 (게임, 화상통화 등) 여러 프로그램을 돌리고 있을 때, 서버로부터 받은 데이터를 어느 프로그램에 써야하는지 알 수가 없다. 반대로도 마찬가지
이를 해결하는 것이 PORT!
같은 IP 내에서 프로세스 구분을 시켜준다
포트에 대한 정보는 TCP에 담겨져있다.
따라서 클라이언트/서버는 데이터를 어디로 받아야하는지, 보내야하는지 알 수 있다.
IP는 기억하기 어려울 뿐더러, 변경될 수 있다.
DNS 서버는 전화번호부같은 서버를 제공해준다. 이는 도메인 명을 IP주소로 바꿔준다.