네트워크플밍 4,5 tcp,udp소켓

ttomy·2022년 7월 19일
0

tcp기본

전송계층 역할:

  • 호스트안에서의 프로세스 식별, 맞는 포트에 전달
  • 신뢰성 보장(ack)
  • 흐름제어
  • 혼잡제어

tcp가 다루는 패킷단위:세그먼트
세그먼트 안에 헤더와 데이터가 들어간다.

TCP헤더

  • sequence number
    데이터들을 한 세그먼트에 모두 담지 못할 것이다.
    바이트스트림이 끊길텐데 이것이 한 바이트스트림이었음을 sequence number에 시작한 바이트스트림 index가 들어가 알게되고 후에 합칠 수 있다.

  • acknowledgement number
    성공적으로 데이터를 전달받았음을 알림. 수신노드가 다음에 받을 데이터의 sequence number가 들어감.(잘 받았어요 다음에는 이 number로 데이터 보내주세요.)

  • tcp flags
    tcp 세그먼트 기능을 표현함.
    CWR,ECE
    ACK
    PSH
    RST,SYN,FIN

  • window size
    수신버퍼의 현재 여유크기를 알아야 적절한 크기의 데이터를 보낼수 있음(흐름제어)
    수신버퍼의 크기를 window size에 저장해 보낸다.

  • tcp checksum
    세그먼트의 데이터 무결성을 검사하는 비트

  • urgent pointer
    긴급 데이터의 페이로드에서의 위치를 가리키는 포인트

TCP 상태


3-way handshaking
4-way close

close할 때 sender가 wait하지 않고 종료되는 경우도 있다.
responder가 자신도 종료하고 싶어서 ack와 fin을 같이 보냄->
sender가 fin을 받아 closing 하고 ack 보냄->responder도 ack받아 close

TCP 연결,종료


sequence number에서 요청한 번호+1로 ack를 통해 데이터를 보내는 것을 볼 수 있다.


위에서 말한 wait하지 않고 종료되는 경우이다.

  • half close
    서버가 하던작업을 마치고 fin해야 할경우이다. 위에서 본 time wait가 있을경우 닫는 과정이다.

TCP 흐름제어

송,수신 측에서 데이터를 담을 수 있는 버퍼의 현 상태를 알아야 그에 맞는 크기만큼 데이터를 보낼 수 있다. 이를 위해 window에 버퍼의 여유크기를 저장해 보낸다.

  • 송신 window: 수신 측의 ack없이 한번에 전달할 수 있는 사이즈
  • 수신 window: 수신 측에서 수신할 수 있는 바이트 사이즈

윈도우의 크기를 통해 보내는 데이터의 양을 조절하는 식으로 흐름제어를 하고, ack를 몇 번이상 오류가 났음을 인지하면 혼잡 윈도우의 크기를 줄이는 식으로 혼잡제어가 가능하다.

tcp기반 서버-클라이언트

iterative서버 모델

UDP기본

user datagram protocol.
비연결형.
tcp와 달리 신뢰성 보장 안함.-> 순차적 전달,혼잡제어,흐름제어 수행안함

  • UDP특징
    연결설정 안해서 connect() 함수 불필요.
    신뢰성 원하면 응용프로그램 수준에서 구현해야 함.
    다자 간 통신 쉽게 구현 가능.-> 연결 설정 안하므로
    한 포트에 여러 클라이언트가 붙을 수 있음.

UDP 서버/클라이언트

UDP소켓 생성

UDP소켓 특징

advanced 소켓

소켓 프로그래밍 api들

  • unix// berkeley socket
  • window// Winsock

TCP program flow

getaddinfo()로 IP주소를 받아옴.
프로그램이 클라우드에 올려지기도 하는 등 환경이 변하기에 getaddinfo로 주소정보를 받아온다.

UDP program flow

IPv6

sin_family
sin_port
sin_addr는 IPv4와 비슷하게 존재한다.
IPv6에서는 클론 으로 구분되는 16바이트 주소가 들어간다,
IPv6에서는 geraddrinfo()가 사용된다. gethostbyname()은 ipv4에서만 가능하다.

addrinfo

0개의 댓글