학교에서 컴퓨터 네트워크를 수강하였지만, 2학년때 어째서 배워야 할지도 모른 채 배워 부족한 부분을 많이 느껴 정리하고자한다.
해당 글은 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식 을 듣고 정리하였다.
컴퓨터는 어떻게 통신할까?
이는 너무 두리뭉실하다 . 사실 메세지 쏘면 알아서 내가 보내고픈 곳으로 보내고 res를 받고싶다.
그러나 세상에는 이런 보내는것에도 규약(Protocol)이 있다.
이것을 인터넷 프로토콜 이라고 한다. 어떻게 통신을 할지 규칙을 정해 놓은것이다.
이 규약은 스택구조로 이루어져 있다. 각 기능들의 한계점을 보완하고 과정들을 설명하기 편하게 계층으로 나눠놓을것이다.
강의에서는 4계층으로 설명한다.
인터넷 프로토콜 ( Internet Protocol )의 구성
이 규약을 설정하기 위해 설명해야하는 구성들이 있다.
<과정>
- 프로그램이 보내고자 하는 메세지를 생성한다.
- Socket 라이브러리가 이를 os ( ip / tcp ) 에 전달한다.
- TCP 확실한 전송을 위한 정보를 생성한다.
- IP가 3과정의 내용을 포함한 IP Address가 담겨있는 패킷을 생성한다
- 이렇게 생성한 IP Packet을 lan 드라이버에 넘겨서 각 정보들이 집약되어있는 ip packet을 이용하여 전달한다.
중요한것은 결국 IP Packet 이라는 이름으로 묶인 정보를 하나하나 파악하여 , 도착지까지 Packet을 넘긴다는 것이다.
IP
- IP Address
쉽게 생각하면 주소이다. 서버들이 자신의 위치를 알리는 주소
- Packet
날리는 메세지는 통신 단위 데이터로 패킷(Packet , Package + Bucket )이라고 한다.
구성
- 출발지 IP
- 목적지 IP
- 기타 …
한계
- 비연결성 - 연결을 해놓고 보내는게 아니라서 잃어버리거나 탈취당해도 모른다.)
- 비신뢰성 - 위 이유 때문에 신뢰받지 못함. 또한 패킷을 나눠서 보내는 경우에 패킷의 순서가 섞여도 구분할 수 없다.
- 프로그램 구분 불가 - 한 컴퓨터(서버) 내의 프로그램들은 어떻게 구분할것인지 모른다
위 IP의 전송의 한계를 보완하기 위하여 TCP 가 있다.
TCP( Transmission Control Protocol )
전송 제어 프로토콜이다.
위 한계에서 자꾸 패킷이 사라진다 ;; 이는 돈으로 생각하면 난 송금했다고 보냈는데 사라지면 큰일나지 않는가. 난리난다
이런 비신뢰적인 문제를 해결하기 위해서 TCP 가 아래 특징을 갖는다.
- 연결 지향 - TCP 3 way handshake
- 데이터 전달 보증 - 데이터 전달이 잘 된 것을 다시 알려줌
- 순서 보장 - 순서 틀리면 다시 보내라고 함
3 way handshake ( 연결 지향 )
- 무작정 패킷을 보내는것이 아니라, 일단 연결이 된 것을 확인한 후에 패킷을 전송한다.
과정
- Syn ( synchronized , 동기화 ) 을 전송하여 접속이 가능한지 확인
- 접속 가능시에는 SYN + ACK ( acknowledgement ) 을 전송
- 접속 가능하다는걸 잘 받았다는 ACK를 전송
같은 전송 제어 프로토콜로 UDP가 있다.
UDP(User Datagram Protocol)
TCP는 무조건 전달할거야 !!!! 이거면 , UDP는 뭐,, 잘 보내면 됬지,, 이정도만 확인해줄게? 하는 느낌이 있다. ( 그냥 내 느낌이다 )
- 연결 지향 하지 않다. (3 way handshacke x)
- 데이터 전달 보증 x
- 순서 보장 x
이렇게 규약이 없는데 당연히 단순하고 빠르다는 장점이 있다.
차이점으로는
- Port 정보 O
- Checksum O
이렇게 규약이 없어서 애플리케이션 계층에서 추가 작업이 필요한데, 요즘 자유로운 ? 개발자들 사이에서 요 추가작업이 인기라고 한다.
포트(PORT)
IP가 아파트 도로명 주소라면, 포트는 동/호수 이다.
같은 IP내에서 프로세스를 구분한다.
애플리케이션 계층에서의 대표적인 schema ( ex http, https, ftp, telnet) 은 포트번호가 지정되있다.
DNS
일반 사용자들은 위 내용 모른다. 걍 대충 naver.com 치면 네이버 들어가져 있으면 좋겠다.
그래서 만든게 DNS 이다.
길고 복잡한 IP를 기억하는 대신, naver.com을 치면 네이버 Ip로 맵핑 시켜주는 역할이다.
URL , URI, URN
URI ( Uniform Resource Identifier)
ㄴ URL ( Uniform Resource Locator )
ㄴ URN ( Uniform Resource Name )
으로 이루어 진다
URL
#fragment 는 서버에 전송하는 정보는 아니다.
Html 내부 북마크에 사용한다.
그럼 위 내용을 모두 숙지했다고 했을때 !
위 기초적인 내용을 이용하여 유저가 URL을 치고 인터넷 프로토콜을 배운것을 기준으로 과정을 정리해 보자
<조건>
<과정>
- Http 요청 메세지 생성
2. Http 메세지 전송
3. Http 응답 메세지
<패킷 모양>
Reference
- 모든 개발자를 위한 HTTP 웹 기본 지식 (김영한)
'Network' 카테고리의 다른 글
[2. 가상화의 원리와 기술] VLAN, 오버레이 네트워크, VPN, SDN, NFV, SD-WAN 이론 (0) | 2023.06.19 |
---|---|
[4. 운영 서버의 외부 환경 구성] 도메인, DNS (0) | 2023.06.19 |