2020-2-20 TCP, UDP

TCP

TCP통신이란

  • TCP는 기본적으로 unreliable network에서 reliable network를 보장하도록 하는 프로토콜
  • reliable network를 보장하는것은 4가지 문제를 해결
    • packet 손실
    • packet 순서가 바뀜
    • congestion : 네트워크가 혼잡한 문제
    • overload : receiver가 overload되는 문제
  • 흐름제어/혼잡제어란?
    • 흐름제어(endsytem 대 endsystem)
      • 송신측과 수신측의 데이터 처리 속도 차이를 해결하기 위한 기법
      • 기본 개념은 receiver가 sneder에게 현재 자신의 상태를 feedback
    • 혼잡제어 : 송신측의 데이터 전달과 네트워크 데이터 처리 속도 차이를 해결하기 위한 기법

TCP 연결 및 해제

  • TCP는 정확한 전송을 보장해야한다. 따라서 통신하기 이전에 논리적인 성립을 위해 3-way-handshake 과정을 진행한다.

  • TCP 서버 함수호출 순서 : socket()생성 -> bind()소켓주소 할당 -> listen()연결요청 대기상태 -> accept() 연결허용 -> read/write 데이터 송수신 -> close()연결종료
  • TCP 클라이언트 함수호출 순서 : socket()생성 -> connect()연결요청 -> read/write데이터 송수신 -> close()연결종료
  • 서버와 클라이언트의 차이는 연결요청 과정이다. 클라이언트 소켓을 생선한 후에 서버에 연결을 요청하는 과정. 서버는 listen()호출을 한 이후부터 연결요청 대기 큐를 만든다. 그 이후로부터 클라이언트는 연결요청을 할 수 있다.
  • 3-way handshaking : TCP 소켓은 연결설정에 3번의 대화를 주고 받는다.
    • SYN : Synchronize Sequence Number 연결요청플래그
    • ACK : Acknowlegement 응답
    • 서버는 클라이언트에게 SYN(M)을 받고, 클라이언트에게 연결을 수락한다는 ACK(M+1)과 SYN(N)이 설정된 패킷을 보낸다.
    • 클라이언트는 서버에 ACK(N+1)를 서버에 보내면 연결이 성립.
    • 클라이언트가 연결을 종료할때 FIN플래그를 보낸다.
    • 서버는 클라이언트 요청(FIN)을 받고, 확인메세지로 ACK을 보낸다. 데이터는 모두 보낼때까지 잠시 time-out이 된다.
    • 데이터를 모두 보내고 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
    • 클라이언트는 FIN메세지를 확인했으면 ACK메세지를 보내고, 서버는 ACK메세지를 보내면 연결을 close한다.
    • 클라이언트는 아직 서버로 부터 받지 못할 데이터가 있을것을 대비해 일정시간동안 세션을 남겨두고 잉여 패킷을 기다리는 과정을 거친다.(time-wait)

UDP

  • User Datagram Protocol로 데이터를 데이터그램을 처리하는 프로토콜
  • 데이터그램 단위로 쪼개면서 전송해야되서 전송계층이다.

  • UDP는 TCP의 대안이며, IP와 함께쓰일때 UDP/IP라고 표현한다.

  • TCP와 동일하게 실제 데이터를 받을때 IP를 쓴다. TCP와 달리 메세지를 패킷으로 나누고 재조립하지 않는다. 여러대의 컴퓨터를 거치지 않고 직접 데이터를 주고 받을때는 UDP를 쓴다.

  • UDP를 사용해서 목적지(IP)로 메세지를 보낼 수 있고, 메세지가 목적지에 도착하지 않을 수도 있다.
Written on February 20, 2020