История изменений
Исправление novoxudonoser, (текущая версия) :
Истина дальше чем мне показалось изначально
тут как посмотреть… очень диалектичненько получается…
что происходит в описанной тобой схеме (NAT):
HostA (192.168.1.100) –----> GateB (192.168.1.1, 90.90.90.90) –-----> ServerC (80.80.80.80)
что происходит с IP пакетом:
открытие соединения
-----------> ----------->
|IP HEADER |IP HEADER
| ... | ...
| src: 192.168.1.100 | src: 90.90.90.90
| dst: 80.80.80.80 | dst: 80.80.80.80
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 10000 | src port: 10000
| dst port: 80 | dst port: 80
| seq num : 1 | seq num : 1
| ack num : | ack num :
| ... | ...
| data: HTTP 1.1\r\n... | data: HTTP 1.1\r\n...
получение данных
<----------- <-----------
|IP HEADER |IP HEADER
| ... | ...
| src: 80.80.80.80 | src: 80.80.80.80
| dst: 192.168.1.100 | dst: 90.90.90.90
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 80 | src port: 80
| dst port: 10000 | dst port: 10000
| seq num : | seq num :
| ack num : 1 | ack num : 1
| ... | ...
| data: <html>text... | data: <html>text...
... много много пакетов
<----------- <-----------
|IP HEADER |IP HEADER
| ... | ...
| src: 80.80.80.80 | src: 80.80.80.80
| dst: 192.168.1.100 | dst: 90.90.90.90
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 80 | src port: 80
| dst port: 10000 | dst port: 10000
| seq num : | seq num :
| ack num : 100 | ack num : 100
| ... | ...
| data: ...text<\html>EOF | data: ...text<\html>EOF
что нужно мне (tcp termination proxy):
открытие соединения
-----------> ----------->
|IP HEADER |IP HEADER
| ... | ...
| src: 192.168.1.100 | src: 90.90.90.90
| dst: 80.80.80.80 | dst: 80.80.80.80
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 10000 | src port: 99999
| dst port: 80 | dst port: 80
| seq num : 1 | seq num : 1
| ack num : | ack num :
| ... | ...
| data: HTTP 1.1\r\n... | data: HTTP 1.1\r\n...
получение данных
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 90.90.90.90
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 99999
| seq num :
| ack num : 1
| ...
| data: <html>text...
... много много пакетов
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 90.90.90.90
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 99999
| seq num :
| ack num : 100
| ...
| data: ...text<\html>EOF
отсылка их в HostA
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 192.168.1.100
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 10000
| seq num :
| ack num : 1
| ...
| data: <html>text...
...
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 192.168.1.100
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 10000
| seq num :
| ack num : 100
| ...
| data: ...text<\html>EOF
я намеренно опустил SYN ACK взаимодействие и отправил данные сразу в первом пакете также значения seq num, ack num не верны но суть передают в данном примере сначала идет полное получение данных, только затем пересылка, это для упрощения хотя пересылка в HostA должна начинатся сразуже паралельно с дополучением данных
Исправление novoxudonoser, :
Истина дальше чем мне показалось изначально
тут как посмотреть… очень диалектичненько получается…
что происходит в описанной тобой схеме (NAT):
HostA (192.168.1.100) –----> GateB (192.168.1.1, 90.90.90.90) –-----> ServerC (80.80.80.80)
что происходит с IP пакетом:
открытие соединения
-----------> ----------->
|IP HEADER |IP HEADER
| ... | ...
| src: 192.168.1.100 | src: 90.90.90.90
| dst: 80.80.80.80 | dst: 80.80.80.80
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 10000 | src port: 10000
| dst port: 80 | dst port: 80
| seq num : 1 | seq num : 1
| ack num : | ack num :
| ... | ...
| data: HTTP 1.1\r\n... | data: HTTP 1.1\r\n...
получение данных
<----------- <-----------
|IP HEADER |IP HEADER
| ... | ...
| src: 80.80.80.80 | src: 80.80.80.80
| dst: 192.168.1.100 | dst: 90.90.90.90
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 80 | src port: 80
| dst port: 10000 | dst port: 10000
| seq num : | seq num :
| ack num : 1 | ack num : 1
| ... | ...
| data: <html>text... | data: <html>text...
... много много пакетов
<----------- <-----------
|IP HEADER |IP HEADER
| ... | ...
| src: 80.80.80.80 | src: 80.80.80.80
| dst: 192.168.1.100 | dst: 90.90.90.90
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 80 | src port: 80
| dst port: 10000 | dst port: 10000
| seq num : | seq num :
| ack num : 100 | ack num : 100
| ... | ...
| data: ...text<\html>EOF | data: ...text<\html>EOF
что нужно мне (tcp termination proxy):
открытие соединения
-----------> ----------->
|IP HEADER |IP HEADER
| ... | ...
| src: 192.168.1.100 | src: 90.90.90.90
| dst: 80.80.80.80 | dst: 80.80.80.80
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 10000 | src port: 99999
| dst port: 80 | dst port: 80
| seq num : 1 | seq num : 1
| ack num : | ack num :
| ... | ...
| data: HTTP 1.1\r\n... | data: HTTP 1.1\r\n...
получение данных
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 90.90.90.90
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 99999
| seq num :
| ack num : 1
| ...
| data: <html>text...
... много много пакетов
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 90.90.90.90
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 99999
| seq num :
| ack num : 1
| ...
| data: ...text<\html>EOF
отсылка их в HostA
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 192.168.1.100
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 10000
| seq num :
| ack num : 1
| ...
| data: <html>text...
...
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 192.168.1.100
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 10000
| seq num :
| ack num : 100
| ...
| data: ...text<\html>EOF
я намеренно опустил SYN ACK взаимодействие и отправил данные сразу в первом пакете также значения seq num, ack num не верны но суть передают в данном примере сначала идет полное получение данных, только затем пересылка, это для упрощения хотя пересылка в HostA должна начинатся сразуже паралельно с дополучением данных
Исходная версия novoxudonoser, :
Истина дальше чем мне показалось изначально тут как посмотреть… очень диалектичненько получается…
что происходит в описанной тобой схеме (NAT):
HostA (192.168.1.100) –----> GateB (192.168.1.1, 90.90.90.90) –-----> ServerC (80.80.80.80)
что происходит с IP пакетом:
открытие соединения
-----------> ----------->
|IP HEADER |IP HEADER
| ... | ...
| src: 192.168.1.100 | src: 90.90.90.90
| dst: 80.80.80.80 | dst: 80.80.80.80
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 10000 | src port: 10000
| dst port: 80 | dst port: 80
| seq num : 1 | seq num : 1
| ack num : | ack num :
| ... | ...
| data: HTTP 1.1\r\n... | data: HTTP 1.1\r\n...
получение данных
<----------- <-----------
|IP HEADER |IP HEADER
| ... | ...
| src: 80.80.80.80 | src: 80.80.80.80
| dst: 192.168.1.100 | dst: 90.90.90.90
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 80 | src port: 80
| dst port: 10000 | dst port: 10000
| seq num : | seq num :
| ack num : 1 | ack num : 1
| ... | ...
| data: <html>text... | data: <html>text...
... много много пакетов
<----------- <-----------
|IP HEADER |IP HEADER
| ... | ...
| src: 80.80.80.80 | src: 80.80.80.80
| dst: 192.168.1.100 | dst: 90.90.90.90
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 80 | src port: 80
| dst port: 10000 | dst port: 10000
| seq num : | seq num :
| ack num : 100 | ack num : 100
| ... | ...
| data: ...text<\html>EOF | data: ...text<\html>EOF
что нужно мне (tcp termination proxy):
открытие соединения
-----------> ----------->
|IP HEADER |IP HEADER
| ... | ...
| src: 192.168.1.100 | src: 90.90.90.90
| dst: 80.80.80.80 | dst: 80.80.80.80
|IP CONTENT |IP CONTENT
| content type - tcp | content type - tcp
| src port: 10000 | src port: 99999
| dst port: 80 | dst port: 80
| seq num : 1 | seq num : 1
| ack num : | ack num :
| ... | ...
| data: HTTP 1.1\r\n... | data: HTTP 1.1\r\n...
получение данных
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 90.90.90.90
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 99999
| seq num :
| ack num : 1
| ...
| data: <html>text...
... много много пакетов
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 90.90.90.90
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 99999
| seq num :
| ack num : 1
| ...
| data: ...text<\html>EOF
отсылка их в HostA
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 192.168.1.100
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 10000
| seq num :
| ack num : 1
| ...
| data: <html>text...
...
<-----------
|IP HEADER
| ...
| src: 80.80.80.80
| dst: 192.168.1.100
|IP CONTENT
| content type - tcp
| src port: 80
| dst port: 10000
| seq num :
| ack num : 100
| ...
| data: ...text<\html>EOF
я намеренно опустил SYN ACK взаимодействие и отправил данные сразу в первом пакете также значения seq num, ack num не верны но суть передают в данном примере сначала идет полное получение данных, только затем пересылка, это для упрощения хотя пересылка в HostA должна начинатся сразуже паралельно с дополучением данных