CS/HTTP

[WEB] 인터넷 네트워크

Kangjieun11 2022. 11. 30. 01:08
728x90




Inflearn

김영한 - 모든 개발자를 위한 HTTP 웹 기본 지식


커리큘럼을 수강후 개인적으로 정리한 내용입니다.



인터넷 네트워크

  • 인터넷 통신
  • IP(인터넷 프로토콜)
  • TCP, UDP
  • PORT
  • DNS




인터넷 통신


인터넷에서 컴퓨터는 어떻게 통신할까?

  • 컴퓨터 두대가 붙어있으면 단순 케이블로 연결해서 보내주면 되겠지만..
  • 미국에사는 친구에게 보내려면? - 인터넷을 통해야한다.
  • 인터넷 망은 복잡하다.
  • 복잡한 인터넷 망에선 어떤 규칙으로 넘어갈까?
  • 인터펫 프로토콜 IP를 알아보자.

IP(인터넷 프로토콜)

인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을
식별할 수 있도록 각각의 장비에게 부여되는 고유 주소



1) 클라이언트와 서버에는 IP adress가 있다.

인터넷 프로토콜(IP, Internet Protocol)의 역할

  • 지정한 IP주소에 데이터 전달
  • 패킷 (통신 단위)으로 데이터를 전달

⏺ 클라이언트 서버 패킷 전달 요약


클라이언트가 {출발지ip, 목적지ip, 메세지 ...} 가진 패킷을 인터넷 망에 던지면
- 규약을 따르는 서버들이 다 이해를 해서 계속 던져줌. (200.200.200.2 어딨냐하고 계속 찾는 느낌)
- 던지다 보면 최종적으로 목적지 ip에 도착하게 된다.

서버는 메세지를 받았으니 똑같이 응답 패킷 {출발지ip, 목적지ip, 메세지 ...} 을 보내준다.

⏺ IP 프로토콜의 한계

✔️ 비연결성

패킷을 받을 대상이 없으면?
--- PC가 꺼져있는 경우... 서비스 불능인 상태여도 패킷이 전송된다.

✔️ 비신뢰성

중간에 패킷이 사라지거나(패킷소실)
--- 중간 컴퓨터가 꺼져서 사라지는 경우도 있음

패킷이 순서대로 도착하지 않으면?
--- 패킷의 용량이 굉장히 큰데 한번에 보낼수 없어서 끊어 보내게된다.
--- 패킷은 서로 다른 노드를 탈수도 있다.
--- 2번이 먼저 도착할수도 있다.

✔️ 프로그램 구분

한 PC에서 온라인으로 음악도 듣고 게임도 하고 있는데 이것들은 어떻게 구분할것인가?
어떤 서비스가 보낸건지 알수가 없다.

⏺ 한계 극복 : TCP / UDP

IP만으로는 이런 문제들을 해결할 수 없다. - TCP/UDP가 나왔다.



✅ TCP, UDP

인터넷 프로토콜 스택의 4계층




1) 소켓 라이브러리를 통해 메세지를 OS계층에 넘긴다.
2) OS계층에선 TCP 정보를 싹 씌워서 밑에 IP로 보낸다.
3) IP와 관련된 정보를 씌워서 네트워크 인터페이스로 보낸다.
4) LAN카드가 되어서 내보내진다.

⏺ 패킷이란?

패킷(packet)은 네트워크를 통해 전송하기 쉽도록 자른 데이터의 전송 단위
본래는 소포를 뜻하는 용어로, 소화물을 뜻하는 패키지(package)와 덩어리를 뜻하는 버킷(bucket)의 합성어

  • 패킷은 데이터 전송에서 송신측과 수신측에 의하여 하나의 단위로 취급되어 전송되는 집합체,
  • 분할된 각각의 패킷에는 별도의 번호가 붙여지고 목적지의 인터넷 주소가 기록되며, 에러 체크 데이터도 포함됨



IP패킷에는 출발지 IP, 목적지 IP(컴퓨터 구분자)에대한 정보가 들어있고,

TCP 패킷에는 출발지PORT, 목적지PORT(애플리케이션 구분자),
전송제어, 순서, 검증정보에 대한 정보가 들어있어서 받는 쪽에서 패킷을 순서대로 받을 수 있게 된다. (IP의 비 신뢰성 극복)

⏺ TCP

  • 연결지향 - TCP 3 way handshake  (가상연결이다 -- 개념적/논리적으로만 연결된것 /// 중간 노드들을 모름) 
    • 연결을 하고 메세지를 보낸다!!
    • SYN > SYN+ACK > ACK (데이터 전송 여기서 가능)
  • 데이터 전달 보증
    • 메세지를 보냈는데 중간에 누락되었다는걸  알수 있음
    • 데이터 전송시 잘 받았음을 서버에서 응답해준다.
  • 순서 보장
    • 클라이언트가 패킷 1, 2, 3 순서로 보냈는데  -- 서버가 1,3,2 순서로 도착했음
      • (서버) 다 버리고, 2번부터 다시 보내라
      • (클라이언트) 그래? 2번부터 잘못됐구나   >  2번부터 다시 보낸다.
    • TCP 데이터 안에 전송제어정보, 순서정보, 검증정보가 추가로 들어있기 때문에 가능한 것.
  • 신뢰할 수 있는 프로토콜
  • 현재는 대부분 TCP를 사용한다 


3way handshake

syn , syn+ack, ack 을 통해 신뢰기반 전송이 가능하다.
중간에 서버가 꺼져있다면,, SYN을 보내도 응답이 없기 때문에 연결할 수 없음.

** 요즘에 최적화가 되어서 ACK와 함께 데이터 전송이 가능하다는걸 기억하자! **


⏺ UDP

  • 기능이 없다.
  • 연결지향 x
  • 데이터 전달보증 x
  • 순서 보장x
  • 단순하고 빠르다.
  • IP와 거의 비슷하지만, PORT, checkSum (메세지가 잘 왔는지 검증) 가 추가됨.


TCP는 3way handshake 가 오래걸린다. 또 왠만한것들이 다 TCP로만들어져있어서 건들 수 없음.
최적화하고 싶을 때 할수 없는 상황이 발생함.
> UDP를 갖고 손을 대어서 애플리케이션 레벨에서 뭔갈 만들어 내면 됨.
최근 웹브라우저에서 http 통신할 때 핸드쉐이킹말고 더 최적화를 해보자 해서 굉장히 뜨고 있다는 얘기를 해주심

PORT

애플리케이션 구분자 주소

게임하면서 화상통화를 동시에 하고 있다고 가정하자.
같은 Ip와 통신하는데 한번에 둘 이상을 연결해야 할때 메세지 패킷은 어떻게 구분할것인가?

TCP/UDP 패킷에는 출발지 포트와 목적지 포트가 있었다!

IP로 목적지서버를 찾고, PORT로 애플리케이션을 구분하면 동시에 연결하면서 소통할 수 있다!!!

클라이언트- 게임
출발지IP=100.100.100.1, 목적지IP= 200.200.200.2
출발지port=8090, 목적지port= 11220

"나 100.100.100.1에 있는 8090포트에서 전송하는 패킷인데!
200.200.200.2에 있는 11220 포트로 연결을 할거야~!~! 하고 가는것임

서버는 받은 패킷의 출발지 IP와 출발지 port를 사용해서 응답한다.

DNS

문제 : ip주소는 기억하기 어렵고, 변경될 수 있다.
해결 : DNS 도메인 네임 시스템 (like 전화번호부)이라는 서버를 사용해 도메인 이름으로 ip주소를 얻을 수 있다!


도메인으로 검색시 - 응답을 받고, 해당 주소로 접속한다.


 

 

references

더보기

모든 개발자를 위한 HTTP 웹 기본지식 -- 인터넷 네트워크