CS

IP / TCP / UDP / 패킷 / URL

데브킹덕 2024. 9. 4. 15:36

 

 

 

인터넷 통신이란?

클라이언트와 서버가 직접 통신하지 않고 인터넷을 통해서 통신하는 것

 

 

IP (Internet Protocol)란?

복잡한 인터넷 망에서  통신을 위해 요청을 주고받을 떄 규칙

 

보통 클라이언트 IP 주소에서 서버 IP 주소로 데이터를 보낼때 패킷 통신 단위로 전달하게 된다.

*패킷 (package + bucket) : 데이터 덩어리를 넣은 박스

 

인터넷에서는 수많은 노드들이 있는데, 원하는 목적지까지 여러개의 노드를 타면서 목적지에 도착하게 된다.

IP 패킷에는 출발지 IP 주소, 목적지 IP 주소, 전송 데이터 총 3가지의 정보를 가지고 있다.

 

 

 

IP의 한계점

1. 비연결성

패킷을 받을 대상이 없거나 서버가 꺼져있을때 무조건 전송함

2. 비신뢰성

패킷이 중간에 유실되어도 어떤 패킷이 유실되었는지, 순서를 보장할 수 없다.

 

3.  프로그램 간 구분이 어려움

동일 IP를 사용하는 서버에서 통신하는 어플이 많을 경우 누가 요청했는지 구분하기 어렵다.

 

 

 

그래서 이를 보완해주기 위해 나온게 바로

 

 

 

TCP/UDP

(Transfer Control Protocol / User Datagram Protocol)

인터넷 프로토콜 4계층 중 세번째 계층인 전송 계층이다.

 

 

OSI 7계층

1층: 물리 계층 1000BASE-T, RS-232, RS-485
2층: 데이터 링크 계층 이더넷(Ethernet), PPP, UART
3층: 네트워크 계층 IP, ICMP
4층: 전송 계층 TCP, UDP
5층: 세션 계층 SSH, TLS, RPC
6층: 표현 계층 ASCII, MPEG, JPEG
7층: 응용 계층 HTTP, FTP, Telnet, DHCP

 

 

TCP/IP 4계층

L1 (네트워크 인터페이스) 네트워크 엑세스 계층 (LAN 드라이버, LAN 장비)
L2 (OS) 인터넷 계층
L3 (OS) 전송 계층
L4 (애플리케이션) 응용 계층

 

데이터 전송 순서

1. 프로그램이 Hi 메세지를 생성한다.

2. Socket 라이브러리에서 OS 계층으로 메시지 전달

3. Hi 메세지에 TCP 정보를 한번 씌움

4. IP 관련 데이터 정보를 한번 더씌움 (IP 패킷)

5. 이더넷 프레임이 씌워져서 LAN 카드로 나감 (MAC 주소 등 물리적인 주소 포함)

6. 인터넷으로 데이터 전달됨

 

 

 

 

TCP/ IP 패킷

출발지 IP , 목적지 IP, 데이터 (기본 IP패킷 )

+

TCP 세그먼트(출발지 port, 목적지 port, 전송 제어, 순서, 검증 정보 등)

 

 

 

TCP 의 특징

1. 연결 지향

2. 데이터 전달보증

3. 순서 보증

 

 

 

3way handshake라는 가상 연결 방식으로 통신

클라이언트와 서버가 서로 연결 가능한 상태인지를 확인하는 절차이다. (신뢰성 증가)

데이터 누락을 알 수 있게 해주기 때문에 데이터 전달이 보증됨

TCP 패킷에는 순서아 관련된 정보가 있어 순서 보장해줌

 

 

3way handshake

통신을 하기 에 정확한 전송을 보장하기 위해 상대 컴퓨터와 사전에 연결이 잘되는지 확인하는 과정

 

순서

 

1. 클라이언트에서 SYN 메세지를 보낸다 

(연결해주때연 ~ 하고 요청)

 

2. 서버에서 OK 뜻으로 보내는 ACK와 나도 연결해주뗴연~ 

+ SYN 메세지를 두개 본댄다.

 

3. 클라이언트에서도 응답 확인 뜻으로 ACK를 보낸다.

 

4. 서버는 클라이언트에게 데이터를 전송

 

* SYN - synchronize (접속 요청)

* ACK - acknowledgement (요청 수락)

 

(참고)

전용 랜선 직접 연결이 아니고 논리적인 연결로 간주하며

클라이언트와 서버를 연결하는 노드들은 제외한다.

 

 

 

 

UDP

비연결성 , 비신뢰성 전송 프로토콜

3way handshake 과정이 없고 데이터 전달 및 순서가 보장이 안됨

그럼 왜 쓰냐 PORT와 체크섬이 추가 되었기 때문이다

+ 기능이 적어 내가 원하는 기능을 커스텀 가능

 

 

PORT (항구)

컴퓨터 세부 주소이다.

한번에 두개 이상의 서버와 연결할때,

IP만 보내면 어디서 오는 패킷인지 알 수 없다.

이를 출발지/목적지 포트를 추가하여 구분할 수 있다.

 

0~65535까지 할당이 가능하다.

0~1023은 잘 알려진 포트

ex) FTP - 20,21

HTTP 80

HTTPS- 443

 

ex) 컴퓨터는 하나의 IP를 가지는데 노래듣고 게임하고 동시에 웹서핑도 할 수 있다.

이때 어떤게 게임 패킷이고, 음악 패킷인지 구별하기 어렵다

이것을 구분해줄 수 있는게 포트이다.

 

 

 

체크섬

메세지가 제대로 왔는지 검증해주는 데이터

 

 

 

DNS

Domain Name System

IP주소에 도메인 이름을 등록할 수 있게 해준다.

 

클라이언트에서 특정 도메인을 검색하면, DNS 서버에서 해당하는

도메인 IP 주소를 및 포트 번호 주고, 해당 IP로 접속을 하게 됨

 

 

URI

Uniform Resource Identifier

리소스를 식별하는 통합된 방법

 

 

 

URL 공식화

scheme://[userinfo@]host[:port][/path][?query][#fragment]

 

1. scheme

주로 프로토콜 사용

http, https 를 사용 주로 생략하여 사용

 

2.path

리소스가 있는 경로

 

3. Query

key=value 형태로

?로 시작하고 & 문자열을 사용해 쿼리를 추가 가능

숫자를 적어도 문자열로 모두 변환되기 때문에 쿼리 스트링이라고 함

 

 

4.Fragment

내부 북마크 등으로 사용

#id 형태로 사용

서버로 부터 요청이 가지 않고 내부 페이지 이동에서 사용

 

 

 

전체적인 흐름

1. https://www.devkduck.com/search?q=hello&hl=ko 검색

2. DNS 서버에서 호스트 (devkduck.com) 조회하고 IP , PORT 받아옴

3. 웹 브라우저가 HTTP 요청 메세지를 생성함

4. socket 라이브러리를 통해서 Application -> OS 계층으로 전달

5. TCP / IP 패킷 생성 

GET /search?q=hello&hl=ko HTTP/1.1  Host:www.devkduck.com

 

6. 패킷 정보가 인터넷으로 흘러들어감

7. devkduck 서버에 요청 패킷이 도착

8. 서버에서 TCP / IP 패킷에 HTTP 메시지를 분석함

9.응답 메시지를 만들어 (status, Content type, length등 )

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

10 . 클라이언트 응답 패킷 도착

11. 응답 메시지를 열어서 웹 브라우저 HTML 렌더링

 

'CS' 카테고리의 다른 글

RSA 암호화  (0) 2024.11.05
DFS  (0) 2023.12.13
[CS] 런타임 vs 컴파일타임  (0) 2023.06.28
[Swift] 메모리구조 - 코드, 데이터, 힙, 스택 (Code,Data,Heap,Stack)  (1) 2022.09.20