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. | ||