
클라이언트와 서버가 붙어 있다면 케이블을 연결해서 메세지를 보내면 된다. 하지만 클라이언트와 서버가 떨어져 있다면 이 방법은 불가능하다.
그래서 인터넷망을 통해서 메세지 전달한다.
인터넷은 수많은 중간 노드라고 하는 서버들을 거쳐서 메세지가 보내진다.
어떤 규칙으로 어떻게 넘길까? 이걸 이해하기 위해선 인터넷 프로토콜 또는 IP 프로토콜이라고 하는 IP에 대해 학습이 필요하다.
프로토콜
컴퓨터와 컴퓨터 사이, 또는 한 장치와 다른 장치 사이에서 데이터를 원활히 주고받기 위하여 약속한 여러 가지 규약
예를 들어 복잡한 인터넷망에서 어떤 메세지를 미국에 있는 친구에게 보내야한다.
그러러면 최소한의 규칙이 있어야 한다.
IP 주소라는걸 통해서 가능해진다.

TCP 프로토콜로 해당 문제 해결 가능하다.


1. 메세지 생성
2. SOCKET 라이브러리를 통해 OS 계층에 메세지 전달
3. 메세지를 TCP 정보로 감쌈
4. TCP 정보를 IP 정보로 한번 더 감쌈 -> IP 패킷 생성(IP 정보, TCP 정보, 메세지 정보 포함)
5. 네트워크 인터페이스(LAN 카드)를 통해서 나갈 때 이더넷 프레임이 포함되어 나간다.
이더넷 프레임
랜카드에 등록된 MAC 주소 같은 물리적인 정보
패킷
수화물을 의미하는 패키지 + 덩어리를 뜻하는 버킷의 합성어

TCP의 전송 제어, 순서, 검증 정보가 추가되므로 IP만으로는 해결 되지 않았던 순서 제어 문제나 이런것들이 해결 된다.
전송 제어 프로토콜(Transmission Control Protocol)

1. 클라이언트가 서버에 SYN 요청 보냄
2. 서버가 연결 가능하다면 ACK(접속 요청 수락) 응답과 서버도 클라이언트에게 SYN 요청 보냄
3. 클라이언트가 서버에게 ACK 응답 반환
=> 클라이언트와 서버가 서로 양쪽에 신뢰를 준다.
왜 가상 연결일까?
물리적으로 연결된 것이 아닌 개념적(논리적)으로만 연결된 것
TCP 연결은 실제로 물리적(랜선 등)으로 연결된 것이 아니라, 네트워크를 통해 "연결된 것처럼" 동작하는 것


1. 큰 메세지를 패킷으로 쪼개서 전송
2. 순서가 맞지 않음
3. 잘못 온 순서의 패킷부터 다 버리고 다시 전송 받는다
데이터 전달 보증, 순서 보장 등이 가능한 이유는 TCP 세그먼트 안에 순서, 검증 정보 등이 추가되어 있기 때문이다.
사용자 데이터그램 프로토콜(User Datagram Protocol)
- PORT
같은 IP 주소에서 여러 개의 애플리케이션이 동시에 통신할 때 애플리케이션 패킷을 각각을 구분하는 패킷 구분자 역할을 함- 체크섬
데이터가 전송 중에 손상되지 않았는지 검증하는 값
UDP 헤더에 포함되어 있으며, 수신 측에서 데이터 무결성을 확인할 때 사용한다.
TCP는 3 way handshake, 데이터 전달 보증, 순서 보장을 하려면 시간이 걸린다.
검증 데이터를 넣어 데이터의 양도 크고 전송 속도를 빠르게 만드는 최적화를 할 수 없다.
프로토콜을 최적화 하고 싶으면 UDP를 사용하면 된다.
하얀 도화지 같은 상태라 애플리케이션이 필요한 기능을 직접 만들어 최적화 가능하다.
TCP의 복잡한 검증 과정 없이 속도를 최적화할 수 있기 때문에 UDP가 각광받고 있다.

TCP에는 출발지 port와 목적지 port가 있다.

내 포트를 어떻게 알지?

TCP/IP 패킷에 출발지, 목적지의 IP정보와 PORT 정보까지 보내기 때문이다.
쉽게 비유하자면 IP는 아파트, PORT 동호수 같은 개념이다.
IP는 기억하기 어렵고 변경될 수 있다.
도메인 네임 시스템(Domain Name System)

중간에 IP 주소가 변경되더라도 DNS 서버의 IP 주소만 변경하고 도메인명으로 호출하면 된다.
출처
김영한 - 모든 개발자를 위한 HTTP 웹 기본 지식
이 블로그에 포함된 모든 코드와 이미지는 원작자이신 김영한 강사님의 저작권에 귀속됩니다.