Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
soc:2010:cooldavid:journal:week8 [2010/07/12 15:40] cooldavid created |
soc:2010:cooldavid:journal:week8 [2010/07/19 19:11] (current) cooldavid |
||
---|---|---|---|
Line 24: | Line 24: | ||
gPXE did not check the ACK number while receiving a response from remote | gPXE did not check the ACK number while receiving a response from remote | ||
server with ACK flag set. gPXE assumes the remote server ACKed the SYN/FIN | server with ACK flag set. gPXE assumes the remote server ACKed the SYN/FIN | ||
- | sent by gPXE if *ANY* received a packet from remote server with ACK flag | + | sent by gPXE if **ANY** received a packet from remote server with ACK flag |
set. The error might occur when the packet is out-of-order. | set. The error might occur when the packet is out-of-order. | ||
Line 32: | Line 32: | ||
to remote host instead of ignoring it. | to remote host instead of ignoring it. | ||
- | ==== gPXE scheduling and program flow documentation ==== | + | === Waiting for TCP to fully close === |
- | Doing a note. | + | While using scripts, if the downloaded image is not bootable, |
+ | the gPXE exits faster than it have the opportunity to gracefully | ||
+ | closing the TCP connection. Which might lead the TCP state of | ||
+ | remote server not closed. | ||
+ | |||
+ | [[http://git.etherboot.org/?p=people/cooldavid/gpxe.git;a=commitdiff;h=0bee38ff68e777ca2f563a2d7d5348cfe533232c|This commit]] waits for TCP | ||
+ | to fully close by polling remaining ACKs from remote server and let | ||
+ | the gPXE reply the correct response before shutdown the xfer interface. | ||
+ | |||
+ | It is somehow hacky, hoping we can find better solution. | ||
+ | |||
+ | === Randomize TCP bind port === | ||
+ | To reduce possible TCP port collision. |