C++ 네트워크 Tcp 통신에 관련 된 질문입니다.

kanglanguage의 이미지

특정 데이터의 모음을 패킷이라고 하고 실제 send(보내는)과정에서 해당 패킷을 보낸다고 했을 때.
순서에 관련 된 질문입니다.

A클라이언트와 B클라이언트가 있다고 했을 때
A클라이언트에서 A, B패킷을 보냈을 때 서버에서 A, B순서로 패킷을 받는가? 입니다.

또, A클라이언트에서 A패킷을 보내고 그 다음 B클라이언트에서 B패킷을 보내면
서버에서는 A클라이언트의 A패킷, B클라이언트의 B패킷을 순서대로 받는가? 입니다.

결론:
1. 클라이언트에서 순서에 맞춰 패킷을 보내면, 서버에서 해당 패킷을 순서대로 받는가?
2. 클라이언트가 다른 경우에도 해당 법칙이 적용되는가?

해당 정보를 어디서 찾아야 할 지 모르겠습니다.
신뢰성이 있는 연결이라고만 적혀 있어서 '패킷을 보내면 해당 패킷의 정보는 확실하게 받는다.' 인건지..

어느 글에서는 '안 된다.' 라고 하고 어느 글에서는 '된다' 라고 하기에 더욱 헷갈려서 내공이 심후한 kldp에 여쭤봅니다..!

kanglanguage의 이미지

실제 응용프로그램이 운영체제로부터 패킷을 전달받아 사용하게 될 때의 이야기였습니다.

twinwings의 이미지

tcp에서는 "순서, 실패시-재전송"을 보장 합니다.

단, 패킷단위가 아니라 byte(stream)단위 관리하기 때문에 버퍼에 패킷간의 경계가 없습니다.

이것은 유저가 해주어야 할 일입니다.

kanglanguage의 이미지

감사합니다. 찾아보던 도중 '동기, 비동기' IOCP에 관련된 글을 보게 되었는데. 해당 부분에서 제가 궁금해하던 부분을 찾아낼 수 있었습니다.

kanglanguage의 이미지

감사합니다. 찾아보던 도중 '동기, 비동기' IOCP에 관련된 글을 보게 되었는데. 해당 부분에서 제가 궁금해하던 부분을 찾아낼 수 있었습니다.

Necromancer의 이미지

송신측에서 쏜다고 수신측에서 100% 다 받는다는 보장은 없습니다. 단, 순서는 확실히 보장됩니다.
쓰는 쪽 입장에서는 중간에 언제든지 끊어질 수 있는 스트림(물결)이라고 생각하시면 될겁니다.

예를 들어 송신측에서 tcp로 20kbytes 쐈는데 10k~11k 사이 1kbytes가 없어지고 나머지가 모두 서버에 도착할 경우 os에서 없어진 1kbytes를 다시 요청해서 받아다 재조립해서 20kbytes를 자동으로 순서대로 맞춰 넘겨줍니다. tcp 받는 프로그램은 걍 받아서 쓰면 됩니다.

그런데 사라진 1k에 대한 재전송 복구를 시도했는데도 도저히 복구할 수 없을 경우 수신측에는 제대로 된 앞 10k만 전송해주고 끝입니다. 없어진 부분 이후는 그냥 버리고 connection reset 떨어져 버립니다.

Written By the Black Knight of Destruction

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.