제가 신입 개발자로 취업 준비를 할 때, 면접에서 TCP/IP에 대한 질문을 받은 적이 있었어요.
저는 당황한 목소리로 "잘 모르겠습니다."라고 대답을 했었던 것 같아요. 🫣
이후에 책으로 네트워크에 대해 공부해 보긴 했지만, 혼자 개념을 이해하기 어려워서 금방 포기하게 되더라구요.
최근에 인프런 강의를 통해 다시 공부하게 되었고, 어느 정도 개념을 이해할 수 있게 되었어요.
이번 글에서는 제가 이해한 TCP/IP에 대해 이야기해 볼게요.
💁🏻♀️ 비전공자가 넓고 얕게 개념을 익히는 것이 목표이기 때문에, 전공자분들에게는 다소 가벼운 내용일 수 있어요.
네트워크에 관심이 있다면 OSI 7계층에 대해 들어본 적이 있을 거예요. OSI 7계층은 네트워크 통신에 필요한 기능들을 7개로 나누어 레이어 형태로 쌓은 것을 말해요. 마치 크레이프 케이크처럼요.🤤
이 7계층들은 컴퓨터 내부의 하드웨어와 소프트웨어로 구현되어 있어요.
IP는 3계층에 해당하는 프로토콜로, 서로 다른 네트워크 간의 통신을 가능하게 해요. 예를 들어, 성남에 있는 저와 서울에 있는 동생이 메신저를 주고받으려면 IP가 필요해요.
TCP는 4계층에 해당하는 프로토콜로, 신뢰성 있는 데이터 송수신을 가능하게 해요. 예를 들어, 제가 동생에게 사진을 전송한다고 가정해 볼게요. 사진 데이터는 너무 커서 한 번에 보낼 수 없기 때문에, TCP는 사진을 작은 조각으로 나누고 순번을 붙여서 보내요.
수신 측(동생)에서는 받은 패킷을 모은 후, 순번대로 붙여서 원래의 사진 데이터로 복구해요.
만약 패킷을 전송하는 과정에서 일부가 누락되면, 수신 측은 송신 측에게 "이 조각이 빠졌으니까 다시 보내줘!"라고 요청해서 완성된 사진을 만들어요.
TCP는 데이터를 조각내서 안전하게 배달하고, 빠진 조각을 요청해서 원래의 데이터를 완성하는 역할을 해요.
TCP/IP는 흔히 묶어서 이야기하지만 TCP는 4계층, IP는 3계층에 해당하는 서로 다른 계층이에요. 그러나 TCP는 IP를 기반으로 신뢰성 있는 데이터 송수신을 하기 때문에 두 프로토콜을 함께 TCP/IP라고 불러요.
TCP/IP는 신뢰성 있는 데이터 송수신을 위해, 통신 전 3단계를 거쳐 서로 데이터 송수신이 가능한 상태인지 확인해요. 이를 3-Way Handshake라고 불러요.
1000
을 생성해서 서버에 요청(SYN)을 보내요. "내 시퀀스 번호는 1000
이고, 너랑 연결하고 싶어!"4000
을 생성해서 함께 보내요.1001
을 보낼게."4000
을 같이 보낼게!"4001
을 보낼게"클라이언트는 2단계에서 응답(ACK)을 받았으므로 서버와 연결이 되었다고 판단하지만, 서버는 3단계에서 응답(ACK)을 받기 때문에 이때 클라이언트와 연결이 되었다고 판단해요.
RTT(Round Trip Time)이란?
네트워크 요청을 시작한 후 응답을 받는 데 걸리는 시간을 의미해요. 이 시간이 50ms라고 가정했을 때, 클라이언트는 1 ~ 2단계가 50ms 이내에 완료되어야 하고, 서버는 2 ~ 3단계가 50ms 이내에 완료되어야 합니다.
TCP/IP는 통신을 안전하게 종료하기 위해 4단계를 거쳐 서로 데이터 통신을 끝내도 되는지 확인해요. 이를 4-Way Handshake라고 불러요.
1000
을 생성해서 함께 보내요. "이제 통신을 종료하자! 내 시퀀스 번호는 1000
이야."2000
을 생성해서 함께 보내요. "네 종료 요청을 확인했다는 의미로, 네 시퀀스 번호에 +1을 더해서 1001
과 내 시퀀스 번호 2000
을 보낼게."2001
을 함께 보낼게."1002
와 2002
를 보낼게. 이제 완전히 종료할게~"이렇게 TCP/IP 통신이 어떻게 이루어지는지 짧게 알아보았습니다. 예전에는 SYN, ACK가 뭔지, 시작할 때는 3번인데 왜 종료할 때는 4번인지 이해가 잘 안 갔는데요, 인강 선생님 덕분에 수월하게 이해할 수 있었던 것 같아요!
OSI 7계층 중에서 3계층과 4계층은 가장 중요하게 다뤄지는 것 같은데요, (강의 분량도 가장 많았던...🥲) 기회가 된다면 더 자세한 내용을 블로그에서 이야기해 볼게요.