네트워크 : TCP / IP

J.Noma·2022년 1월 2일
0

컴퓨터 공학

목록 보기
10/18
post-custom-banner

내용전반: 우아한Tech


⚙️ TCP/IP란

인터넷에서 컴퓨터들이 서로 정보를 주고 받는데 쓰이는 프로토콜의 집합. TCP와 IP 프로토콜을 가리켜 TCP/IP라고 부르기도 하지만, IP 프로토콜을 사용한 통신에서 사용되고 있는 프로토콜을 총칭해서 TCP/IP라는 이름이 사용되고 있습니다


⚙️ TCP/IP의 계층

TCP/IP는 계층 구조로 설계되었고 이런 계층 구조 덕에 사양이 변경될 때 변경된 계층만 바꾸면 됩니다

TCP/IP에는 4개의 계층이 존재합니다

1. Application

Application Layer는 이름 그대로 Application에서 사용하는 통신의 움직임을 결정합니다

  • DNS : App이 Domain -> IP 변환 작업을 하기 위한 프로토콜
  • FTP : App이 파일 전송을 하기 위한 프로토콜
  • HTTP : App이 클라이언트-서버 요청/응답을 주고받기 위한 프로토콜

2. Transport

서로 다른 호스트(ex. 서로 다른 컴퓨터) 간 데이터 흐름을 지원하는 계층

대표적으로 상대적으로 신뢰성이 높은 방식인 TCP와 신뢰성보단 속도를 중시하는 UDP가 있습니다

3. Internet

(Internet / Network Layer라고 불립니다)

네트워크 상에서 패킷의 이동을 다룹니다 (패킷은 전송하는 데이터의 최소 단위를 말합니다). 인터넷의 경우 상대 컴퓨터에게 도달하기 위해 여러 컴퓨터와 네트워크를 거치게 되는데 최종적으로 목적지에 도달하기 위한 경로를 결정하게 됩니다

4. Network Access

(Network / Link / Data Link / Network Interface Layer라고 불립니다)

네트워크에 접속하는 하드웨어적인 면을 다룹니다. 예로, 운영체제가 하드웨어를 제어하기 위한 디바이스 드라이버, 네트워크 인터페이스 카드 등이 포함됩니다. 물리적으로 보인다거나 하드웨어적 측면은 모두 Network Access Layer의 역할입니다

대표적으로 Ethernet이 있습니다


⚙️ TCP/IP의 흐름

1. 웹브라우저 -> 공유기

웹브라우저에 http://google.com을 입력했을 때 어떤 일이 일어나는지 살펴보자

  1. 브라우저가 구글 웹서버의 80포트로 HTTP Request를 전송 (80은 웹서버의 well-known 포트번호)

  2. Request 전송을 위해 최종적으로 패킷의 형태를 만들어야 한다. 패킷에는 각 Layer의 정보가 담겨야 한다. 현재 우리는 Application Layer에서 HTTP 프로토콜을 사용 중이므로 패킷에 HTTP Request가 들어간다

  3. 다음 Layer인 Transport Layer에서는 TCP 프로토콜을 쓴다고 가정하자. 따라서 패킷에 TCP 헤더가 붙게 된다. TCP 헤더에는 대표적으로 SP(시작포트)/DP(도착포트)가 포함된다

  4. 다음 Layer인 Internet Layer에서는 IP 프로토콜 헤더를 붙혀 보자. IP 헤더에는 대표적으로 SA(시작IP주소)/DA(도착IP주소)가 포함된다 (참고로, 도착IP주소는 "google.com"이라는 URL을 DNS 서버로 요청하여 미리 알아내야 한다)

  5. 마지막 Layer인 Network Access Layer에서는 Ethernet 프로토콜 헤더를 붙혀 보자. Ethernet 헤더에는 대표적으로 SA(시작MAC주소)/DA(도착MAC주소)가 포함된다 (참고로, 도착MAC주소는 ARP 프로토콜을 통해 IP주소를 MAC주소로 해석하는 작업이 필요하다)

TCP 프로토콜이 연결을 시작할 때 : 3 Way Hand-shaking
TCP는 연결지향형 프로토콜로, 데이터를 전송하기 전에 송신측과 수신측이 서로 연결되는 작업을 선행한다. 이를 3 Way Hand-shaking이라 한다. TCP 헤더에 포함된 Control flag 중 SYN과 ACK를 사용하여 아래 작업들을 수행한다. 아래 3번의 상호작용 후 데이터 전송이 시작된다

2. 공유기를 나가면서

공유기를 사용한다는 것은 네트워크가 하나의 공유 IP와 device별 사설 IP를 가지는 구조임을 뜻한다. 사설 IP 패킷의 헤더에 적힌 사설 IP주소는 공유기를 나가면서 공인 IP로 변환하는 작업을 거친다(=NAT)

3. 공유기 -> 목적지 라우터

공유기 이후부터는 네트워크를 돌아다니며 목적지를 찾아가야 한다. 라우터라는 장비가 네트워크들을 서로 연결해준다. 그리고 라우터는 현재 패킷이 다음으로 가야할 네트워크가 어디인지, 목적지로의 경로를 찾아 나가게 되는데, 이 과정을 라우팅이라고 한다

4. 목적지 라우터에 도착하면

패킷에 적힌 도착IP주소를 ARP 프로토콜을 통해 MAC주소를 얻어내야 한다. ARP 프로토콜은 현재 라우터에 연결된 모든 device로 브로드캐스트하여 어느 device인지(MAC주소) 알아낸다

5. 목적지 device(서버)에 도착하면

1번에서 웹브라우저가 데이터를 전송하기 위해 거쳤던 4개 Layer를 역순으로 거친다. 이제 서버가 HTTP Request를 인식하고 데이터를 담아 회신을 보내게 된다.

6. 요청과 응답 cycle이 끝나면

TCP 프로토콜을 예로 알아보자

TCP 프로토콜의 연결 종료 : 4 Way Hand-shaking
위에서 TCP 프로토콜이 연결을 "시작"할 때 3 way hand-shaking이라는 과정이 일어났던 것과 유사하게, 연결을 "종료"할 때는 4 way hand-shaking 과정이 일어난다. 여기서는 ACK와 FIN flag가 사용된다

TCP 프로토콜의 연결 종료 중 발생 가능한 문제
서버가 클라이언트로 보낸 "데이터"가 커서 오래 걸리다보니, 데이터를 전부 전송했다는 의미로 보낸 "FIN" 메시지가 데이터보다 먼저 도착해버리는 경우가 있다. 이에 대비하기 위해, 클라이언트는 FIN이 들어온다고 해서 연결된 소켓을 바로 닫지 않고 일정 시간을 기다려준다(=TIME-WAIT)

profile
노션으로 이사갑니다 https://tungsten-run-778.notion.site/Study-Archive-98e51c3793684d428070695d5722d1fe
post-custom-banner

0개의 댓글