인터넷 통신
인터넷에서 컴퓨터 둘은 어떻게 통신할까?
클라이언트가 "Hello World" 문자열을 전송하면
서버는 그 문자열을 받고 "OK"라는 사인을 전송한다
이 문자열과 신호를 보낼 때 인터넷 망이 쓰인다
인터넷 망은 복잡하게 이루어져 있다
여러 대의 서버(노드)를 거쳐가서 최종 도달해야하는 서버에 도착한다
그러면 복잡한 인터넷 망에서 멀리 있는 컴퓨터(서버)에 "Hello World"를 보내야할 때 무엇이 필요할까?
IP(인터넷 프로토콜)
서버에 데이터를 보낼 때 가장 먼저 필요한 것은 목적지의 주소이다
우리가 사는 집의 주소가 있듯이, 컴퓨터(서버)마다 IP주소가 있다
어디로 보낼 지 정보가 필요하다
IP(= 인터넷 프로토콜)의 역할
- 지정한 IP 주소(IP Address)에 데이터 전달
- 패킷(Packet)이라는 통신 단위로 데이터 전달
IP 패킷 정보
데이터를 전송할 때 IP 패킷에 감싸 전송한다
패킷의 포함되어있는 정보에는
출발지 IP, 도착지 IP 등이 포함되어 있다
클라이언트 패킷 전달
전송할 데이터가 들어있는 IP 패킷을 전달하려고 할 때 이뤄지는 과정이다
1. 전송할 데이터를 출발지, 도착지 IP 등 여러가지 정보를 포함한 IP 패킷에 감싸서 인터넷 망에 던진다(전송을 시작한다)
2. 전송하는 과정에서 여러 대의 노드(컴퓨터=서버)를 거쳐가면서 목적지로 보낼 수 있는 노드를 찾으며 목적지로 이동한다
(IP 프로토콜(=통신규약)의 규칙을 따르면서 패킷을 전송한다)
3. 데이터가 목적지에 도착한다
(클라이언트에서 서버로 패킷을 전송할 때 거쳐가는 노드가 다를 수 있음)
서버 패킷 전달
전송할 데이터가 목적지에 도착한 뒤, 데이터를 받은 서버(=컴퓨터)는 데이터를 받았다는 정보를 전송한다다
그 과정은
1. 데이터를 받았다는 정보가 담긴 데이터를 출발지/목적지 IP와 그 이외의 정보가 담긴 IP 패킷으로 감싼 뒤, 패킷을 전송한다
2. 목적지로 전송할 수 있는 노드(=컴퓨터=서버)를 거쳐가며 패킷을 전송한다
3. 최종 목적지에 도달한다
(서버에서 클라이언트로 패킷을 전송할 때 거쳐가는 노드가 다를 수 있음)
[IP 프로토콜의 한계]
- 비연결성
(비연결성: 요청을 받을 서버가 있겠지 하며 요청을 보냈을 떄 그 PC가 꺼져있으면?)
패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
: 이 사실을 요청 보낸 서버는 모름
- 비신뢰성
(비신뢰성: 신뢰할 수 없다)
중간에 패킷이 사라지면?
패킷이 순서대로 안 오면?
- 프로그램 구분
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
: 구분할 수 없음
[비연결성] 대상이 서비스 불능일 때 패킷 전송
요청 받는 서버가 켜져있는 지, 꺼져있는 지 모르는 상태에서 데이터를 전송한다면
서버에 데이터가 도착하지 못한다 : 아무런 처리를 하지 못한다, OK 사인도 못 보낸다
[비신뢰성] 패킷 소실
인터넷 망은 여러 대의 서버를 거쳐가는 것이다
만약 중간에 서버에 문제가 생긴다면?
-> 패킷이 유실된다
[비신뢰성] 패킷 전달 순서 문제 발생
전송하려는 데이터의 용량이 엄청 클 경우 (주로 1500bytes)
데이터를 나눠서 전송한다
하지만, 데이터를 전송할 때 전송한 순서대로 도착하지 않을 수도 있다
순서가 뒤바뀌어서 도착할 수도 있다
(예: 데이터 전송 시 거쳐가는 경로가 다른 경우)
그래서 IP 프로토콜(=통신규약)만으로 패킷 전달 순서 문제를 해결할 수 없다
-> TCP 프로토콜 등장
TCP/UDP
인터넷 프로토콜 스택의 4계층
인터넷 프로토콜(=통신 규약)에는 4개의 계층이 있다
4. 어플리케이션 계층 - HTTP, FTP
3. 전송 계층 - TCP, UDP
2. 인터넷 계층 - IP
1. 네트워크 인터페이스 계층 (예: 랜카드 등) -> 하드웨어 말하는것 같음
인터넷 계층 IP에 전송 계층 TCP, UDP를 얹혀서 보완을 해준다
프로토콜 계층
프로토콜 계층의 더 자세한 구조는 아래와 같이 구성되어 있다
전송할 데이터를 가지고 패킷을 만드는 과정이다
1. 프로그램이 Hello World 메시지 생성
2. SOCKET 라이브러리를 통해 OS 계층에 메시지 전달
3. TCP 정보 생성, 메시지 데이터 포함
4. IP 패킷 생성, TCP 데이터 포함
5. 네트워크 인터페이스를 거쳐 이더넷 프레임을 씌워 서버에 전송
TCP/IP 패킷 정보
전송 데이터를 TCP 세그먼트에 감싸고 IP 패킷으로 감싼다
TCP 세그먼트에는 출발지 포트, 목적지 포트, 전송제어, 순서, 검증 정보 등의 정보가 포함되어 있다
TCP 세그먼트로 IP 프로토콜만 사용할 때 생겼던 문제들을 해결할 수 있게 되었다
TCP
: 전송 제어 프로토콜(Transmission Control Protocol)
- 전송을 어떻게 할 지 제어함
TCP의 특징
- 연결지향 - TCP 3 way handshake(가상 연결)
: 연결을 먼저 한 다음 메시지를 전송 -> 전송하려는 서버의 상태(켜져있는지 등)를 알 수 있음
- 데이터 전달 보증
전송 도중 데이터가 누락되면 메시지를 못 받았다는 것을 알 수 있음
- 순서 보장
- 신뢰할 수 있는 프로토콜콜
- 현재는 대부분 TCP 사용
[TCP 특징] 연결지향 - TCP 3 way handshake(가상 연결)
3 way handshake의 과정
1. 클라이언트에서 서버로 SYN이라는 메시지 전송
2. 서버가 전달 받으면 받았다는 의미인 ACK라는 메시지를 클라이언트에 전송
&& 나도 연결해 달라는 의미인 SYN을 같이 전송
3. 알겠다는 의미인 ACK 전송
4. 연결 후 전달하려는 데이터 전송
최근엔 기술 발달로 인해 3번에서 ACK와 데이터도 함께 전송
[TCP 특징] 데이터 전달 보증
전송 도중 데이터가 누락되면 메시지를 못 받았다는 것을 알 수 있음
[TCP 특징] 순서 보장
UDP
: 사용자 데이터그램 프로토콜(User Datagram Protocol)
UDP 특징
- 하얀 도화지에 비유(기능이 거의 없음)
IP랑 거의 같음 + 포트(어느 어플리케이션의 패킷인지 구분해주는 용도)여
- 연결지향 - TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
결론
- IP와 거의 같다 + 포트 + 체크섬(메시지가 제대로 왔는 지 검증해주는 용도)
- 어플리케이션에서 추가 작업 필요
'HTTP' 카테고리의 다른 글
HTTP) URI와 웹 브라우저 요청 흐름 - URI (0) | 2022.01.31 |
---|