Tcpintro
Tcpintro
An Introduction to TCP/IP
019-0074 020701G Printed in U.S.A. 2001 Z-World Inc. All rights reserved. Z-World reserves the right to make changes and improvements to its products without providing notice.
Trademarks
Dynamic C is a registered trademark of Z-World Inc. Windows is a registered trademark of Microsoft Corporation
Z-World, Inc.
2900 Spafford Street Davis, California 95616-6800 USA
Telephone: 530.757.3737 Fax: 530.757.3792 or 530.753.5141 www.zworld.com
ii
Table of Contents
1. Introduction.................................................................................................................1 2. Ethernet Basics ...........................................................................................................3
2.1 Ethernet Address .........................................................................................................................3 2.2 Physical Connections ..................................................................................................................3 2.2.1 Cables.........................................................................................................................4 2.3 Frames .........................................................................................................................................4 2.3.1 Collisions ..................................................................................................................5
3. Networks .....................................................................................................................7
3.1 LAN.............................................................................................................................................7 3.1.1 Repeaters and Bridges ...............................................................................................7 3.2 WAN............................................................................................................................................8 3.2.1 Packet Switches .........................................................................................................8 3.2.2 Forwarding a Packet ..................................................................................................8 3.3 VPN.............................................................................................................................................9 3.4 Network Devices .........................................................................................................................9 3.4.1 Routers .......................................................................................................................9 3.4.2 Firewalls.....................................................................................................................9 3.4.3 Gateways..................................................................................................................10 3.5 Network Architecture................................................................................................................10 3.5.1 Client/Server Networks............................................................................................10 3.5.1.1 Port Numbers ........................................................................................11
An Introduction to TCP/IP
iii
iv
An Introduction to TCP/IP
1. Introduction
This manual is intended for embedded systems engineers and support professionals who are not familiar with basic networking concepts. An overview of an Ethernet network and the TCP/IP suite of protocols used to communicate across the network will be given. The implementation details that are discussed in this manual pertain to versions of Dynamic C prior to 7.05. Improvements and additions to the TCP/IP suite of protocols are fully documented in the Dynamic C TCP/IP Users Manual.
An Introduction to TCP/IP
An Introduction to TCP/IP
2. Ethernet Basics
TCP/IP (Transmission Control Protocol/Internet Protocol) is a set of protocols independent of the physical medium used to transmit data, but most data transmission for Internet communication begins and ends with Ethernet frames. The Ethernet can use either a bus or star topology. A bus topology attaches all devices in sequence on a single cable. In a star topology all devices are wired directly to a central hub. 10Base-T uses a combination called a star-shaped bus topology because while the attached devices can share all data coming in on the cable, the actual wiring is in a star shape. The access method used by the Ethernet is called Carrier Sense Multiple Access with Collision Detect (CSMA/CD). This is a contention protocol, meaning it is a set of rules to follow when there is competition for shared resources.
An Introduction to TCP/IP
2.2.1 Cables
Ethernet cables are similar to U.S. telephone plug cables, except they have eight connectors. For our purposes, there are two types of cablescrossover and straight-through. In most instances, the straight-through cables are used. It is necessary to use a crossover cable when two computers are connected directly without a hub (for example, if you want to connect your PCs Ethernet directly to the Rabbit Semiconductor TCP/IP Development Board.) Some hubs have one input that can accept either a straight-through or crossover cable depending on the position of a switch. In this case make sure that the switch position and cable type agree.
Ethernet cables
2.3 Frames
Bits flowing across the Ethernet are grouped into structures called frames. A frame must be between 46 and 1500 bytes in size. An Ethernet frame has four parts: 1. A Preamble of 8 bytes that helps synchronize the circuitry, thus allowing small bit rate differences between sender and receiver. 2. A Header of 14 bytes that contains a 6 byte destination address, 6 byte source address and a 2 byte type field. 3. A Data area of variable length that, along with the header, is passed to the IP layer (aka. the Network layer). 4. A Trailer of 4 bytes that contains a CRC to guard against corrupted frames. If the destination address is all 1 bits, it defines a broadcast frame and all systems on the local network process the frame. There are also multicast frames. A subset of systems can form a multicast group that has an address that does not match any other system on the network. All systems in a particular subset process a packet with a destination address that matches their subset. A system can belong to any number of subsets. A system may put its interface(s) into promiscuous mode and process all frames sent across its Ethernet. This is known as "sniffing the ether." It is used for network debugging and spying.
An Introduction to TCP/IP
2.3.1 Collisions
In a star-shaped bus topology, all systems have access to the network at any time. Before sending data, a system must determine if the network is free or if it is already sending a frame. If a frame is already being sent, a system will wait. Two systems can listen on the network and hear silence and then proceed to send data at the same time. This is called a collision. Ethernet hardware has collision detection sensors to take care of this problem. This is the Collision Detect (CD) part of CSMA/CD. The colliding data is ignored, and the systems involved will wait a random amount of time before resending their data.
An Introduction to TCP/IP
An Introduction to TCP/IP
3. Networks
A network is a system of hardware and software, put together for the purpose of communication and resource sharing. A network includes transmission hardware, devices to interconnect transmission media and to control transmissions, and software to decode and format data, as well as to detect and correct problems. There are several types of networks in use today. This chapter will focus on three of them:
LAN - Local Area Network WAN - Wide Area Network VPN - Virtual Private Network
3.1 LAN
The most widely deployed type of network, LANs were designed as an alternative to the more expensive point-to-point connection. A LAN has high throughput for relatively low cost. LANs often rely on shared media, usually a cable, for connecting many computers. This reduces cost. The computers take turns using the cable to send data.
An Introduction to TCP/IP
3.2 WAN
To be considered a WAN, a network must be able to connect an arbitrary number of sites across an arbitrary distance, with an arbitrary number of computers at each site. In addition, it must have reasonable performance (no long delays) and allow all of the computers connected to it to communicate simultaneously. This is accomplished with packet switches.
Computer
Switch at Site 1
High-speed Connection
Switch at Site 2
Switch at Site 3
Switch at Site 4
An Introduction to TCP/IP
3.3 VPN
VPNs are built on top of a publicly-accessible infrastructure, such as the Internet or the public telephone network. They use some form of encryption and have strong user authentication. Essentially a VPN is a form of WAN; the difference is their ability to use public networks rather than private leased lines. A VPN supports the same intranet services as a traditional WAN, but also supports remote access service. This is good for telecommuting, as leased lines dont usually extend to private homes and travel destinations. A remote VPN user can connect via an Internet Service Provider (ISP) in the usual way. This eliminates long-distance charges. The user can then initiate a tunnel request to the destination server. The server authenticates the user and creates the other end of the tunnel. VPN software encrypts the data, packages it in an IP packet (for compatibility with the Internet) and sends it through the tunnel, where it is decrypted at the other end. There are several tunneling protocols available: IP security (IPsec), Point-to-Point Tunneling Protocol (PPTP) and Layer 2 Tunneling Protocol (L2TP).
3.4.1 Routers
A router is a hardware device that connects two or more networks. Routers are the primary backbone device of the Internet, connecting different network technologies into a seamless whole. Each router is assigned two or more IP addresses because each IP address contains a prefix that specifies a physical network. Before a packet is passed to the routing software, it is examined. If it is corrupted, it is discarded. If it is not corrupted, a routing table is consulted to determine where to send it next. By default, routers do not propagate broadcast packets (see Directed Broadcast Address on page 17). A router can be configured to pass certain types of broadcasts.
3.4.2 Firewalls
A firewall is a computer, router, or some other communications device that controls data flow between networks. Generally, a firewall is a first-line defense against attacks from the outside world. A firewall can be hardware-based or software-based. A hardware-based firewall is a special router with additional filter and management capabilities. A software-based firewall runs on top of the operating system and turns a PC into a firewall. Conceptually, firewalls can be categorized as Network layer (aka Data Link layer) or Application layer. Network layer firewalls tend to be very fast. They control traffic based on the source and destination addresses and port numbers, using this information to decide whether to pass the data on or discard it. Application layer firewalls do not allow traffic to flow directly between networks. They are typically hosts running proxy servers. Proxy servers can implement protocol specific security because
An Introduction to TCP/IP
they understand the application protocol being used. For instance, an application layer firewall can be configured to allow only e-mail into and out of the local network it protects.
3.4.3 Gateways
A gateway performs routing functions. The term default gateway is used to identify the router that connects a LAN to an internet. A gateway can do more than a router; it also performs protocol conversions from one network to another.
Client Software An arbitrary application program that becomes a client when a remote service is desired. It also performs other local computations. Actively initiates contact. Invoked by a user and executes for one session. Capable of accessing multiple services as needed, but actively contacts only one remote server at a time.
Server Software A special-purpose, privileged program dedicated to providing one service. It can handle multiple remote clients at the same time. Passively waits for contact. Invoked when the system boots and executes through many sessions. Accepts contact from an arbitrary number of clients, but offers a single service or a fixed set of services.
Can require powerful hardware and a sophisticated Does not require special hardware or a sophisticated operating system, depending on how many clients operating system. are being served.
10
An Introduction to TCP/IP
3.5.1.1 Port Numbers Port numbers are the mechanism for identifying particular client and server applications. Servers select a port to wait for a connection. Most services have well-known port numbers. For example, HTTP uses port 80. When a web browser (the client) requests a web page it specifies port 80 when contacting the server. Clients usually have ephemeral port numbers since they exist only as long as the session lasts. Some of the common well-known TCP port numbers are listed in the table below.
Listening Application Echo request File Transfer Protocol (FTP) Telnet Simple Mail Transfer Protocol (SMTP) Domain Name Server HTTP Server
An Introduction to TCP/IP
11
12
An Introduction to TCP/IP
Name of Layer
Purpose of Layer
Specifies how a particular application uses a network. Specifies how to represent data. Specifies how to establish communication with a remote system. Specifies how to reliably handle data transfer. Specifies addressing assignments and how packets are forwarded. Specifies the organization of data into frames and how to send frames over a network. Specifies the basic network hardware.
The 7-layer model has been revised to the 5-layer TCP/IP reference model to meet the current needs of protocol designers.
Table 3. TCP/IP 5-Layer Reference Model
Name of Layer
Purpose of Layer
Specifies how a particular application uses a network. Specifies how to ensure reliable transport of data. Specifies packet format and routing. Specifies frame organization and transmittal. Specifies the basic network hardware.
An Introduction to TCP/IP
13
Receiver Application
Identical Message
Transport
Identical Message
Transport
Network
Identical Message
Network
Data Link
Identical Message
Data Link
Hardware
Physical Connection
Hardware
Each host or router in the internet must run a protocol stack. The details of the underlying physical connections are hidden by the software. The sending software at each layer communicates with the corresponding layer at the receiving side through information stored in headers. Each layer adds its header to the front of the message from the next higher layer. The header is removed by the corresponding layer on the receiving side.
14
An Introduction to TCP/IP
5. TCP/IP Protocols
This chapter discusses the protocols available in the TCP/IP protocol suite. The following figure shows how they correspond to the 5-layer TCP/IP Reference Model. This is not a perfect one-toone correspondence; for instance, Internet Protocol (IP) uses the Address Resolution Protocol (ARP), but is shown here at the same layer in the stack.
FTP
SMTP
HTTP Application
DNS
TCP Transport
UDP
ICMP
ARP Network
IP
Ethernet
Data Link
Figure 4. TCP/IP Protocol Flow
An Introduction to TCP/IP
15
5.1 IP
IP provides communication between hosts on different kinds of networks (i.e., different data-link implementations such as Ethenet and Token Ring). It is a connectionless, unreliable packet delivery service. Connectionless means that there is no handshaking, each packet is independent of any other packet. It is unreliable because there is no guarantee that a packet gets delivered; higherlevel protocols must deal with that.
5.1.1 IP Address
IP defines an addressing scheme that is independent of the underlying physical address (e.g, 48-bit MAC address). IP specifies a unique 32-bit number for each host on a network. This number is known as the Internet Protocol Address, the IP Address or the Internet Address. These terms are interchangeable. Each packet sent across the internet contains the IP address of the source of the packet and the IP address of its destination. For routing efficiency, the IP address is considered in two parts: the prefix which identifies the physical network, and the suffix which identifies a computer on the network. A unique prefix is needed for each network in an internet. For the global Internet, network numbers are obtained from Internet Service Providers (ISPs). ISPs coordinate with a central organization called the Internet Assigned Number Authority (IANA).
When interacting with mere humans, software uses dotted decimal notation; each 8 bits is treated as an unsigned binary integer separated by periods. IP reserves host address 0 to denote a network. 140.211.0.0 denotes the network that was assigned the class B prefix 140.211.
5.1.3 Netmasks
Netmasks are used to identify which part of the address is the Network ID and which part is the Host ID. This is done by a logical bitwise-AND of the IP address and the netmask. For class A networks the netmask is always 255.0.0.0; for class B networks it is 255.255.0.0 and for class C networks the netmask is 255.255.255.0.
16
An Introduction to TCP/IP
5.2 IP Routing
Each IP datagram travels from its source to its destination by means of routers. All hosts and routers on an internet contain IP protocol software and use a routing table to determine where to send a packet next. The destination IP address in the IP header contains the ultimate destination of the IP datagram, but it might go through several other IP addresses (routers) before reaching that destination. Routing table entries are created when TCP/IP initializes. The entries can be updated manually by a network administrator or automatically by employing a routing protocol such as Routing Information Protocol (RIP). Routing table entries provide needed information to each local host regarding how to communicate with remote networks and hosts. When IP receives a packet from a higher-level protocol, like TCP or UDP, the routing table is searched for the route that is the closest match to the destination IP address. The most specific to the least specific route is in the following order:
A route that matches the destination IP address (host route). A route that matches the network ID of the destination IP address (network route). The default route.
If a matching route is not found, IP discards the datagram.
An Introduction to TCP/IP
17
Fragmentation: IP packets may be divided into smaller packets. This permits a large
packet to travel across a network which only accepts smaller packets. IP fragments and reassembles packets transparent to the higher layers.
Timeouts: Each IP packet has a Time To Live (TTL) field, that is decremented every time
a packet moves through a router. If TTL reaches zero, the packet is discarded.
Options: IP allows a packet's sender to set requirements on the path the packet takes
through the network (source route); the route taken by a packet may be traced (record route) and packets may be labeled with security features.
5.3 ARP
The Address Resolution Protocol is used to translate virtual addresses to physical ones. The network hardware does not understand the software-maintained IP addresses. IP uses ARP to translate the 32-bit IP address to a physical address that matches the addressing scheme of the underlying hardware (for Ethernet, the 48-bit MAC address). There are three general addressing strategies: 1. Table lookup 2. Translation performed by a mathematical function 3. Message exchange TCP/IP can use any of the three. ARP employs the third strategy, message exchange. ARP defines a request and a response. A request message is placed in a hardware frame (e.g., an Ethernet frame), and broadcast to all computers on the network. Only the computer whose IP address matches the request sends a response.
5.4.1 UDP
This is a minimal service over IP, adding only optional checksumming of data and multiplexing by port number. UDP is often used by applications that need multicast or broadcast delivery, services not offered by TCP. Like IP, UDP is connectionless and works with datagrams.
5.4.2 TCP
TCP is a connection-oriented transport service; it provides end-to-end reliability, resequencing, and flow control. TCP enables two hosts to establish a connection and exchange streams of data, which are treated in bytes. The delivery of data in the proper order is guaranteed. TCP can detect errors or lost data and can trigger retransmission until the data is received, complete and without errors.
18
An Introduction to TCP/IP
5.4.2.1 TCP Connection/Socket A TCP connection is done with a 3-way handshake between a client and a server. The following is a simplified explanation of this process.
The client asks for a connection by sending a TCP segment with the SYN control bit set. The server responds with its own SYN segment that includes identifying information that
was sent by the client in the initial SYN segment.
An Introduction to TCP/IP
19
Host A (Client)
Host B (Server)
The sequence number is used to ensure the data is reassembled in the proper order before being passed to an application protocol. Acknowledgement Number - This 32-bit number is the other hosts sequence number + 1 of the last successfully received byte of data. It is the sequence number of the next expected byte of data. This field is only valid when the ACK control bit is set. Since sending an ACK costs nothing, (because it and the Acknowledgement Number field are part of the header) the ACK control bit is always set after a connection has been established. The Acknowledgement Number ensures that the TCP segment arrived at its destination. Control Bits - This 6-bit field comprises the following 1-bit flags (left to right):
URG - Makes the Urgent Pointer field significant. ACK - Makes the Acknowledgement Number field significant. PSH - The Push Function causes TCP to promptly deliver data. RST - Reset the connection. SYN - Synchronize sequence numbers. FIN - No more data from sender, but can still receive data.
Window Size - This 16-bit number states how much data the receiving end of the TCP connection will allow. The sending end of the TCP connection must stop and wait for an acknowledgement after it has sent the amount of data allowed.
20 An Introduction to TCP/IP
Checksum - This 16-bit number is the ones complement of the ones complement sum of all bytes in the TCP header, any data that is in the segment and part of the IP packet. A checksum can only detect some errors, not all, and cannot correct any.
5.4.3 ICMP
Internet Control Message Protocol is a set of messages that communicate errors and other conditions that require attention. ICMP messages, delivered in IP datagrams, are usually acted on by either IP, TCP or UDP. Some ICMP messages are returned to application protocols. A common use of ICMP is pinging a host. The Ping command (Packet INternet Groper) is a utility that determines whether a specific IP address is accessible. It sends an ICMP echo request and waits for a reply. Ping can be used to transmit a series of packets to measure average roundtrip times and packet loss percentages.
5.5.1 DNS
The Domain Name System is a distributed database of domain name and IP address bindings. A domain name is simply an alphanumeric character string separated into segments by periods. It represents a specific and unique place in the domain name space. DNS makes it possible for us to use identifiers such as zworld.com to refer to an IP address on the Internet. Name servers contain information on some segment of the DNS and make that information available to clients who are called resolvers.
An Introduction to TCP/IP
21
5.5.1.1 DCRTCP.LIB Implementation of DNS The resolve() function in DCRTCP.LIB immediately converts a dotted decimal IP address to its corresponding binary IP address and returns this value. If resolve() is passed a domain name, a series of queries take place between the computer that called resolve() and computers running name server software. For example, to resolve the domain name www.rabbitsemiconductor.com, the following code (available in SAMPLES\TCP\DNS.C) can be used. #define #define #define #define MY_IP_ADDRESS "10.10.6.101" MY_NETMASK "255.255.255.0" MY_GATEWAY "10.10.6.19" MY_NAMESERVER "10.10.6.19"
#memmap xmem #use dcrtcp.lib main() { longword ip; char buffer[20]; sock_init(); ip=resolve("www.rabbitsemiconductor.com"); if(ip==0) printf("couldnt find www.rabbitsemiconductor.com\n"); else printf("%s is www.rabbitsemiconductors address.\n, inet_ntoa(buffer,ip)); } Your local name server is specified by the configuration macro MY_NAMESERVER. Chances are that your local name server does not have the requested information, so it queries the root server. The root server will not know the IP address either, but it will know where to find the name server that contains authoritative information for the .com zone. This information is returned to your local name server, which then sends a query to the name server for the .com zone. Again, this name server does not know the requested IP address, but does know the local name server that handles rabbitsemiconductor.com. This information is sent back to your local name server, who sends a final query to the local name server of rabbitsemiconductor.com. This local name server returns the requested IP address of www.rabbitsemiconductor.com to your local name server, who then passes it to your computer.
22
An Introduction to TCP/IP
An Introduction to TCP/IP
23
24
An Introduction to TCP/IP
An Introduction to TCP/IP
25
A rule of thumb is to call tcp_tick() around 10 times per second, although slower or faster call rates should also work. The Ethernet interface chip has a large buffer memory, and TCP/IP is adaptive to the data rates that both end of the connection can handle; thus the system will generally keep working over a wide variety of tick rates. A more difficult question is how much computing time is consumed by each call to tcp_tick(). Rough numbers are less than a millisecond if there is nothing to do, 10s of milliseconds for typical packet processing, and 100s of milliseconds under exceptional circumstances.
26
An Introduction to TCP/IP
6.3.1.1 Example of Passive Open The following example waits for a connection on port 7, and echoes back each line as you enter it. To test this program, change the configuration information and start it running. From a connected PC, telnet to the device using port 7. #define MY_IP_ADDRESS "10.10.6.101" #define MY_NETMASK "255.255.255.0" #define MY_GATEWAY "10.10.6.19" #memmap xmem #use "dcrtcp.lib" #define PORT 7 tcp_Socket echosock; main() { char buffer[2048]; int status; sock_init(); while(1) { tcp_listen(&echosock,PORT,0,0,NULL,0); sock_wait_established(&echosock,0,NULL,&status); printf("Receiving incoming connection\n"); sock_mode(&echosock,TCP_MODE_ASCII); while(tcp_tick(&echosock)) { sock_wait_input(&echosock,0,NULL,&status); if(sock_gets(&echosock,buffer,2048)) sock_puts(&echosock,buffer); } sock_err: switch(status) { case 1: /* foreign host closed */ printf("User closed session\n"); break; case -1: /* time-out */ printf("\nConnection timed out\n"); break; } } }
An Introduction to TCP/IP
27
#define WEBSITE "www.zweng.com" #define FILE "/" #define PORT 80 #memmap xmem #use "dcrtcp.lib" main() { int status; tcp_Socket s; char buffer[2048]; longword ip; sock_init(); ip=resolve(WEBSITE); tcp_open(&s,0,ip,PORT,NULL); sock_wait_established(&s,0,NULL,&status); sock_mode(&s,TCP_MODE_ASCII); sprintf(buffer,"GET %s\r\n",FILE); sock_puts(&s,buffer); while(tcp_tick(&s)) { sock_wait_input(&s,0,NULL,&status); if(sock_gets(&s,buffer,2048)) printf("%s\n",buffer); } return 0; sock_err: switch(status) { case 1: /* foreign host closed */ printf("User closed session\n"); break; case -1: /* time-out */ printf("\nConnection timed out\n"); break; } }
28 An Introduction to TCP/IP
tcp_open() and tcp_listen() have already been explained in the active and passive sections. sock_close() should be called when you want to end a connection. A call to sock_close() may not immediately close the connection because it may take some time to send the request to end the connection and receive the acknowledgements. If you want to be sure that the connection is completely closed before continuing your program, you can call tcp_tick() with the address of the socket. When tcp_tick() returns zero, then the socket is completely closed. Please note that if there is data left to be read on the socket, the socket will not completely close. There may be some reason that you want to cancel an open connection. In this case, you can call sock_abort(). This function will cause a TCP reset to be sent to the other end, and other future packets sent on this connection will be ignored. For performance reasons, data may not be immediately sent from a socket to its destination. If your application requires the data to be sent immediately, you can call sock_flush(). This function will cause DCRTCP.LIB to try sending any pending data immediately. If you know ahead of time that data will need to be sent immediately, call sock_flushnext()on the socket. This function will cause the next set of data written to the socket to be sent immediately, and is more efficient than sock_flush().
An Introduction to TCP/IP
29
When you supply tcp_tick() with a pointer to a TCP socket, it will first process the packets and then check to see if the socket has an established connection. It returns a zero if the socket is no longer open because of an error condition or if the socket has been closed. You can use this functionality after calling sock_close() on the socket to determine whether the socket is completely closed. sock_close(&my_socket); while(tcp_tick(&my_socket)) { // check time-out, do idle work... } The status functions can be used to avoid blocking when using sock_write() and some of the other I/O functions. The following blocks of code illustrate a way of using the buffer management and socket management functions to avoid blocking. The first block of code checks to make sure that there is enough room in the buffer before adding data with a blocking function. The second makes sure that there is a string terminated with a new line in the buffer, or that the buffer is full before calling sock_gets(). if(sock_tbleft(&my_socket,size)) { sock_write(&my_socket,buffer,size); } or: sock_mode(&my_socket,TCP_MODE_ASCII); if(sock_bytesready(&my_socket) != -1) { sock_gets(buffer,MAX_BUFFER); }
30
An Introduction to TCP/IP
There are two modes of reading and writing to TCP sockets: ASCII and binary. By default, a socket is opened in binary mode, but you can change that with a call to sock_mode(). When a socket is in ASCII mode, DCRTCP.LIB assumes that the data is an ASCII stream with record boundaries on the newline characters for some of the functions. This behavior means sock_bytesready() will return >=0 only when a complete newline-terminated string is in the buffer or the buffer is full. The sock_puts() function will automatically place a newline character at the end of a string, and sock_gets() will strip the newline character. When in binary mode, do not use sock_gets().
The UDP protocol is useful when sending messages where either a lost message does not cause a system failure or is handled by the application. Since UDP is a simple protocol and you have control over the retransmissions, you can decide if you can trade low latency for high reliability. Another advantage of UDP is the ability to broadcast packets to a number of computers on the same network. When done properly, broadcasts can reduce overall network traffic because information does not have to be duplicated when there are multiple destinations.
An Introduction to TCP/IP
31
6.4.2 Writing
The normal socket functions you used for writing to a TCP socket will work for a UDP socket, but since UDP is a significantly different service, the result could be different. Each atomic write sock_putc(), sock_puts(), sock_write(), or sock_fastwrite()places its data into a single UDP packet. Since UDP does not guarantee delivery or ordering of packets, the data received may be different either in order or content than the data sent.
6.4.3 Reading
There are two ways to read packets using DCRTCP.LIB. The first method uses the normal sock_getc(), sock_gets(), sock_read(), and sock_fastread() functions. These functions will read the data as it came into the socket, which is not necessarily the data that was written to the socket. The second mode of operation for reading uses sock_recv_init(), sock_recv(), and sock_recv_from(). The sock_recv_init() function installs a large buffer area that gets divided into smaller buffers. Whenever a datagram arrives, DCRTCP.LIB stuffs that datagram into one of these new buffers. sock_recv() scans the buffers for any datagrams received by that socket. If there is a datagram, the length is returned and the user buffer is filled, otherwise it returns zero. The sock_recv_from() function works like sock_recv(), but it allows you to record the IP address where the datagram originated. If you want to reply, you can open a new UDP socket with the IP address modified by sock_recv_from(). There is no way to send UDP packets without a socket. After calling sock_recv_init() on the socket, you should not use sock_getc(), sock_read(), or sock_fastread().
6.4.4 Checksums
There is an optional checksum field inside the UDP header. This field verifies only the header portion of the packet and doesnt cover any part of the data. This feature can be disabled on a reliable network where the application has the ability to detect transmission errors. Disabling the UDP checksum can increase the performance of UDP packets moving through DCRTCP.LIB. This feature can be modified by:
sock_mode(s, UDP_MODE_CHK); sock_mode(s, UDP_MODE_NOCHK);
32
The other functions do not return until they have completed or there is an error. If it is important to avoid blocking, you can check the conditions of an operation to insure that it will not block.
sock_mode(socket,TCP_MODE_ASCII); ... if (sock_bytesready(&my_socket) != -1){ sock_gets(buffer,MAX_BUFFER); }
In this case sock_gets() will not block because it will be called only when there is a complete new line terminated record to read.
An Introduction to TCP/IP
33
34
An Introduction to TCP/IP
7. References
1. A two-part article, Introduction to TCP/IP, in Embedded Systems Programming discusses issues related to programming embedded systems. http://www.embedded.com/internet/9912/9912ia1.htm 2. Ethereal is a good, free program for viewing network traffic. It works under various Unix operating systems and under Windows. http://www.ethereal.com 3. Computer Networks and Internets, Douglas E. Comer. Published by Prentice Hall. ISBN 013-239070-1. This book gives an excellent high-level description of networks and their interfaces. 4. TCP/IP Illustrated, Volume 1 The Protocols, W. Richard Stevens. Published by AddisonWesley. ISBN 0-20-163346-9. This book gives many useful low-level details about TCP/IP, UDP and ICMP.
An Introduction to TCP/IP
35
36
An Introduction to TCP/IP
Notice to Users
Z-WORLD PRODUCTS ARE NOT AUTHORIZED FOR USE AS CRITICAL COMPONENTS IN LIFE-SUPPORT DEVICES OR SYSTEMS UNLESS A SPECIFIC WRITTEN AGREEMENT REGARDING SUCH INTENDED USE IS ENTERED INTO BETWEEN THE CUSTOMER AND Z-WORLD PRIOR TO USE. Life-support devices or systems are devices or systems intended for surgical implantation into the body or to sustain life, and whose failure to perform, when properly used in accordance with instructions for use provided in the labeling and users manual, can be reasonably expected to result in significant injury. No complex software or hardware system is perfect. Bugs are always present in a system of any size. In order to prevent danger to life or property, it is the responsibility of the system designer to incorporate redundant protective mechanisms appropriate to the risk involved. The TCP/IP software is designed for use only with Rabbit Semiconductor chips.
An Introduction to TCP/IP
37