[Network] TCP/IP 4계층
CS스터디를 진행 중에 있으며, 네트워크 파트를 공부하던 중 TCP/IP에 대해서 학습하고 정리했습니다.
![[Network] TCP/IP 4계층](https://cdn.hashnode.com/res/hashnode/image/upload/v1723126384768/50804801-06e4-4dbd-8f48-168ccfa122ba.webp)
CS스터디로 진행 중인 내용 일부를 정리한 글입니다.
TCP/IP는 무엇인가?
TCP/IP는 네트워크를 공부하면 항상 마주하게 된다. 사실 나도 TCP/IP라는 용어를 어떻게 설명해야할 지 계속 고민이 되고, 정말 간단하고 얕게 알아보았으니 이것을 알고 있다고 얘기하기는 어려운 감이 있다.
하지만 많이들 얘기되는 TCP/IP(Internet Protocol Suite)의 사전적 정의는 인터넷과 이와 유사한 컴퓨터 네트워크 사이에서 정보를 주고 받는 데 사용되는 통신 프로토콜 모음이다.
TCP/IP 4계층
TCP/IP는 흔히 4계층으로 나누어 얘기가 된다.
이 4계층은 Application Layer, Transport Layer, Internet Layer, Network(Link) Layer로 각각 수많은 프로토콜들이 사용된다.
Application Layer
어플리케이션 계층은 특정 서비스를 제공하기 위해 애플리케이션 끼리 정보를 주고 받는데, 웹서비스, 이메일 등 실질적인 서비스를 제공하게 된다. 이 계층에는
HTTP,SMTP,SSH,DNS,FTP등이 있다
HTTP(HyperText Transfer Protocol)
WWW(World Wide Web)의 토대이자 하이퍼텍스트 링크를 사용해 웹페이지를 로드하는 데 사용된다.
SMTP(Simple Mail Transfer Protocol)
네트워크를 통해 이메일을 전송하는 기술 표준이자 메일 전송 프로토콜이다.
SSH(Secure SHell)
네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해주는 프로토콜이다. (즉, 서로 통신을 할 때 보안적으로 안전하게 통신을 하기 위해 사용하는 프로토콜)
FTP(File Transfer Protocol)
FTP는 파일을 이동할 때 사용하는 파일 전송 프로토콜이다.
DNS(Domain Name System)
호스트의 도메인 이름을 호스트의 IP주소로 바꾸거나 IP주소를 도메인 이름으로 바꾸는 작업을 수행하는 시스템이다.
Transport Layer
송신된 데이터를 수신측 어플리케이션으로 전달한다. 포트번호를 활용해 어플리케이션을 찾아주는 역할을 하게되고 세그먼트(TCP) 또는 데이터그램(UDP)으로 데이터를 쪼개고 데이터가 오류없이 순서대로 전달되도록 도음울 주는 계층이다. (세그먼트 또는 데이터그램은 이전 계층의 정보, 즉 메시지를 가지고 있으며 수신 및 발신 포트번호로 이를 캡슐화 하고 있다.)
TCP(Transmission Control Protocol)
두개의 호스트를 연결하고 데이터 스트림을 교환하게 해주는 네트워크 프로토콜으로 데이터와 패킷이 보내진 순서대로 전달하는 것을 보장한다. 이 특성 때문에 대규모의 데이터와 패킷이 전송되어도 보내진 순서대로 전달되어 안정성이 높다. 또한 받지 못한 데이터는 다시 요청해 재전송하게 된다.
TCP는 연결 지향형 프로토콜인데, 이 말은 연결이 되어야 통신을 할 수 있는 프로토콜이라는 뜻이다. 그래서 통신 전에는 Three Way Handshake, 통신 후에는 Four Way Handshake 가 필요하다.
Three Way Handshake
(발신) SYN : 통신을 하고 싶다는 의사 전달
(수신) SYN-ACK : 1번 메시지에 대한 응답(SYN)과 통신 준비가 완료되었다는 응답(ACK)
(발신) ACK : 통신 준비가 완료되었다는 응답 (2번 내용에 대한 답)
Four Way Handshake
(발신) FIN : 통신을 종료하고 싶다는 의사 전달
(수신) ACK : 종료 준비가 완료되었다는 응답
(수신) FIN : 통신이 종료가 된다면 서버 측에서 클라이언트 측으로 다시 한번 FIN 을 보냄
(발신) ACK : 통신 종료가 확인되었다는 의미를 전달
다만 위 Four Way Handshake 과정에서 서버측으로부터 FIN 응답을 클라이언트가 받아도 늦게 전송된 패킷이 있을 수 있기 때문에 클라이언트 측에서는 소켓을 바로 닫지 않고 일정 시간 기다리는 TIME_WAIT가 발생한다. TIME_WAIT 이후 일정 시간이 기다리고 난 후 최종 종료가 된다.
UDP(User Datagram Protocol)
TCP와는 달리 모든 신뢰성 기능이 없다. 가령 전송 속도를 48kbps로 설정하게 되면 48kbps로 데이터를 전송해줄 뿐 데이터가 누락되었는 지, 제대로 받아지고 있는 지 등이 고려되지 않는다. 이러한 특성 때문에 DDoS 공격에 취약성을 보이나 반대로 이런 특성 때문에 실시간 스트리밍과 같이 동영상을 다루는 도메인에서는 빠른 속도를 이유로 UDP를 자주 사용하게 된다.(단순히 데이터를 (신뢰성 검사없이) 전송하므로 실시간성이 보장된다)
Internet Layer
수신 측까지 데이터를 전달하기 위해 사용된다. 한 노드에서 다른 노드로 전송계층에서 받은 세그먼트 또는 데이터그램을 패킷화하여 목적지로 전달하는 역할의 계층으로
IP,ARP,ICMP,RARP,OSPF등이 있다.
IP(Internet Protocol)
인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신 프로토콜
ARP(Address Resolution Protocol)
네트워크 상에서 IP주소를 물리적 네트워크 주소(MAC 주소)로 대응시키기 위해 사용되는 프로토콜
ICMP(Internet Control Message Protocol)
네트워크 내 장치가 데이터 전송과 관련된 문제를 전달하기 위해 사용하는 프로토콜
OSPF(Open Shortest Path First)
IP 네트워크를 위해 개발되고 SPF(Shortest Path First) 알고리즘을 기반으로 하는 링크 상태 라우팅 프로토콜
Network Access Layer(Link Layer)
전선, 광섬유, 무선 등으로 데이터가 네트웤크를 통해 물리적으로 전송되는 방식을 말한다.
TCP/IP 4계층의 통신 순서(WEB)

Application 계층 : 구글 크롬브라우저와 같은 브라우저에서 HTTP통신(HTTP메서드를 활용한 통신)을 통해 HTTP Request 메시지를 보낸다.
Transport 계층 : 패킷에 있는 HTTP Request를 발신 포트번호(SP)와 수신 포트번호(DP)로 감싸준다.(캡슐화)
Internet 계층 : Transport 계층에서까지 생성된 정보를 다시 한 번 캡슐화해 발신 IP주소(SA)와 수신 IP주소(DA)로 감싸준다.
Network 계층(Link 계층) : ARP를 통해 IP주소로 MAC주소를 찾아 다시 한 번 캡슐화해준다.
위 처럼 캡슐화된 패킷을 받아서 내용(HTTP Request)을 확인하기 위해서는 역캡슐화 작업이 진행된다.
마치며...
www.google.com 을 브라우저에 입력하면 어떻게 되나요? 라는 질문의 답을 검색해볼 때 간략하게 설명하는 것들에서는 TCP/IP가 항상 뭉뚱그려져 작성되어있었다. 항상 궁금했던 부분인데 이렇게 CS-네트워크 파트를 공부하면서 간략하게 라도 학습하게되어 궁금증이 조금 해소된 기분이다. 다만 정말 간략한 정리만을 했기 때문에 꾸준히 깊게 공부해볼 필요는 있겠구나 싶다.


![[트러블슈팅] 서버를 터뜨린 쟈그마한 함수](https://cdn.hashnode.com/res/hashnode/image/upload/v1748357643167/fc68d237-0bfe-4f79-8e28-15fd98c5710d.png)
![[기술 서적 후기 및 요약] 쏙쏙 들어오는 함수형 코딩](https://cdn.hashnode.com/res/hashnode/image/upload/v1743129459556/14a7d741-d22e-4622-98e4-1857e449821e.png)
![[Daily Flow 1.] Validator 리팩토링](https://cdn.hashnode.com/res/hashnode/image/upload/v1741161717995/a62693a8-0f24-4dc9-8d80-cefe541ed663.png)