[모든 개발자를 위한 HTTP 웹 기본 지식] 섹션 1. 인터넷 네트워크
1. IP(Internet Protocol)
- 클라이언트와 서버에 IP 주소를 부여함
IP의 역할
- 지정한 IP 주소(IP Address)에 데이터 전달
- 통신 단위 : 패킷(Packet)
💡 패킷(Packet)
- IP 패킷 통신 단위
- IP 패킷에 담긴 정보
- 헤더 : 출발지 IP, 목적지 IP, 기타…
- 데이터 : 전송 데이터
- 패킷 전달
- 패킷을 전달하여 클라이언트와 서버 간에 통신
- 출발지 IP -> IP 패킷을 인터넷 망에 던짐 -> 서버들이 모두 IP 규약을 따르고 있어서 목적지 IP로 갈 수 있는 노드에게 던짐 -> 목적지 IP에 도착
- 요청, 응답 시의 전달 경로는 서로 다를 수 있음
IP 프로토콜의 한계
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 클라이언트는 대상 서버가 패킷을 받을 수 있는 상태인지 모름
- 서버가 서비스 불능상태여도 일단 패킷을 전송하고 사라짐
- 편지 보낼 때 이 주소에 그 사람이 사는지 아닌지 모르고 보내는 것처럼
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 비신뢰성
- 중간에 패킷이 사라지면?
- 패킷 여러 개 던졌는데 패킷이 순서대로 도착하지 않는다면? (순서대로 도착하지 않을 수 있음)
- 중간에 노드가 꺼지거나 문제가 생기면 패킷이 소실되고, 소실되어도 알 수 없음
- 프로그램 구분이 필요한 경우
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면? ex. 인터넷하면서 음악 듣기
-
패킷의 용량이 크면 여러 패킷으로 끊어서 보내는데 (문자의 경우 1500 byte 정도), 최단노드를 찾아서 보내므로 순서가 바뀌어서 도착할수도 있음
예) 클라이언트 : Hello, world! -> 서버 : world!, Hello
→ 이 문제들을 TCP가 해결해 줌!
2. TCP, UDP
인터넷 프로토콜 스택의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층 : LAN 카드 등
ex. 채팅 프로그램
- 프로그램이 메시지 생성 : ‘Hello World!’
- SOCKET 라이브러리를 통해 메시지 전달 : ‘Hello’라는 메시지 전달
- TCP 정보 생성, 메시지 데이터 포함 : ‘Hello’라는 메시지에 TCP 정보를 씌움
- IP 패킷 생성, TCP 데이터 포함 : IP와 관련된 데이터를 씌움
- LAN카드로 서버에 보냄(Ethernet frame) : LAN 카드를 통해서 나갈 때 Ethernet frame이 포함되어 나감
TCP/IP 패킷 정보
- IP 패킷 정보 안에 TCP 패킷 정보가 있음
- TCP 세그먼트: 출발지 port, 목적지 port, 전송 제어, 순서, 검증 정보 등
TCP 특징
- TCP : 전송 제어 프로토콜 (Transmission Control Protocol)
- 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP 사용
- TCP 세그먼트의 전송 제어, 순서, 검증 정보 덕분에 아래 세 가지 특징이 가능함
① 연결지향
-
TCP 3 way handshake(가상 연결)
💡 TCP 3 way handshake
- 이를 통해 클라이언트와 서버가 서로를 신뢰할 수 있음
- 1,2,3 : connect 과정 / SYN : 접속 요청(Synchronize), ACK : 요청 수락
- 클라이언트 -> 서버 : SYN
- 서버 -> 클라이언트 : SYN + ACK
- 클라이언트 -> 서버 : ACK
- 클라이언트에서 서버로 데이터 전송
- 그러나 물리적 연결이 아닌 개념적/논리적 연결임
② 데이터 전달 보증
- 패킷 전달 누락을 알 수 있음
- 클라이언트가 서버로 데이터 전송을 하면 서버는 클라이언트로 데이터 잘 받았다고 응답
③ 순서 보장
- 순서가 맞지 않으면 다시 보내라고 요청을 보냄
UDP 특징
- 사용자 데이터그램 프로토콜 (User Datagram Protocol)
- 하얀 도화지에 비유. 기능 거의 X
- 연결지향(TCP 3 way handshake) X
- 데이터 전달 보증 X
- 순서 보장 X
- IP와 거의 같으나, PORT, 체크섬 정도가 추가 됨
- PORT : 하나의 IP에서 여러 애플리케이션을 사용할 때(게임, 음악 등) 어떤 애플리케이션의 패킷인지 구분하는 역할
- checksum : 네트워크를 통해서 전송된 데이터의 값이 변경되었는지(무결성) 검사하는 값
- 하얀 도화지에 비유. 기능 거의 X
- 장점 : 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
- TCP의 단점
- 전송 속도를 최적화할 수 없고 데이터 양도 많아짐 -> TCP는 손을 못대기 때문에 UDP 위에 내가 원하는 것을 만들 수 있음 ex. http3에서 UDP protocol 사용
- TCP의 단점
- 애플리케이션에서 추가 작업 필요
3. PORT
- 역할 : 같은 IP 내에서 프로세스를 구분
- 클라이언트에서 한번에 둘 이상의 서버와 연결 할때 구분하기 위해 사용
- TCP/IP 패킷 정보에 출발지 port와 목적지 port가 포함됨
- 0~65535 할당 가능
- 0~1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
- FTP : 20, 21
- TELNET : 23
- HTTP : 80
- HTTPS : 443
- 0~1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
4. DNS
IP의 문제점
- 기억하기 어려움
- 변경될 수 있음 -> 변경되면 접근할 수 없음
DNS
-
도메인 네임 시스템 (Domain Name System)
- 도메인 명을 IP주소로 변환
Leave a comment