TCP/IP, TCP, 3-way-handshaking

2. TCP/IP 프로토콜을 4계층 설명하시오

Layer

LINK 계층
OSI 7 Layer의 물리적인 영역을 표준화 시킨 계층이다.

LAN, WAN과 같은 네트워크 표준과 관련된 프로토콜을 정의하며, 물리적인 주소로 MAC을 사용한다.

프로토콜 : Ethernet, PPP, Token Ring 등

IP 계층
OSI 7 Layer의 네트워크 계층에 해당하며, 라우팅을 해주는 계층이다.

IP 자체는 비-연결 지향적이며, 신뢰할 수 없는 프로토콜이다.

패킷을 전송할 때마다 불규칙적으로 라우팅해주고, 전송 중에 패킷이 손실되거나 오류가 발생할 수 있다.

프로토콜 : IP, ARP, RARP

TCP/UDP 계층
OSI 7 Layer의 전송 계층에 해당하며, 포트를 통해 데이터의 실제 송수신을 담당하는 영역이다.

UDP는 비연결형 프로토콜이며, 연결형 프로톨인 TCP에 비해 전송 속도가 빠르다.

프로토콜 : TCP, UDP, RTP, RTCP 등

Application 계층
OSI 7 Layer의 응용 계층에 해당하며, 사용자application소통할 수 있게 해준다.

Application들이 데이터를 교환하기 위해 사용되는 프로토콜을 사용한다.

프로토콜 : FTP, HTTP, SSH, Telnet, DNS, SMTP 등

2-1. 신뢰할 수 없는 IP 프로토콜을 사용할 때 패킷을 보호할 수 있는 기술

패킷을 암호화, 전자 서명 등을 통해 패킷 스니핑을 당했을 때 정보가 유출되지 않게하거나,

SSH, SSL과 같은 보안 프로토콜을 통해 통신의 안정성을 강화할 수 있다.


3. TCP란 ?

TCP는 연결형 프로토콜로 데이터 전송 시 전송 순서신뢰성을 보장한다.

통신을 위한 Path를 만들어놓고, 송수신이 종료되면 연결을 끊는다.

신뢰성 보장을 위한 절차가 포함되어 UDP에 비해 속도가 느리다.

3-1. 서버와 클라이언트 통신 과정 (함수 호출 순서)

서버가 연결해요청 대기 큐를 생성하고, 소켓 주소를 할당하고 대기한다.

클라이언트가 적절한 포트를 통해 연결 요청을 하고,

서버에서 accept 하기 전까지 block되었다가 accpt를 하면 데이터를 송수신하게 됩니다.

3-2. TCP의 Header

통신을 위한 Source portDestination Port 정보

데이터 순서 보장을 위한 sequnece number

연결 설정 및 종료와 관련된 code bits 등이 있다.

  • URG, ACK, PSH, RST, SYN, FIN

3-3. TCP에서 데이터 순서를 보장하는 방법

흐름제어 : 송신 측과 수신 측의 데이터 처리 속도 차이 조절

혼잡제어 : 네트워크 내 트래픽을 고려해서 패킷의 양을 설정하는 알고리즘


4. 3-way handshaking이란?

서버와 클라이언트가 TCP를 통해 연결할 때 연결 설정 과정 중 일어나는 3번의 통신

TCP 헤더에 담긴 code bitsSYN, ACK를 사용한다.

  • SYN : 연결 요청 플래그
  • ACK : 응답
  1. 클라이언트에서 연결 요청을 위해 SYN(M) 패킷을 보낸다.

  2. 서버에서는 SYN(M)을 받고, 수락 시 ACK(M+1)과 SYN(N)을 보낸다.

  3. 클라이언트는 패킷을 받고, ACK(N+1)을 서버로 다시 보낸다.

4-1. 4-way handshaking이란?

  1. 클라이언트가 연결을 종료하겠다는 FIN 플래그를 전송한다.

  2. 서버가 패킷을 받고, 확인 메시지로 ACK을 보낸다.

    • 데이터가 모두 보내질 때까지 TIME_OUT이 된다.
  3. 데이터가 다 보내지고, 통신이 끝나면 서버에서 클라이언트로 FIN 플래그를 보낸다.

  4. 클라이언트는 FIN을 받고 ACK를 서버로 보낸다.

  5. 클라이언트는 서버로부터 아직 받지 못한 데이터가 있는 상황을 대비하여, 일정 시간동안 세션을 남겨놓고, 잉여 패킷을 기다리다가 완전 종료된다.

Author

Inwoo Jeong

Posted on

2021-11-18

Updated on

2021-11-18

Licensed under

You need to set install_url to use ShareThis. Please set it in _config.yml.

댓글