NWK02. TCP/IP 4계층 모델

HoyongLee·2023년 2월 26일
0

계층 구조

특정 계층이 변경되었을 때 다른 계층이 영향을 받지 않도록 설계되어 있다.

애플리케이션 계층

응용 프로그램이 사용되는 프로토콜 계층이다.(HTTP, SSH, FTP, SMTP, DNS)
서비스를 실질적으로 사람들에게 제공하는 층이다.
DNS
도메인 이름과 IP주소를 매핑해주는 서버이다. www.naver.com에 DNS 쿼리가 오면 [Root DNS] -> [.com DNS] -> [.naver DNS] -> [.www DNS] 과정을 거쳐 IP주소를 찾아낸다. 이를 통해 IP주소가 바뀌어도 사용자에게 똑같은 도메인 주소로 서비스할 수 있다.

전송 계층

전송 계층은 송신자와 수신자를 연결하는 서비스를 제공한다.
연결 지향 데이터 스트림 지원, 신뢰성, 흐름 제어를 제공한다.

TCP : 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해 연결하여 신뢰성을 구축해 수신 여부를 확인한다. '가상회선 패킷 교환 방식'을 사용한다.

  • 가상회선 패킷 교환 방식
    각 패킷에 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착한다.

UDP : 순서와 수신 여부를 보장하지 않는다. 단순히 데이터만 주고 받는 '데이터그램 패킷 교환 방식'을 사용한다.

  • 데이터그램 패킷 교환 방식
    패킷이 독립적으로 최적의 경로를 선택하여 가는데, 하나의 메시지에서 분할된 여러 패킷이 서로 다른 경로로 전송될 수 있고 도착한 순서가 다를 수 있다.

TCP 연결 성립 과정

두 엔드포인트가 데이터를 주고 받을 준비가 됐다는 것을 보장하기 위해 3-way 핸드쉐이크를 진행한다.

1. 클라이언트는 서버에 클라이언트의 ISN을 담아 SYN을 보낸다. ISN은 새로운 TCP 연결의 첫 번째 패킷에 할당된 임의의 시퀀스 번호이다.
2. 서버는 클라이언트의 SYN을 수신하고 서버의 ISN과 승인번호로 클라이언트의 ISN + 1을 보낸다.
3. 클라이언트는 서버의 ISN + 1을 승인번호로 담아 ACK을 서버에 보낸다.

TCP 연결 해제 과정


1. 연결을 끊고자 하는 쪽(hostA)에서 close()를 호출하면 FIN 패킷을 보낸다.(Half-Close 기법, FIN(+ACK)을 보내고 ACK 번호까지 받았으니, 더 보낼 것이 남아있으면 보내라고 상대에게 알림.)
2. hostB에서 ACK를 보내고 CLOSE_WAIT상태가 된다. 버퍼에 남은 데이터를 모두 보낸다.
3. hostB에서 close()를 호출하여 FIN 패킷을 보낸다.
4. hostA에서 TIME_WAIT만큼 기다린 후 ACK 패킷을 보낸다.

TIME_WAIT만큼 기다리는 이유는?

  • hostB에서 보낸 FIN에 대한 ACK를 hostA에서 보내는데, 패킷이 유실될 수 있다. 따라서 패킷이 유실되면 hostB에서는 FIN 패킷을 다시 보내게 된다. FIN 패킷이 다시 오지 않으면 hostB가 ACK를 받았다고 판단하고 안전하게 연결을 종료하기 위하여 TIME_WAIT 만큼 기다리는 것이다. (만약 TIME_WAIT가 없다면 다른 연결이 해당 소켓에 할당되어 hostB로부터 FIN 패킷을 받아서 혼란이 초래될 수 있다.)
  • hostB에서 보낸 데이터가 아직 도착하지 않았을 수도 있기 때문이다.

왜 연결은 3-way인데 종료는 4-way일까?
한 쪽에서는 데이터 전송을 끝냈다고 해도 다른 한 쪽에서는 보내야 할 데이터가 남아 있을 수 있기 때문이다.

profile
아직 반지하

0개의 댓글

관련 채용 정보