TCP/IP 란?

박병관·2022년 2월 1일
0

우아한Tech

목록 보기
3/17
post-thumbnail

순서
1. TCP/IP를 설명하기 전(feat 인터넷개념)
2. TCP/IP
3. TCP/IP의 흐름

유튜브 [10분 테코톡] 🔮 수리의 TCP/IP 의 내용

TCP/IP를 설명하기 전(feat 인터넷개념)

인터넷이란 전 세계에 걸쳐 파일 전송 등의 데이터 통신 서비스를 받을 수 있는 컴퓨터 네트워크 시스템이다

네트워크 인프라 지도

우리는 인터넷 통신 비용을 지불하면서 인터넷을 사용할 수 있는데 이는 사업자가 만들어놓은 네트워크 인프라를 사용하는 것이다

이러한 인프라들을 통해 데이터를 디지털 신호로 바꾸어 전달, 디지털 신호를 데이터로 바꾸어 가며 네트워크 통신이 일어난다

그리고 네트워크 통신을 위해 미리 정해놓은 공통된 메뉴얼을 프로토콜이라 한다

TCP/IP

인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합이다

OSI와 TCP/IP

오른쪽이 TCP/IP의 계층이다

TCP/IP의 계층에는 응용계층, 전송계층, 인터넷 계층, 네트워크 접근 계층 총 4개의 계층이 있다

하나하나 살펴보면

1. 응용계층(Application Layer)

특정 서비스를 제공하기 위해 애플리케이션 끼리 정보를 주고 받을 수 있다

  • FTP, HTTP, SSH, Telnet, DNS, SMTP 등과 같은 프로토콜이 사용된다

2. 전송계층(Transport Layer)

송신된 데이터를 수신측 애플리케이션에 확실히 전달하게 한다
네트워크통신을 하는 애플리케이션은 포트번호를 사용하게 된는데, 전송계층은 포트 번호를 사용해 애플리케이션을 찾아주는 역할을 한다

  • TCP, UDP, RTP, RTCP 등과 같은 프로토콜이 사용된다

3. 인터넷 계층(Internet Layer)

수신 측 까지 데이터를 전달하기 위해 사용된다
송신측과 수신측 모두 IP주소를 가지고 있고, 인터넷 계층은 IP주소를 바탕으로 올바른 목적지로 찾아갈 수 있도록 한다

  • IP, APP, ICMP, RARP, OSPF 등과 같은 프로토콜이 사용된다

4. 네트워크 접근 계층(Network Access Layer)

네트워크에 직접 연결된 기기 간 전송을 할 수 있도록 한다
물리적 주소인 MAC조소를 사용한다

  • Ethernet, PPP, Token Ring 등과 같은 프로토콜이 사용된다

TCP/IP의 흐름

www.google.com을 웹브라우저에 입력하면 무슨일이 일어날까요? 🙄

  1. 웹브라우저에 www.goolge.com을 입력한다는 것은 구글 웹서버의 80포트로 아래와 같은 HTTP Request메시지를 보내는 것이다

HTTP Request message

  1. 이와같은 요청을 인터넷을 통해 구글 서버로 전달받기 위해 패킷을 만들어야 한다(패킷에는 각 계층에 필요한 정보들이 담겨야 한다)

    임의로 각 계층별로 HTTP, TCP, IP, Ethernet이 사용된다고 생각

TCP패킷의 헤더

위는 TCP패킷의 헤더이다

SP와 DP는 각각 시작포트번호와 목적포트번호를 의미한다
시작포트번호는 내 컴퓨터에서 만들었기 때문에 내 컴퓨터는 알고 있고, 목적포트번호 또한 내 컴퓨터는 알고 있다(80은 웹서버의 웰노운 포트 번호이다)

IP헤더

위는 IP헤더이다

SA와 DA는 각각 시작 IP주소와 목적지 IP주소이다
나의 시작 IP주소는 알지만 목적지 IP주소는 모른다
지금은 www.google.com 이라는 도메인 정보만 알고있다

하지만 DNS 프로토콜을 통해 IP주소를 알아 낼수 있다

TCP/IP 각 계층의 정보

  1. 브라우저는 OS에게 도메인에 대한 ip주소를 요청
  2. OS에서 DNS서버로 요청을 보내게 된다
    OS가 DNS 서버를 알고있는 이유는 DNS서버주소는 이미 컴퓨터에 등록 되어 있다

DNS는 응용 계층(Application Layer)의 프로토콜이고 53번 포트를 사용한다
DNS도 HTTP Request와 비슷하게 도메인이 담긴 쿼리를 도메인서버로 보낸다(DNS는 Transport Layer에서 UDP라는 프로토콜을 사용한다)

UDP의 구조

위는 UDP의 구조이다

UDP는 비연결지향형 프로토콜이기 때문에 헤더가 간단하다

  1. 그러면 도메인 서버가 IP주소를 응답해준다
  2. 마지막으로 Ethernet프로토콜에 대한 헤더를 만들어야 한다(아직 MAC주소를 모른다)
    이전까지는 우리가 구글서버에 대한 정보가 필요했다
    그러면 MAC주소도 구글 MAC주소가 필요한 것이 아닌 물리적으로 연결된 우리집 MAC주소가 필요하다(이 공유기를 통해 다른 네트워크와 연결이 가능하기 때문에 게이트웨이라고도 한다)

우리는 이미 netstat -rn 등의 명령어를 통해 게이트웨이의 IP를 알 수 있다

게이트웨이의 IP

ipconfig 로 기본 게이트웨이를 알 수 있다

그러면 어떻게 IP주소로 MAC주소를 알 수 있을까?

IP주소로 MAC주소를 알기 위해 ARP 프로토콜을 사용한다
ARP 프로토콜은 주소해석 프로토콜이다

  1. 이렇게 패킷이 네트워크로 나갈 준비가 되었다
    요기서 요청을 보내기전 TCP가 연결지향형 프로토콜이라는 점을 봐야한다

그래서 TCP프로토콜은 데이터를 전송하기 전 송신측과 수신측이 서로 연결되는 작업이 필요하다
이러한 작업을 3 Way Handshaking이라고 한다

3 Way Handshaking

위는 3 Way Handshaking의 과정이다

이런 3 Way Handshaking이 수행하기 위해 TCP헤더에 표시한 플래그들이 사용된다, 이러한 플래그들을 컨트롤 비트라고 부른다

  1. 3 Way Handshaking을 수행후 연결, 데이터가 오가게 된다
    부가적으로 내가 사용하는 컴퓨터는 Private IP를 사용하고 있다
    Private IP는 외부의 네트워크 환경에서 IP주소를 찾지 못하기 때문에 공유기를 통해 나갈 때 public IP주소를 변환하여 나가는 작업이 필요하다

이러한 작업을 Network Address Translation이라고 한다

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 데이터를 얻을 수 있게된다

  1. HTTP Request 응답
    / 에 매핑된 get요청을 처리하며 적절한 HTML을 응답한다

HTTP Response message

위는 HTTP Response 형식이다

  1. HTTP요청과 응답이 끝나면 연결을 종료
    TCP 컨트롤 비트가 사용되고, HTTP연결을 종료하는 과정을 4-Way-Handshaking이라고 한다

HTTP연결 종료

위는 4 Way Handshaking 의 과정이다

10-1. 서버가 FIN을 보내는 과정에서 FIN보다 데이터가 늦게 도착하는 문제가 생길 수도 있다
클라이언트가 서버로부터 FIN을 받아다고 소켓을 닫아버리면 FIN을 보내기 전 패킷은 클라이언트가 받을 수 없게 된다

그래서 클라이언트는 서버로부터 FIN요청을 받게 되더라도 일정시간 동안 소켓을 닫지 않고 잉여 패킷을 기다린다

이렇게 4-Way-Handshaking 과정이 완료되어도 소켓을 닫지않고 잉여 패킷을 기다리는 상태를 TIME_WAT이라 한다

TCP는 신뢰할 수 있는 프로토콜이다

TCP는 연결지향형 프로토콜이자, 신뢰할 수 있는 프로토콜이라고도 한다

요즘은 엄청나게 큰 데이터를 주고받기 때문에 한 개의 패킷으로만 주고 받기에는 무리가 있다
그래서 데이터를 잘게 쪼개서 보내게되고 많은 패킷을 보내게 된다

패킷 분할

이런 많은 패킷들이 복잡한 인터넷을 통해 목적지로 이동하는데 이런 환경에서 데이터들이 유실되지 않거나 올바른 순서대로 도착하는데 그 어려운 것을 신뢰할 수 있는 프로토콜인 TCP가 가능하게 한다

TCP는 흐름제어 오류제어 혼잡제어 를 통해 신뢰성있는 데이터 전송을 보장할 수 있게 해준다

정리하며 더 궁금한 점, 느낀점 🙃

  • 영상에서 추천하신대로 TCP의 흐름제어, 오류제어, 혼잡제어가 어떻게 이루어지는지 궁금하다

  • ARP프로토콜의 개념 이외에 대해 궁금하다
    ARP정리

  • 연결지향형(TCP)와 비연결지향형(UDP)의 개념,특징이 궁금하다

  • 학교 '컴퓨터일반' 시간에 TCP/IP를 OSI7계층과 함께 배웠었을 땐 대충 뜻을 이해하고 넘어갔던 개념인데 자세히 흐름을보니 많은 개념들이 있었고 정리하면서도 많은 시간이 들었고, 모른는 개념들이 쫌 있었던 것 같다. 학교에서 같이 배웠었던 OSI7계층에 대해서도 자세히 알아보고 싶어졌다

profile
괴물신인

0개의 댓글