TCP/IP

📝 1yangsh·2022년 2월 14일
1

TCP/IP

인터넷이란?

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

국가간의 통신은 해저 케이블망을 통해 데이터를 주고받고 있다.

TCP/IP 란?

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

TCP/IP 의 계층

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

  • 웹브라우저에 해당 주소를 입력한다는 것은 구글 웹서버의 80 포트로 HTTP Request 메시지를 보내는 것과 동일히다.
  • 해당 요청을 인터넷을 통해 구글 서버로 전달하기 위해서는 패킷을 만들어야 한다.
  • 패킷에는 각 계층의 필요한 정보들이 담긴다.

Application Layer

  • 먼저 패킷의 Application Layer에는 HTTP Request가 들어간다.

Transport Layer

  • TCP 패킷의 헤더에는 SP(시작 포트) 와 DP(목적지 포트) 가 있다. 우리는 SP(내 컴퓨터에서 만든 소켓의 번호)와 DP(HTTP = 80) 둘다 알고 있다.

Internet Layer

  • IP 헤더에 대한 정보를 채운다.
  • IP 헤더에는 SA(시작 IP주소)와 DA(목적지 IP주소)가 있다.
  • SA는 나의 IP 이기 떄문에 알고 있지만 DA는 아직 알 수 없다.
  • 우리가 알고 있는 것은 www.google.com 이라는 도메인 정보만 알고 있다.
  • DNS 프로토콜을 통해 도메인 정보로 IP주소를 알 수 있다.
  • 브라우저가 OS에게 도메인에 대한 IP주소를 알고 싶다고 요청을 하면 OS는 DNS 서버로 요청을 보내게 된다.
  • DNS 또한 HTTP와 같은 Application Layer Protocol 이다.
  • DNS는 Transport Layer 에서 UDP 프로토콜을 사용한다.
  • UDP는 비연결지향형 프로토콜이며 TCP와 다르게 헤더가 간단하다.

Network Access Layer

  • Ethernet 프로토콜에 대한 헤더를 만들어야 한다.
  • 따라서 MAC 주소를 알아야 한다. (구글의 MAC 주소를 알 필요 없이 내 MAC 주소 = 게이트웨이)
  • 우리는 이미 게이트웨이에 대한 정보를 알고 있다. netstat -rn
  • IP 주소로 MAC 주소를 알아내기 위해서는 ARP 프로토콜을 사용한다.
  • ARP 프로토콜은 IP 주소를 MAC 주소로 바꾸어 주는 주소해석 프로토콜이다.
IP주소 : 논리적 주소 / 32bit
MAC주소 : 물리적 주소 / 48bit

4개의 Layer를 통해 패킷이 완성되었다.

패킷이 네트워크로 나갈 준비가 되었지만

TCP는 연결지향형 프로토콜이다. 따라서 송신측과 수신측이 연결되는 작업이 필요하다.

이러한 작업을 3 Way Handshaking 이라고 한다.

3-Way-Handshaking

3 way handshaking을 사용하기 위해서는 TCP 헤더에 표시한 플래그인 SYN, ACK(=컨트롤비트)들이 사용된다.

1. 클라이언트는 서버에게 접속을 요청하는 SYN 패킷을 보낸다.
2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 SYN과 ACK 플래그가 설정된 패킷을 보낸다.
3. 클라이언트는 서버에게 다시 ACK를 보낸다.

이후에는 연결이 이루어지고 데이터가 오가게 된다.

내가 사용하는 컴퓨터는 private IP를 사용한다. 따라서 공유기를 통해 외부로 나갈때 public IP 로 변환하는 작업이 필요하다.

이를 NAT(Network Address Translation) 이라고 한다.

우리집 공유기를 거쳐 구글 서버로 도착하려면 여러 라우터를 거쳐야 한다. 라우터가 목적지 경로를 찾아 나가는 과정을 라우팅이라고 한다.

구글 서버가 연결된 라우터까지 도착하게 되면 패킷의 IP 헤더에 기록된 구글 서버의 IP주소를 통해 MAC 주소를 얻어와야한다. 이때 ARP 프로토콜을 사용한다.

이때 ARP는 라우터가 연결된 네트워크에 브로드캐스팅 된다.

목적지 구글 서버가 자신의 IP로 온 ARP 요청을 받고 MAC 주소를 응답한다.

ARP로 IP주소를 통해 MAC주소를 얻고 목적지 주소에 데이터가 도착할 수 있다.

Network Access Layer의 MAC주소와 Internet Layer의 IP주소로 데이터가 목적지까지 도달했다.

Transport Layer에서는 목적지 포트번호에 80번이 적혀있다.

따라서 80포트를 사용하고 있는 애플리케이션에게 데이터를 전달해야 한다는 것을 안다.

Application Layer 까지 오면 웹 서버가 사용될 HTTP Request 데이터를 얻을 수 있다.

4-Way-Handshaking

HTTP 요청과 응답과정이 끝나면 연결을 종료해야 한다.

여기서도 TCP 컨트롤비트가 사용된다.

이 단계에서는 ACK과 FIN 플래그가 사용된다.

1. 클라이언트가 서버로 연결을 종료하겠다는 FIN플래그를 전송한다.
2. 서버는 클라이언트에게 ACK 메시지를 보내고 자신의 통신이 끝날때까지 기다린다.
3. 서버가 통신이 끝나면 클라이언트에게 FIN을 보낸다.
4. 클라이언트는 확인했다는 의미로 서버에게 ACK를 보낸다

이렇게 총 4단계로 연결이 종료되고 이를 4-Way-Handshaking 이라고 한다.

여기서 한가지 더!

서버가 FIN을 보내는 과정에서 FIN보다 먼저 보냈던 데이터가 FIN보다 늦게 도착할 경우가 있다.

따라서 클라이언트는 FIN을 받고 나서 일정시간 동안 소켓을 닫지 않고 아직 도착하지 않은 잉여패킷을 기다린다.

이를 TIME_WAT 이라고 한다.

결론은 TCP는

  • 연결지향형 프로토콜
    • 3-Way-HandShaking
  • 신뢰할 수 있는 프로토콜
    • 흐름제어

    • 오류제어

    • 혼잡제어

      → 신뢰성 있는 데이터 전송을 보장

Reference

수리의 TCP/IP

MAC주소와 IP주소의 차이점

profile
개발 경험 저장소

0개의 댓글