[HTTP] 클라이언트와 서버 간의 통신 (TCP, UDP, IP, DNS)
클라이언트와 서버가 복잡한 인터넷 망을 통해 통신할 때 IP(Internet Protocol)가 필요하다.
IP는 패킷이라는 통신 단위로 지정한 IP주소로 데이터를 전달할 수 있도록 정해놓은 규칙이다.
내 IP와 목적지의 IP를 전송할 데이터를 묶어 위와 같이 IP 패킷을 만든다.
만들어진 패킷을 인터넷 망에 던져놓으면, 노드들끼리 패킷의 목적지와 연관된 노드를 찾는 작업을 반복하며 패킷을 전송한다. (여기서 노드는 출발지와 목적지를 중계하는 서버인 라우터 정도로 생각하자.)
패킷이 목적지에 도착하면 다시 패킷을 만들어 잘 받았다고 말해준다.
IP는 컴퓨터와 컴퓨터간의 통신을 명확히 구현했지만, 몇 가지 문제점이 있다.
나는 패킷을 보내는데 상대방의 컴퓨터는 꺼져있어 받을 수 없다면?
패킷이 가는 중 어떤 문제로 인해 사라지면?
패킷을 분할해서 보냈는데 도착했을 때 순서가 꼬여버리면?
같은 IP를 사용하는 서버에서 둘 이상의 애플리케이션이 사용되고 있으면?
이 문제들을 TCP와 UDP를 도입해서 해결했다.
클라이언트가 서버에게 Hello라는 메세지를 보낸다고 생각해보자.
IP 패킷을 생성하기 전 메세지를 TCP로 둘러싼다.
그 후 IP 패킷을 만들고 랜 카드를 통해 이더넷 프레임을 추가하고 패킷을 인터넷 망으로 보낸다.
전송 제어 프로토콜인 TCP를 통해 앞서 말했던 문제점을 모두 해결한다. (Transmission Control Protocol)
TCP는 연결 지향적이다. (TCP 3 way handshake)
클라이언트가 SYN으로 서버에게 접속을 요청하면, 서버는 SYN과 함께 ACK로 접속을 수락한다. 그 후 클라이언트는 요청한 접속을 ACK으로 수락해 상호 연결된 상태를 만든 후 데이터를 전송한다. (마지막 ACK와 데이터를 함께 전송하기도 한다.)
이 때의 연결은 실제로 라우터를 타고 연결된게 아니고, 논리적으로만 연결된 상태이다.
TCP는 순서를 보장한다.
이 부분은 내부 로직에 따라 좀 더 최적화 할 수 있는 영역이다.
클라이언트가 보낸 순서와 서버가 받은 순서가 일치하지 않으면 서버는 특정 패킷부터 다시 보내라고 요청해 순서를 수정한다.
이 외에도 서버가 데이터를 받은 후 클라이언트에게 성공적으로 받았다고 알려줘서 데이터의 전달을 보증한다.
이 작업들은 모두 TCP를 통해 패킷에 추가 정보를 제공했기에 가능하다.
UDP는 TCP에 비해 제공하는 기능이 적다. (User Datagram Protocol)
상호 연결을 확인하지도 않고, 데이터가 전달됐음도 보증할 수 없고, 데이터가 전달된 순서도 보증하지 못한다.
IP와 거의 같지만 여기서 PORT기능과 체크섬 기능이 추가됐다.
PORT는 내 IP로 들어온 여러 패킷들을 작업에 따라 분류하는 역할을 하고, 체크섬은 데이터가 정확히 왔는지 확인하는 역할을 한다.
TCP는 인터넷에서 대부분 사용되고 여러 기능을 제공해 최적화가 힘들지만, UDP는 많은 기능을 제공하지 않아 최적화의 여지가 남아있다.
내가 좀 더 최적화를 진행할 수 있을 것 같을 때 UDP를 사용하고, 아니라면 TCP를 사용하자.
앞에서 언급했다시피 포트는 같은 IP에서 프로세스를 구분하는 역할을 한다.
TCP / UDP 모두 IP와 PORT를 사용한다.
위 그림과 같이 0 ~ 65535 사이의 포트번호를 통해 한 IP에서 여러 가지 작업을 수행할 수 있도록 한다.
그런데 IP 주소가 중간에 바뀌면 어떻게 통신을 이어나갈까?
이 때 DNS(Domain Name System)을 도입해 해시맵처럼 도메인을 통해 아이피 주소로 접근하게 해 주는 기술이 사용된다.
tistory.com -> 110.1100.11.. 이런식으로..
https://13months.tistory.com/119
자바 공부할 때 배웠던 TCP / DCP.
'Computer Science > Network' 카테고리의 다른 글
[HTTP] HTTP 쿠키와 세션 (0) | 2023.06.12 |
---|---|
[HTTP] 헤더 / 쿠키와 캐시 (0) | 2022.08.13 |
[HTTP] 상태코드 (2) | 2022.08.12 |
[HTTP] HTTP 메서드와 활용 (1) | 2022.08.12 |
[HTTP] URL / HTTP 기본 (1) | 2022.08.12 |
댓글
이 글 공유하기
다른 글
-
[HTTP] 헤더 / 쿠키와 캐시
[HTTP] 헤더 / 쿠키와 캐시
2022.08.13 -
[HTTP] 상태코드
[HTTP] 상태코드
2022.08.12 -
[HTTP] HTTP 메서드와 활용
[HTTP] HTTP 메서드와 활용
2022.08.12 -
[HTTP] URL / HTTP 기본
[HTTP] URL / HTTP 기본
2022.08.12