All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ben Greear <greearb@candelatech.com>
To: "'netdev@oss.sgi.com'" <netdev@oss.sgi.com>,
	linux-kernel <linux-kernel@vger.kernel.org>
Subject: TCP connection establishment question (send to self)
Date: Fri, 13 Sep 2002 23:15:53 -0700	[thread overview]
Message-ID: <3D82D419.60801@candelatech.com> (raw)

I'm continuing work on getting a machine to send packets to itself
over external interfaces.  Arp and UDP now work with a few small hacks,
as hinted to by Alexey....

TCP/IP is not working as well as I had hoped.  After binding to the
interface, and opening a listening socket, I attempt to connect.  I
see the first packet go across the looped back wire, but I can get
no response to the initial SYN packet.  From printks in the kernel, I
see that this code is hit in tcp_v4_do_rcv:

	if (sk->state == TCP_LISTEN) {
		struct sock *nsk = tcp_v4_hnd_req(sk, skb);
                 printk("tcp_v4_do_rcv: listen, saddr: %x, nsk: %p, sk: %p\n",
                        skb->nh.iph->saddr, nsk, sk);
		if (!nsk)
			goto discard;

		if (nsk != sk) {
			if (tcp_child_process(sk, nsk, skb))
				goto reset;
			return 0;
		}
	}

nsk is null, because this code is hit in tcp_check_req (tcp_v4_search_req found something):

	/* RFC793 page 36: "If the connection is in any non-synchronized state ...
	 *                  and the incoming segment acknowledges something not yet
	 *                  sent (the segment carries an unaccaptable ACK) ...
	 *                  a reset is sent."
	 */
	if (!(flg & TCP_FLAG_ACK)) {
                 if ((skb->nh.iph->saddr == 0x7102a8c0) || (skb->nh.iph->saddr == 0x7002a8c0)) {
                         printk("not TCP_FLAG_ACK, flg: 0x%x...\n", flg);
                 }
		return NULL;
         }

 From my old networking book, it appears that the first packet does not
need the ACK flag.  A network trace of a connection between two computers
does not show the ACK flag in the first packet...

I am using SO_BINDTODEVICE on the connecting and accepting sockets, I'm
also using source-based routing.

Any suggestions would be welcome, of course!


Here is the wire capture of the attempted connection:

Frame 1 (74 on wire, 74 captured)
     Arrival Time: Sep 13, 2002 22:34:26.679702000
     Time delta from previous packet: 0.000000000 seconds
     Time relative to first packet: 0.000000000 seconds
     Frame Number: 1
     Packet Length: 74 bytes
     Capture Length: 74 bytes
Ethernet II
     Destination: 00:07:e9:09:62:ee (Intel_09:62:ee)
     Source: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
     Type: IP (0x0800)
Internet Protocol, Src Addr: 192.168.2.112 (192.168.2.112), Dst Addr: 192.168.2.113 (192.168.2.113)
     Version: 4
     Header length: 20 bytes
     Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
         0000 00.. = Differentiated Services Codepoint: Default (0x00)
         .... ..0. = ECN-Capable Transport (ECT): 0
         .... ...0 = ECN-CE: 0
     Total Length: 60
     Identification: 0xbc8a
     Flags: 0x04
         .1.. = Don't fragment: Set
         ..0. = More fragments: Not set
     Fragment offset: 0
     Time to live: 64
     Protocol: TCP (0x06)
     Header checksum: 0xf7ff (correct)
     Source: 192.168.2.112 (192.168.2.112)
     Destination: 192.168.2.113 (192.168.2.113)
Transmission Control Protocol, Src Port: 33039 (33039), Dst Port: 33040 (33040), Seq: 931994439, Ack: 0, Len: 0
     Source port: 33039 (33039)
     Destination port: 33040 (33040)
     Sequence number: 931994439
     Header length: 40 bytes
     Flags: 0x00c2 (SYN, ECN, CWR)
         1... .... = Congestion Window Reduced (CWR): Set
         .1.. .... = ECN-Echo: Set
         ..0. .... = Urgent: Not set
         ...0 .... = Acknowledgment: Not set
         .... 0... = Push: Not set
         .... .0.. = Reset: Not set
         .... ..1. = Syn: Set
         .... ...0 = Fin: Not set
     Window size: 5840
     Checksum: 0xad83 (correct)
     Options: (20 bytes)
         Maximum segment size: 1460 bytes
         SACK permitted
         Time stamp: tsval 42957, tsecr 0
         NOP
         Window scale: 0 bytes

Frame 2 (74 on wire, 74 captured)
     Arrival Time: Sep 13, 2002 22:34:29.669918000
     Time delta from previous packet: 2.990216000 seconds
     Time relative to first packet: 2.990216000 seconds
     Frame Number: 2
     Packet Length: 74 bytes
     Capture Length: 74 bytes
Ethernet II
     Destination: 00:07:e9:09:62:ee (Intel_09:62:ee)
     Source: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
     Type: IP (0x0800)
Internet Protocol, Src Addr: 192.168.2.112 (192.168.2.112), Dst Addr: 192.168.2.113 (192.168.2.113)
     Version: 4
     Header length: 20 bytes
     Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
         0000 00.. = Differentiated Services Codepoint: Default (0x00)
         .... ..0. = ECN-Capable Transport (ECT): 0
         .... ...0 = ECN-CE: 0
     Total Length: 60
     Identification: 0xbc8b
     Flags: 0x04
         .1.. = Don't fragment: Set
         ..0. = More fragments: Not set
     Fragment offset: 0
     Time to live: 64
     Protocol: TCP (0x06)
     Header checksum: 0xf7fe (correct)
     Source: 192.168.2.112 (192.168.2.112)
     Destination: 192.168.2.113 (192.168.2.113)
Transmission Control Protocol, Src Port: 33039 (33039), Dst Port: 33040 (33040), Seq: 931994439, Ack: 0, Len: 0
     Source port: 33039 (33039)
     Destination port: 33040 (33040)
     Sequence number: 931994439
     Header length: 40 bytes
     Flags: 0x00c2 (SYN, ECN, CWR)
         1... .... = Congestion Window Reduced (CWR): Set
         .1.. .... = ECN-Echo: Set
         ..0. .... = Urgent: Not set
         ...0 .... = Acknowledgment: Not set
         .... 0... = Push: Not set
         .... .0.. = Reset: Not set
         .... ..1. = Syn: Set
         .... ...0 = Fin: Not set
     Window size: 5840
     Checksum: 0xac57 (correct)
     Options: (20 bytes)
         Maximum segment size: 1460 bytes
         SACK permitted
         Time stamp: tsval 43257, tsecr 0
         NOP
         Window scale: 0 bytes

Frame 3 (42 on wire, 42 captured)
     Arrival Time: Sep 13, 2002 22:34:31.669777000
     Time delta from previous packet: 1.999859000 seconds
     Time relative to first packet: 4.990075000 seconds
     Frame Number: 3
     Packet Length: 42 bytes
     Capture Length: 42 bytes
Ethernet II
     Destination: 00:07:e9:09:62:ee (Intel_09:62:ee)
     Source: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
     Type: ARP (0x0806)
Address Resolution Protocol (request)
     Hardware type: Ethernet (0x0001)
     Protocol type: IP (0x0800)
     Hardware size: 6
     Protocol size: 4
     Opcode: request (0x0001)
     Sender MAC address: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
     Sender IP address: 192.168.2.112 (192.168.2.112)
     Target MAC address: 00:00:00:00:00:00 (XEROX_00:00:00)
     Target IP address: 192.168.2.113 (192.168.2.113)

Frame 4 (60 on wire, 60 captured)
     Arrival Time: Sep 13, 2002 22:34:31.670014000
     Time delta from previous packet: 0.000237000 seconds
     Time relative to first packet: 4.990312000 seconds
     Frame Number: 4
     Packet Length: 60 bytes
     Capture Length: 60 bytes
Ethernet II
     Destination: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
     Source: 00:07:e9:09:62:ee (Intel_09:62:ee)
     Type: ARP (0x0806)
     Trailer: 00000000000000000000000000000000...
Address Resolution Protocol (reply)
     Hardware type: Ethernet (0x0001)
     Protocol type: IP (0x0800)
     Hardware size: 6
     Protocol size: 4
     Opcode: reply (0x0002)
     Sender MAC address: 00:07:e9:09:62:ee (Intel_09:62:ee)
     Sender IP address: 192.168.2.113 (192.168.2.113)
     Target MAC address: 00:07:e9:09:5e:3a (Intel_09:5e:3a)
     Target IP address: 192.168.2.112 (192.168.2.112)


-- 
Ben Greear <greearb@candelatech.com>       <Ben_Greear AT excite.com>
President of Candela Technologies Inc      http://www.candelatech.com
ScryMUD:  http://scry.wanfear.com     http://scry.wanfear.com/~greear



                 reply	other threads:[~2002-09-14  6:11 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=3D82D419.60801@candelatech.com \
    --to=greearb@candelatech.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.