Protocol
- 통신 장비간의 데이터 전송 규약
IP(Internet Protocol)
- IP를 기준으로 전송하고 패킷이라는 단위로 정보를 주고 받음.
- 한계
- 패킷을 받을 상대가 없어도 전송
- 내 컴퓨터에서 2개 이상의 어플리케이션이 실행시 도착지를 찾을수 없다.
- 전송 도중 소실되어도 알 수 없음.
- 패킷의 사이즈가 클 경우 둘로 나누어 지고 도착 순서 보장이 없다.
- ※NAT : IP 의 개수 부족으로 나온 기술로, 사설IP -> 공인IP / 공인IP -> 사설IP 로 변경해주는 기능
TCP/UDP(Tranmission Control Protocol/User Datagram Protocol)
- 위에서 언급한 IP 의 한계를 보완하기 위해 나온 프로토콜로 IP와 함께 사용되어진다.
- 클라이언트에서 서버로 요청시 Application -> Transport -> Internet -> Link 순을 타고 나간다.
- Application : Socket 라이브러리를 이용해서 해당 데이터를 생성한다.
- Transport(TCP/UDP) : Port 정보 등을 셋팅
- Internet : IP, Flag(패킷분할여부), Protocol 정보 등을 셋팅
- Link(Network Interface) : 우리가 사용하는 Link 계층의 대부분은 Ethernet 을 사용하며 MAC 주소를 셋팅한다.
TCP
- TCP 의 경우 데이터 전송전에 3 way handshake 를 통해 논리적인 연결을 생성후 데이터를 전송하기 때문에 신뢰성이 보장된다.
- TCP 프로토콜의 Sequence Number 를 통해 패킷의 순서를 알 수 있다.
- TCP 프로토콜의 Port 정보를 통해 하나의 컴퓨터에서 여러개의 어플리케이션의 도착지를 컨트롤 할 수 있다.
UDP
- TCP 처럼 신뢰성이 없고, 일방향 통신이다. 대신에 빠르다는 장점이 있다.
- IP 에서 Port, checksum 정보만 추가되어 어플리에이션에서 추가 작업이 필요하다.
- 최근 HTTP3 버전에서 각광받고 있다.
DNS(Domain Name System)
- naver.com 검색시 IP 와 matching 시켜주는 서비스
- IP 는 변경될 수 있기 때문에 대부분의 플랫폼 서비스들은 도메인명으로 서비스한다.
- AWS에서 잘 설명해주는 글이 있어 참조했다. https://aws.amazon.com/ko/route53/what-is-dns/
- nslookup 이라는 DNS 서버 질의 명령어를 통해 해당 사이트의 IP를 알 수 있고 IP 주소를 브라우저에 입력시 동일하게 접속이 가능하다.
URL(Uniform Resource Locator)
- 상위 개념으로 URI(Identifier) 라고 많이들 부르는데 본인은 URI = URL 이라고 생각한다.
- URN(Uniform Resource Name) 도 있는데 urn:animal:omnivore:pig 이런식으로 사용한다.
웹 브라우저 상에서 데이터 흐름
- https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=hello 요청
- 브라우저가 DNS 질의 --> IP 정보를 찾아옴
- 브라우저가 HTTP 요청 메시지 생성
- SOCKET 라이브러리 통해 --> 3way handshake --> TCP 계층으로 던지고 패킷 완성하여 전송
- Server 에서 패킷을 받고 --> 데이터 파싱 후 처리 --> response 패킷 만들고 재전송