오늘은 네트워크의 기초라고 할 수 있는 TCP/IP 이야기로 시작 해보고자 합니다.
우선 OSI 7계층와 TCP/IP 4계층을 소개하겠습니다.
네트워크에서 데이터가 어떻게 오가는지 단계별로 나눈 국제 표준 모델입니다.
총 7단계(계층)로, 각 계층은 역할이 다릅니다.
아래처럼 위에서 아래로 내려가며 데이터를 포장해서 보내고, 받는 쪽에서는 아래에서 위로 벗기며 읽어용. 아래는 표로 정리해준 그림입니다.

실제 인터넷에서 더 많이 쓰는 모델로, OSI 7계층을 4단계로 단순화한 것.
각 계층 역시 표로 정리하면 아래와 같습니다.

그렇다면 왜! 국제 표준 모델이 TCP/IP로 대체된걸까요?
OSI 7계층이 국제 표준이지만 실제로는 TCP/IP 4계층이 더 많이 쓰이는 이유는 실용성과 복잡성 때문입니다. OSI 7계층은 네트워크 통신을 아주 세밀하게 나누어 이론적으로 완벽한 구조를 제시했지만, 실제 인터넷 환경에서는 너무 복잡하고 구현이 어려웠습니다.
이런 와중에 미국에서 보다 더 실용적이고 호환성이 좋은 TCP/IP가 등장해 이제 막 보급되던 인터넷 시장의 선두가 되었고, 자연스럽게 TCP/IP 4계층이 시장을 점거하게 된 것이죠.
그래서 네트워크 공부할 때는 OSI 7계층으로 원리를 배우고, 실제 개발이나 운영에서는 TCP/IP 4계층을 기준으로 프로토콜을 다루게 됩니다.
tcp와 udp는 둘 다 transport layer에서 쓰이는 프로토콜인데요! 말그대로 전송에 관련된 프로토콜임을 생각하며 표를 읽어보시면 됩니다.

각 프로토콜의 장단점과 주로 쓰이는 용도가 무엇인지 아시겠나요? 하지만 낯선 단어가 하나 보이죠? 3-way handshake 는 어떠한 연결방식일까요?
TCP는 데이터를 안전하게 주고받기 위해 연결을 "3단계"로 확인합니다.
클라이언트 → 서버 : "연결할래요(SYN)"
서버 → 클라이언트 : "좋아요, 준비됐어요(SYN+ACK)"
클라이언트 → 서버 : "네, 시작해요(ACK)"
이 과정을 거쳐야 데이터 전송이 시작됩니다.

연결을 끊을 때는 "4단계"로 서로 확인합니다.
클라이언트 → 서버 : "이제 그만 보낼게요(FIN)"
서버 → 클라이언트 : "알겠어요(ACK)"
서버 → 클라이언트 : "나도 이제 그만 보낼게요(FIN)"
클라이언트 → 서버 : "네, 확인했어요(ACK)"
이렇게 해야 안전하게 연결이 종료됩니다.

그림을 자세히 보시면 서버는 ACK를 받고 종료시키지만 클라이언트는 TIME-WAIT을 걸어두고 일정 시간이 지나야 종료되죠? 이는 서버로부터 늦게 도착하는 패킷이 있을 수 있기 때문에 걸어둔 시간 상태입니다.
서버는 패킷을 보내면 끝이라는 것을 알고 있으니 바로 닫는거겠죠!
표를 통해 비교하면서 볼 수 있으니까 이해가 잘 돼요!