네트워크 프로그래밍 CH5. 에코 서버/클라이언트

Alpha, Orderly·2023년 3월 21일
0

에코 서버?

  • 클라이언트가 전송한 문자열을 그대로 다시 보내주는 서버

무슨 문제가 있을까?

  • TCP는 데이터의 경계가 없는 프로토콜이다.
  • 즉, 한번 서버에서 read함수를 한번 실행했을때, 반대편에서 한번의 write로 보낸 문자열을 읽지 않고
    여러번 보낸것을 한번에 받거나, 한번 보낸걸 부분만 받아올수도 있다!

클라이언트에서의 해결

  • 클라이언트는 자신이 받을 문자열의 사이즈를 완벽하게 알고있다!

클라이언트 코드

  • recv_len 을 통해 읽어온 길이를 측정한다.
  • 읽어올때는 메시지에서 읽어온 만큼 건너뛰고 그 뒤에 받는다.
  • str_len : 받아와야 하는 메시지의 크기
  • 자신이 필요한 만큼 받아올때까지 read 해 올수 있다!

TCP 이론


슬라이딩 윈도우 사용 가능해진다

입출력 버퍼

  • TCP 소켓에 각각 존재하며, 소켓 생성시 자동으로 생성된다.
  • 소켓을 닫아도 출력버퍼의 데이터는 전송된다.
  • 소켓을 닫으면 입력버퍼의 데이터는 사라진다.

연결 / 전송 / 종료

연결

  • 연결은 3-way handshaking 을 사용한다!

전송

  • 전송은 아래와 같이 이루어진다.
    • 특정 SEQ 번호를 가진 데이터 전송한다.
    • 잘 받았고 다음에 받을 SEQ 번호를 가진 ACK 돌려줌.

종료

  • 종료시 4-way handshaking으로 이루어진다.
  • 서로 FIN - FIN/ACK를 주고받아 일방적인 종료가 되지 않도록 방지한다.
profile
만능 컴덕후 겸 번지 팬

0개의 댓글