순서
1. TCP/IP를 설명하기 전(feat 인터넷개념)
2. TCP/IP
3. TCP/IP의 흐름
유튜브 [10분 테코톡] 🔮 수리의 TCP/IP 의 내용
인터넷이란 전 세계에 걸쳐 파일 전송 등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크 시스템이다
우리는 인터넷 통신 비용을 지불하면서 인터넷을 사용할 수 있는데 이는 사업자가 만들어놓은 네트워크 인프라를 사용하는 것이다
이러한 인프라들을 통해 데이터를 디지털 신호로 바꾸어 전달, 디지털 신호를 데이터로 바꾸어 가며 네트워크 통신이 일어난다
그리고 네트워크 통신을 위해 미리 정해놓은 공통된 메뉴얼을 프로토콜이라 한다
인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합이다
오른쪽이 TCP/IP의 계층이다
TCP/IP의 계층에는 응용계층, 전송계층, 인터넷 계층, 네트워크 접근 계층 총 4개의 계층이 있다
하나하나 살펴보면
특정 서비스를 제공하기 위해 애플리케이션 끼리 정보를 주고 받을 수 있다
송신된 데이터를 수신측 애플리케이션에 확실히 전달하게 한다
네트워크통신을 하는 애플리케이션은 포트번호를 사용하게 된는데, 전송계층은 포트 번호를 사용해 애플리케이션을 찾아주는 역할을 한다
수신 측 까지 데이터를 전달하기 위해 사용된다
송신측과 수신측 모두 IP주소를 가지고 있고, 인터넷 계층은 IP주소를 바탕으로 올바른 목적지로 찾아갈 수 있도록 한다
네트워크에 직접 연결된 기기 간 전송을 할 수 있도록 한다
물리적 주소인 MAC조소를 사용한다
임의로 각 계층별로 HTTP, TCP, IP, Ethernet이 사용된다고 생각
위는 TCP패킷의 헤더이다
SP와 DP는 각각 시작포트번호와 목적포트번호를 의미한다
시작포트번호는 내 컴퓨터에서 만들었기 때문에 내 컴퓨터는 알고 있고, 목적포트번호 또한 내 컴퓨터는 알고 있다(80은 웹서버의 웰노운 포트 번호이다)
위는 IP헤더이다
SA와 DA는 각각 시작 IP주소와 목적지 IP주소이다
나의 시작 IP주소는 알지만 목적지 IP주소는 모른다
지금은 www.google.com 이라는 도메인 정보만 알고있다
하지만 DNS 프로토콜을 통해 IP주소를 알아 낼수 있다
DNS는 응용 계층(Application Layer)의 프로토콜이고 53번 포트를 사용한다
DNS도 HTTP Request와 비슷하게 도메인이 담긴 쿼리를 도메인서버로 보낸다(DNS는 Transport Layer에서 UDP라는 프로토콜을 사용한다)
위는 UDP의 구조이다
UDP는 비연결지향형 프로토콜이기 때문에 헤더가 간단하다
우리는 이미 netstat -rn
등의 명령어를 통해 게이트웨이의 IP를 알 수 있다
ipconfig
로 기본 게이트웨이를 알 수 있다
IP주소로 MAC주소를 알기 위해 ARP 프로토콜을 사용한다
ARP 프로토콜은 주소해석 프로토콜이다
그래서 TCP프로토콜은 데이터를 전송하기 전 송신측과 수신측이 서로 연결되는 작업이 필요하다
이러한 작업을 3 Way Handshaking이라고 한다
위는 3 Way Handshaking의 과정이다
이런 3 Way Handshaking이 수행하기 위해 TCP헤더에 표시한 플래그들이 사용된다, 이러한 플래그들을 컨트롤 비트라고 부른다
이러한 작업을 Network Address Translation이라고 한다
위는 Network Address Translation의 과정이다
우리집 공유기에서 구글 서버까지 도착하려면 여러 라우터들을 거쳐야 한다
라우터는 네트워크와 네트워크를 연결하는역할을 한다
라우터가 목적지 경로를 찾아 나가는 과정을 라우팅이라 한다
8-1. 라우팅을 거쳐 구글 서버와 연결된 라우터까지 데이터가 도착하면
패킷의 IP헤더에 기록된 구글 서버 IP주소를 통해 MAC주소를 얻어야 한다(ARP프로토콜 사용)
8-2 이렇게 이때동안 연결 계층(Internet Layer)의 IP주소와 네트워크 접근 계층(Network Access Layer)의 MAC주소를 사용해 목적지 도착
8-3 전송 계층(Transport Layer)
전송 계층의 목적지 포트번호에는 80번이 적혀있고, 이를보고 80번 포트를 사용하는 애플리케이션에게 데이터를 전달해야 하는 것을 알 수 있다
8-4 응용 계층(Application Layer)
응용 계층까지 오면 웹 서버가 사용될 HTTP Request 데이터를 얻을 수 있게된다
/
에 매핑된 get요청을 처리하며 적절한 HTML을 응답한다위는 HTTP Response 형식이다
위는 4 Way Handshaking 의 과정이다
10-1. 서버가 FIN을 보내는 과정에서 FIN보다 데이터가 늦게 도착하는 문제가 생길 수도 있다
클라이언트가 서버로부터 FIN을 받아다고 소켓을 닫아버리면 FIN을 보내기 전 패킷은 클라이언트가 받을 수 없게 된다
그래서 클라이언트는 서버로부터 FIN요청을 받게 되더라도 일정시간 동안 소켓을 닫지 않고 잉여 패킷을 기다린다
이렇게 4-Way-Handshaking 과정이 완료되어도 소켓을 닫지않고 잉여 패킷을 기다리는 상태를 TIME_WAT이라 한다
TCP는 연결지향형 프로토콜이자, 신뢰할 수 있는 프로토콜이라고도 한다
요즘은 엄청나게 큰 데이터를 주고받기 때문에 한 개의 패킷으로만 주고 받기에는 무리가 있다
그래서 데이터를 잘게 쪼개서 보내게되고 많은 패킷을 보내게 된다
이런 많은 패킷들이 복잡한 인터넷을 통해 목적지로 이동하는데 이런 환경에서 데이터들이 유실되지 않거나 올바른 순서대로 도착하는데 그 어려운 것을 신뢰할 수 있는 프로토콜인 TCP가 가능하게 한다
TCP는 흐름제어 오류제어 혼잡제어 를 통해 신뢰성있는 데이터 전송을 보장할 수 있게 해준다
영상에서 추천하신대로 TCP의 흐름제어, 오류제어, 혼잡제어가 어떻게 이루어지는지 궁금하다
ARP프로토콜의 개념 이외에 대해 궁금하다
ㄴ ARP정리
연결지향형(TCP)와 비연결지향형(UDP)의 개념,특징이 궁금하다
학교 '컴퓨터일반' 시간에 TCP/IP를 OSI7계층과 함께 배웠었을 땐 대충 뜻을 이해하고 넘어갔던 개념인데 자세히 흐름을보니 많은 개념들이 있었고 정리하면서도 많은 시간이 들었고, 모른는 개념들이 쫌 있었던 것 같다. 학교에서 같이 배웠었던 OSI7계층에 대해서도 자세히 알아보고 싶어졌다