👩💻 인터넷 네트워크
📌 인터넷 통신
✏️인터넷에서 컴퓨터 둘은 어떻게 통신할까?
만약에 내 PC가 전달해야 하는 PC가 굉장히 멀리 있으면 인터넷망이라는걸 통해서 메세지를 보내야 한다.
하지만 인터넷은 단순하지 않아 수 많은 중간 노드라고 하는 서버를 거쳐서 메세지가 도착하게 된다.
그럼 도대체 어떤 규칙으로 어떻게 넘어갈까 ?
📌 IP(인터넷 프로토콜)
✏️IP (인터넷 프로토콜)
: 지정한 IP 주소에 데이터를 전달하며, 패킷(Packet)이라는 통신 단위로 데이터를 전달한다.
메세지를 그냥 보내는 것이 아니라 IP 패킷 이라는 규칙이 있다.(나의 IP, 미국에 있는 친구IP, 기타 . . . , 전송데이터)
IP 프로토콜에 의해서 서버들이 규약을 따르고 있기때문에 (목적지IP, 출발지IP 등)다 이해를 하며 노드끼리 던진다.
미국 친구의IP도 똑같이 던진다.
"IP 프로토콜의 한계"
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송(친구가 컴퓨터를 꺼놔도 보냄, 근데 나는 모름)
- 비신뢰성
- 중간에 패킷이 사라지면?
- 패킷이 순서대로 안오면?
- 메세지가 1500바이트를 넘으면 이것을 끊어서 보내게 되는데 헬로가 1500바이트, 월드가 1500바이트라고 했을때 나는 Hello를 먼저 보내고 world를 보냈지만 Hello와 World가 무수히 노드를 타면서 World가 먼저 도착할 수도 있다.
- 프로그램 구분
- 한 PC에서 게임도 하고 음악도 듣고 이러면 IP가 같아 여러 애플리케이션이 같은 IP를 쓰고있는데, 이건 어떻게 구별 할 것인가 ? 하는 한계
📌 TCP, UDP
✏️인터넷 프로토콜 스택의 4계층
"프로토콜 계층"
- 소켓 라이브러리를 통해서 OS 계층에 "Hello"라는 메세지를 넘긴다.
- OS계층에서 TCP가 "Hello"라는 메세지에 TCP 정보를 씌운다.
- TCP 정보를 씌운 위에 밖에 IP 정보를 씌우게 된다. => IP 패킷 생성됨
- IP패킷이 생성 되었고 네트워크 인터페이스를 통해서 Ethernet frame을 통해서 나가게 됨
✏️TCP/IP 패킷 정보
TCP 정보에는 전송 제어, 순서, 검증등이 추가 되면서 IP에서 해결이 안 됐던 순서 제어등의 문제가 해결 된다
✏️TCP 특징
: 전송 제어 프로토콜(Transmission Control Protocol)
- 연결지향 - TCP 3 way handshake (친구와 연결이 되어있는지 먼저 확인 후 메세지를 보냄)
- 데이터 전달 보증 (전송 메세지가 누락되면 내가 알 수 있음)
- 순서 보장
- 신뢰할 수 있는 프로토콜
🔍"TCP 3 way handshake"란?
: 이렇게 3 way handshaking을 하면 클라이언트도 서버를 믿을 수 있고, 서버도 클라이언트를 믿을 수 있으며 SYN, SYN+ACK, ACK 세번 주고 받음. 그럼 두 곳에서 연결이 되었음을 인식하고 바로 그 다음 데이터를 전송함 (서버가 꺼져있을시, 처음 SYN을 보냈을 때 서버에서 SYN,ACK 요청이 없을 것)
SYN: 접속 요청 (SYN이라는 메세지를 보냄 "나 연결해줘")
ACK: 요청 수락("알았어", 메세지를 클라이언트에 보내면서 SYN을 보내며 "나도 연결해줘")
ACK:("알았어" - 연결)
🔍"데이터 전달 보증" 및 "순서 보장"
: TCP IP에서는 내가 데이터를 보냈을 때 서버에서 잘 받았다고 나한테 보내줌. 서버에서 아무 응답이 없으면 서버가 데이터를 못 받은 것
: 기본적으로 1번다음 2번이 와야하는데 3번이 왔을 경우, 다 버리고 패킷 2번부터 다시 보낸다.
✏️UDP
:사용자 데이터그램 프로토콜(User Datagram Protocol)
- 하얀 도화지에 비유(기능이 거의 없음)
- 연결지향 - TCP 3 way handshacke 도 없음
- 데이터 전달 보증, 순서 보장 안됨 (데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름)
- 정리
- IP와 거의 같지만 PORT가 추가되며, (내가 하나의 PC로 여러개의 동작을 할때 (ex) 게임을 하면서 음악을 들음, 내 IP로 여러 패킷이 오게 되는데 게임용 포트, 음악용 포트 등으로 구분 해줄 때 쓰는듯? )체크섬이 추가된다 (메세지에 대해서 제대로 맞는지 검증해주는)
- 애플리케이션에서 추가 작업 필요
📌 PORT
✏️PORT란 무엇인가?
: port는 영어로 항구라는 뜻으로, 같은 IP 내에서 프로세스를 구분하는 것
: 예를 들어서 우리의 PC에서 게임을 하면서도 화상통화를 하고, 웹 브라우저 요청도 하고있다. 이렇게 되면 한 번에 하나의 클라이언트가 여러개의 서버와 통신해야한다. 하지만 서버에서 패킷이 날아올텐데, 이것이 게임에서 필요한 패킷인지, 웹 브라우저 요청에서 응답 결과로 오는 패킷인지 알 수 없다(보낼때도 마찬가지).
: 전에 봤던 TCP 정보를 보면 출발지 PORT, 목적지 PORT라는 것이 있다. 이것은 IP에 PORT라는 개념도 있는 것 이다.
"PORT" - 같은 IP 내에서 프로세스 구분
: 정리를 해보면 같은 IP내에서 프로세스를 구분하는 것이 포트이다.
게임은 8090 포트, 화상통화 21000포트, 웹 브라우저 10010 포트에 연결해놓고 목적지 포트를 11220 포트로 연결하여 보낸다.
예시를 들자면 아파트는 IP고 한 사람이 사는 ~호, 가 포트라고 할 수 있다.
📌 DNS
✏️DNS란?
:도메인 네임 시스템(Domain Name System)
- IP는 100.100.100.1, 200.200200.2.?? 등으로 IP는 길어서 기억하기가 어렵고, 변경이 될 수 있다.
- DNS는 도메인 명을 이러한 IP 주소로 변환하는 것을 말한다.
- DNS 서버에 도메인을 등록할 수가 있다.
- 도메인을 사서 등록하면 클라이언트가 먼저 도메인으로 찾게 되고 DNS서버가 이것을 응답해준다.
"인터넷 네크워크 정리"
복잡한 인터넷 망을 통해서 메세지를 보내기 위해선 인터넷 프로토콜이라고 하는 IP가 있어야하는데 이 IP 프로토콜만으로는 메세지가 잘 도착했는지 등을 알수도 없고 PORT도 없다. 이런거에 대한 TCP 프로토콜이 해결해준다.
그리고 UDP라는 것도 있엇는데 UDP는 PORT만 추가된 IP라고 할 수있다.
PORT는 같은 IP안에서 동작하는 통신할 애플리케이션을 구분하기 위해서 사용하고, DNS는 IP는 변하기 쉽고 기억하기 어려워 도메인 명으로 등록해서 쉽게 사용할 수 있도록 도와준다.
'CS > HTTP' 카테고리의 다른 글
[HTTP] 모든 개발자를 위한 HTTP 웹 기본 지식 - 6 (0) | 2024.01.03 |
---|---|
[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 5 (0) | 2024.01.03 |
[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 4 (0) | 2023.12.28 |
[HTTP]모든 개발자를 위한 HTTP 웹 기본 지식 - 3 (0) | 2023.12.26 |
[HTTP] 모든 개발자를 위한 HTTP 웹 기본 지식 - 2 (0) | 2023.11.27 |