프로그래밍 끄적끄적
[HTTP] 인터넷 네트워크 (IP, TCP, UDP, POPT, DNS) 본문
🌳 IP (Internet Protocol)
: 인터넷 환경에서의 통신 규약
지정한 IP 주소에 데이터를 전달하며 패킷이라는 통신 단위로 데이터를 전달한다.
IP 패킷 정보
🍃 IP 프로토콜의 한계
1. 비연결성
송/수신자가 데이터 전송을 위해 서로 연결될 필요가 없기 때문에 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷을 전송한다. (대상 서버가 패킷을 받을 수 있는지 여부를 송신자는 모른다.)
2. 비신뢰성
흐름에 관여하지 않기 때문에 전송한 패킷의 손상 여부를 송/수신자가 알 수 없으며 패킷 전달 순서를 보장하지 않는다. 즉, 전송 과정에서 패킷이 손상될 수도 있고, 같은 호스트에서 전송한 패킷의 순서가 뒤죽박죽이 될 수도 있고, 같은 패킷이 두 번 전송될 수도 있으며, 아예 패킷이 사라질 수도 있다.
* 패킷의 크기가 크면 이를 분할해서 보내야 하는데, 이들은 각각 다른 경로를 통해서 보내어 질 수 있다. 만약 "Hello, World!" 라는 문자열을 "Hello," "World!"로 나누어 보낸다고 가정한다면, 상황에 따라 "World!" 패킷 조각이 더 빠른 경로에 의해 보내져 송신자 측에선 "World! Hello,"로 받을 수도 있는 것이다.
3. 프로그램 구분
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이라면 이들을 구분할 수 없다.
🌳 TCP/IP 4계층
네트워크 프로토콜 계층은 위와 같이 TCP/IP 4계층으로 나눌 수 있다.
Hello 라는 메시지는 네트워크로 전송할 수 있는 데이터 단위가 되기까지 각각 계층에서 필요한 헤더가 붙는다.
🌳 TCP (Transmission Control Protocol)
TCP는 전송 제어 프로토콜로 세그먼트라는 통신 단위로 데이터를 전달하며 연결 지향, 데이터 전달 보증, 순서 보장 이라는 3가지 특징을 갖는다.
1. 연결 지향 (TCP 3 way handshake)
TCP는 장치들 사이에 논리적인 접속을 성립하기 위해 3 way handshake를 사용하는 연결지향형 프로토콜이다. 연결 방식은 다음과 같다. 먼저 클라이언트 서버에 접속을 요청하는 SYN 패킷을 보낸다. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 자신도 연결해달라는 SYN가 설정된 패킷을 발송하고 클라이언트가 다시 ACK로 응답하기를 기다린다. 클라이언트가 서버에게 ACK를 보내면 이 이후로부터 연결이 성립되며 데이터를 전송할 수 있다. 이렇게 SYN, SYN+ACK, ACK 세번의 단계를 거쳐야 연결이 된다는 점에서 3 way handshake라고 부른다. (참고로 마지막 단계인 클라이언트가 ACK를 보낼 때, 데이터도 함께 전송할 수 있다.) 만약 서버가 꺼져있다면 응답이 없기 때문에 데이터를 보내지 않는다.
2. 데이터 전달 보증
클라이언트가 데이터를 전송했을 때 서버는 데이터를 잘 받았다는 신호를 클라이언트에게 준다. 따라서 송신자 측에서 데이터를 잘 받았는지 확인할 수 있다.
3. 순서 보장
패킷의 순서가 잘못되었다면 TCP 세그먼트에 있는 정보를 토대로 수신자가 어디서부터 순서가 잘못되었는지를 파악해, 송신자에게 다시 그 지점부터 보내라고 요청할 수 있다. 따라서 IP 패킷의 한계였던 데이터의 순서 보장을 보완한다.
이 모든 일은 TCP 헤더에서 전송 제어, 순서, 검증 정보 등이 있기 때문에 가능하다.
TCP 세그먼트 헤더
🌳 UDP (User Datagram Protocol)
UDP는 IP 프로토콜에 PORT, 체크섬 필드 정보만 추가된 사용자 데이터그램 프로토콜이다. TCP와 같이 세그먼트라는 통신 단위로 데이터를 전달하며 연결 지향, 데이터 전달 보증, 순서 보장을 모두 하지 않는다. 그러나, 복잡한 연결 과정이 빠졌기 때문에 단순하고 빠른 속도를 보장한다.
🌳 PORT
같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상일 때 이를 구분하기 위한 것이 PORT이다. IP는 우편번호였다면 PORT는 동, 호수라고 생각하면 된다.
PORT는 0~65535까지 할당 가능한데 0~1023은 잘 알려진 포트이므로 사용자는 사용하지 않는 것이 좋다.
▪ FTP: 20, 21
▪ TELNET: 23
▪ HTTP: 80
▪ HTTPS: 443
🌳 DNS (Domain Name System)
IP는 숫자로 이루어져 있어 기억하기 어렵고, 게다가 변경될 수 있다. 이를 보완하기 위해 DNS를 이용하는데, 일종의 전화번호부 역할을 하는 DNS 서버에 IP를 등록하면 도메인 명으로 IP 접속을 대신할 수 있다.
참고자료
https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
'HTTP' 카테고리의 다른 글
[HTTP] HTTP 메서드 활용(2) (0) | 2021.11.09 |
---|---|
[HTTP] HTTP 메서드 활용(1) (0) | 2021.11.09 |
[HTTP] HTTP 메서드 (0) | 2021.11.09 |
[HTTP] HTTP 기본 (0) | 2021.11.03 |
[HTTP] URI와 웹 브라우저 요청 흐름 (0) | 2021.11.03 |