728x90
반응형
IP(Internet Protocol)
클라이언트 - 인터넷 - 서버
→ IP 주소 부여 (클라이언트: 100.100.100.1/ 서버: 200.200.200.2)
역할
- 지정한 IP주소(IP Address)에 데이터 전달
- 패킷(Packet)이라는 통신 단위로 전달
- (IP 패킷(규칙): 출발지 IP, 목적지 IP, 기타) + 메시지(전송 데이터)
한계
- 비연결성
- 패킷 받을 대상 X or 서비스 불능 상태여도 패킷 전송
- ex. PC 꺼져 있음/ 거기 안살고 있어도 우편 보냄
- 패킷 받을 대상 X or 서비스 불능 상태여도 패킷 전송
⇒ 대상 서버가 패킷을 받을 수 있는 상태인지 모름
- 비신뢰성
- 중간에 패킷이 사라지면?
- ex. 멧돼지가 광케이블 끊음
- 패킷이 순서대로 안오면? (약 1500백 바이트로 끊어서 보냄)
- ex. 클라이언트) 1. Hello,/ 2. world! → 서버) 2. world!/ 1. Hello,
- 중간에 패킷이 사라지면?
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
- ex. 인터넷 게임하면서 음악 듣기
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면?
⇒ TCP가 해결
인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층
{이더넷 프레임: {IP: {TCP: {전송 데이터: Hello}}}
- IP 패킷: 출발지 IP, 목적지 IP, 기타 …
- TCP 세그먼트: 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보…
TCP(Transmission Control Protocol, 전송 제어 프로토콜)
- 연결지향 - TCP 3 way handshake (가상 연결)
- 연결을 하고 메시지를 보냄
- connect, 연결 과정 ⇒ 물리적 X 개념적(논리적) O
- 클라이언트 -SYN(synchronize)→ 서버
- 서버 -SYN + ACK→ 클라이언트
- 클라이언트 -ACK (+ 데이터_최근 최적화 O)→ 서버
- 데이터 전송
- 데이터 전달 보증
- 패킷 중간 누락을 알 수 있음
- 클라이언트 -데이터 전송→ 서버
서버 -데이터 잘 받았음→ 클라이언트
- 순서 보장
- 클라이언트 -패킷1, 패킷2, 패킷3 순서로 전송→ 서버
서버: 패킷1, 패킷3, 패킷2 순서로 도착
⇒ 서버 -패킷2부터 다시 보내→ 클라이언트
- 클라이언트 -패킷1, 패킷2, 패킷3 순서로 전송→ 서버
- 신뢰할 수 있는 프로토콜
- 현재 대부분 TCP 사용
UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)
- 하얀 도화지에 비유(기능 거의 X)
- 연결지향 - TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 X, But, 단순하고 빠름
- IP와 거의 같음 + PORT + 체크섬 정도만 추가
- 애플리케이션에서 추가 작업 필요
→ TCP + IP = TCP/IP 패킷: 출발지 IP, PORT, 목적지 IP, PORT, 전송 데이터 …
- IP: 목적지 서버 찾는 것
- ex. 아파트
- PORT: 서버 안 돌아가는 애플리케이션 구분하는 것 = 같은 IP내에서 프로세스 구분
- ex. 몇 동 몇 호 / ex. 게임 8090, 화상통화 21000, 웹 브라우저 10010
- 0 ~ 65535 할당 가능
- 0 ~ 1023: 잘 알려진 포트, 사용하지 X것이 좋음
- FTP - 20, 21
- TELNET - 23
- HTTP - 80
- HTTPS - 443
⇒ IP 기억하기 어렵고 변경할 수 있음 → DNS
DNS(Domain Name System, 도메인 네임 시스템)
- 전화번호
- 도메인 명 → IP주소
- 사용
- 클라이언트 -도메인 명 google.com→ DNS 서버
- DNS 서버 -응답: 200.200.200.2→ 클라이언트
- 클라이언트 -접속: 200.200.200.2→ 서버
728x90
반응형
'Spring | SpringBoot' 카테고리의 다른 글
[모든 개발자를 위한 HTTP 웹 기본 지식] 섹션 3. HTTP 기본 (0) | 2024.05.01 |
---|---|
[모든 개발자를 위한 HTTP 웹 기본 지식] 섹션 2. URI와 웹 브라우저 요청 흐름 (0) | 2024.05.01 |
스프링부트 개념정리(이론) (0) | 2024.04.29 |
[Spring Boot 3.x 를 이용한 RESTful Web Services 개발] 섹션 6. RESTful API 설계 가이드 (0) | 2024.04.29 |
[Spring Boot 3.x 를 이용한 RESTful Web Services 개발] 섹션 5. Java Persistence API 사용 (0) | 2024.04.29 |