인터넷이 어떤 식으로 인터넷 상에서 통신이 일어나는지 보기 위해
IP , TCP , UDP , PORT , DNS 에 대해서 알아보도록 하자
인터넷 상에서 컴퓨터 둘은 어떻게 통신할까?
컴퓨터 두 대가 바로 옆에 붙어있다면 케이블을 연결해서 통신할 수 있을 것이다.
하지만 두 컴퓨터가 멀리 떨어져 있다면?

두 컴퓨터가 통신하기 위해서는 케이블과 위성혹은 수많은 중간 노드라고 하는
이 서버들을 거쳐서 메세지가 안전하게 넘어가야 한다.
이런 복잡한 상황속에서 어떤 규칙으로 메세지가 안전하게 도착을 할 수 있을까?
복잡한 인터넷망에서 내 컴퓨터에서 다른 서버로 요청을 보내기 위해서는 IP 주소가 필요하다.

예를 들어 클라이언트인 내 컴퓨터의 IP주소를 100.100.100.1이라고 하고
메세지를 보내야 되는 상대방의 컴퓨터인 서버의 IP주소를 200.200.200.2 라고 하자.
패킷

패킷에 전송 데이터와 함께 출발지 IP,목적지 IP 등을 넣어 데이터를 전송한다.
(패킷의 의미는 데이터 덩어리,전송하는 데이터의 단위정도 라고 생각하면 된다.)

인터넷망은 IP프로토콜에 의해서 서버들이 규약을 따르고 있기 때문에
IP주소를 보고 출발지와 목적지를 이해를 할 수 있다.
결국 이 규약과 IP주소를 통해 우리가 원하는 목적지에 데이터를 정확히 전달할 수 있다.
IP프로토콜을 통해서 출발지 주소와 목적지 주소는 확인할 수 있지만
이런 문제는 어떻게 해결할 수 있을까?
IP프로토콜에서 발생했던 수많은 문제들을 TCP 프로토콜을 통해 해결할 수 있다.

우리가 미국에 있는 친구한테 Hello,world!라는 메세지를 전송을 하고 싶다고 가정을 해보자.
처음으로 메세지를 생성하여 소켓 라이브러리를 통해 전달한다.
소켓 라이브러리를 통해 OS계층에 메세지를 넘기면 메세지 데이터가 포함된 TCP 정보를 생성한다.
또 TCP 정보 밖에다가 IP와 관련된 정보(위에서 말한 IP주소 등)를 추가하여 IP패킷을 생성한다.

TCP 세그먼트(TCP 데이터)에는 우선 우리가 전송하려는 전송 데이터를 포함하고
출발지 PORT,목적지 PORT,전송 제어,순서,검증 정보 등이 들어간다.
이를 통해 IP만으로 해결이 안 됐던 순서 제어 문제들이 해결된다.
전송 제어 프로토콜 (Transmission Control Protocol)

SYN : 연결 요청 / ACK : 요청을 잘 받았다는 확인
1. 클라이언트에서 서버로 요청을 보낼때 먼저 SYN(Synchronizer)이라는 요청 메세지를 보낸다.
2. 서버에서 싱크를 받게되면 ACK(Acknowledge)라는 확인 메세지와 SYN를 보낸다.
3. 클라이언트가 서버에서 보낸 메세지를 받게 되면 다시 서버에 ACK를 보낸다.
4. 3번의 메시지를 주고 받으면서 연결이 안정적으로 성립된다.
➡️ 서버(상대방)가 꺼져있으면 SYN(요청)을 보내도 ACK(확인)가 돌아오지 않아 데이터 전송을 하지 않음.
(비연결성 해결)
➡️ 데이터를 보낼때마다 상대방은 데이터를 받으면 ACK(확인)를 돌려준다.(비신뢰성 해결)
➡️ 데이터를 보낼때 시퀀스를 함께 보내 데이터 순서를 보장한다.
(데이터 순서가 안맞으면 안맞는 부분부터 재전송)
사용자 데이터그램 프로토콜(User Datagram Protocol)
체크섬: 데이터가 전송 중에 손상되었는지 확인하는 숫자값
내가 컴퓨터로 게임도 하고 화상통화도 하고 웹 브라우저에서 유튜브를 틀게 되면
한번에 클라이언트 PC가 여러개의 서버와 통신해야 한다.
요청을 보내면 응답은 IP패킷들로 날아올텐데 IP패킷에는 목적지 주소가 있기 때문에
정확히 내 PC에 도착할 것이다.
하지만 각 응답들이 어떤 애플리케이션으로 가야하는지 어떻게 알 수 있을까?

TCP / IP 패킷을 다시 한번 보자.
TCP 세그먼트 안에는 출발지 PORT와 목적지 PORT가 있다.
IP주소로 목적지를 찾게 되면 PORT번호로 우리는 정확한 애플리케이션을 찾을 수 있다.
쉽게 말하면 IP주소는 내가 사는 아파트 주소(XX아파트), PORT번호는 동,호수(101동 202호)이다.

이와 같이 같은 PC내에서 서로 다른 PORT번호로 어떤 애플리케이션이 응답을 받을 지 정할 수 있다!
IP는 기억하기 어렵다.
IP는 변경될 수 있다.

도메인 이름을 사서 등록을 하게 되면 해당 도메인의 IP주소 요청을 보내면 IP주소를 반환해준다.
IP주소가 바뀌어도 해당 도메인의 IP를 DNS서버 상에서 변경을 하면 문제없이 접근을 할 수 있다.
⭐정리
글에 포함된 모든 내용과 자료는 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 정리했습니다.