IP와 TCP의 패킷 조립에 대하여...

lovemyin의 이미지

TCP는 신뢰성이 있다고 하고 IP는 없다고 합니다.
IP 프로토콜은 비신뢰성, 비연결지향성 프로토콜입니다. 실제적으로 송신측에서 데이터를 전송하면 IP datagram으로 쪼개어서 나갈것이며 수신측 IP Layer에서는 그것을 받아 Reassemble 작업을 수행할 것입니다.
그렇다면 TCP계층에 있는 Sequence Number도 세그먼트를 조립할 때 쓰인다고 하였는데... IP에서 이미 조립해서 올리는것을 TCP에서 또 조립을 하나요???

두가지가 헤깔려서 질문올립니다.

익명 사용자의 이미지

예. 두곳에서 다해야 합니다. 반드시.

1) ip refragmentation( 하부하드웨어의 MTU가 각각 틀릴 수 있는데, 왜냐? 다양하니까... 이더넷, 토큰링, 시리얼, ATM 등등, 이에 비의존적인 전송을 보장해야하고, 라우팅을 해야하기 때문에 fragment했는데, 이를 수신측에서는 다시 모아서 합쳐서리....xx해야하기 때문.....)
2) tcp reassembly(비신뢰적인 프로토콜을 신뢰성있게 조립, 즉, 순서, 중복등 제어)
3) contents : 응용에서 사용

* 1),2)가 가지는 프로토콜 오버헤드는 결코 작지 않아서, 성능에 많은 영향을 주기도 하고, 버퍼도 많이 필요하게(메모리)된다는...
* 1)2)는 보통 운영체제가 처리하는데, IDS, IPS등을 제작하는 사람은 이를 사용자 영역에서 코딩하게 되는 경우가 있음.
* 3에서 컨텐츠를 특정 패턴과 비교하기도 하는데, 이때 성능을 고려하기 위해 고성능컨텐츠프로세서등을 사용하기도 함

익명 사용자의 이미지

참, 위에서 1) 즉, IP refragmentation만 해서 대충 해도, 대충 먹는 경우가 있는데, 주로 안전한 환경에서 할때는 그럴 수도 있음(이를테면, 연구소, 실험실등) 그러나, 누군가가 짜가패킷 하나 넣거나, 일부러 순서바꿔서(tcp) 패킷들을 보내거나 하면 당장 깨질 수 있음
evasion attack이 바로 이런것이지요.

* 귀차니즘이나, 대추웅이즘, 또는 눙가리공 아웅 메카니즘등을 적용해서 개발할 경우, 1)만해도 대충 돕니다. 심지어 1)도 안해도 대충 돈다는....

lovemyin의 이미지

IP 계층에서 보면 Fregment offset을 이용하여 데이터를 순서적으로 조립하는데 TCP에서 다시 신뢰성 있게 조립(순서, 중복등 제어)을 해야하나요???
혹시 IP 계층에서는 순서가 제대로되어 조립되지 않나요???
아니면 IP계층에서 순서대로 조립해서 올린 데이터들을 다시 또 조립하는건가요???

/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/

익명 사용자의 이미지

한개의 IP 패킷내에서만 순서대로 조립됩니다.
IP 레이어로 보면 다수개의 IP패킷이 날아 다니겠지요.
이 다수개 IP는 서로 순서가 없습니다. 단지, 이중 하나의 IP패킷이 잘게 쪼개져서 날아 다니게 될때, 이를 모아주는 것이 IP 리프레그멘테이션이지요.

TCP는 이렇게 합쳐진(완전한 1개의 ) IP패킷! 다수 개의 모임이 되겠지요.
이 IP패킷간에는 순서가 바뀌기도 중복되기도 때로 손실도 있겠지요.
이를 조정(순서, 중복, 손실)하는 것도 필요하다는 얘기입니다.

lovemyin의 이미지

좋은 답변 정말 감사드립니다.
손님으로 되어있어 정중하게 인사를 못드리네요...
감사드립니다.

앞으로 더 좋은 글 많이 부탁드릴께요...

/***************************************************
* 가장 심플한 것이 가장 아름다운 것이다.
***************************************************/

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.