diff options
Diffstat (limited to 'usr/src/man/man7p/tcp.7p')
| -rw-r--r-- | usr/src/man/man7p/tcp.7p | 898 |
1 files changed, 0 insertions, 898 deletions
diff --git a/usr/src/man/man7p/tcp.7p b/usr/src/man/man7p/tcp.7p deleted file mode 100644 index 6dc5413c42..0000000000 --- a/usr/src/man/man7p/tcp.7p +++ /dev/null @@ -1,898 +0,0 @@ -'\" -.\" This file and its contents are supplied under the terms of the -.\" Common Development and Distribution License ("CDDL"), version 1.0. -.\" You may only use this file in accordance with the terms of version -.\" 1.0 of the CDDL. -.\" -.\" A full copy of the text of the CDDL should have accompanied this -.\" source. A copy of the CDDL is also available via the Internet at -.\" http://www.illumos.org/license/CDDL. -.\" -.\" -.\" Copyright (c) 2006, Sun Microsystems, Inc. All Rights Reserved. -.\" Copyright (c) 2011 Nexenta Systems, Inc. All rights reserved. -.\" Copyright 2019 Joyent, Inc. -.\" Copyright 2022 Oxide Computer Company -.\" Copyright 1989 AT&T -.\" -.Dd "Jan 07, 2019" -.Dt TCP 7P -.Os -.Sh NAME -.Nm tcp , -.Nm TCP -.Nd Internet Transmission Control Protocol -.Sh SYNOPSIS -.In sys/socket.h -.In netinet/in.h -.In netinet/tcp.h -.Bd -literal -s = socket(AF_INET, SOCK_STREAM, 0); -s = socket(AF_INET6, SOCK_STREAM, 0); -t = t_open("/dev/tcp", O_RDWR); -t = t_open("/dev/tcp6", O_RDWR); -.Ed -.Sh DESCRIPTION -TCP is the virtual circuit protocol of the Internet protocol family. -It provides reliable, flow-controlled, in-order, two-way transmission of data. -It is a byte-stream protocol layered above the Internet Protocol -.Po Sy IP Pc , -or the Internet Protocol Version 6 -.Po Sy IPv6 Pc , -the Internet protocol family's -internetwork datagram delivery protocol. -.Pp -Programs can access TCP using the socket interface as a -.Dv SOCK_STREAM -socket type, or using the Transport Level Interface -.Po Sy TLI Pc -where it supports the connection-oriented -.Po Dv BT_COTS_ORD Pc -service type. -.Pp -A checksum over all data helps TCP provide reliable communication. -Using a window-based flow control mechanism that makes use of positive -acknowledgements, sequence numbers, and a retransmission strategy, TCP can -usually recover when datagrams are damaged, delayed, duplicated or delivered -out of order by the underlying medium. -.Pp -TCP provides several socket options, defined in -.In netinet/tcp.h -and described throughout this document, -which may be set using -.Xr setsockopt 3SOCKET -and read using -.Xr getsockopt 3SOCKET . -The -.Fa level -argument for these calls is the protocol number for TCP, available from -.Xr getprotobyname 3SOCKET . -IP level options may also be used with TCP. -See -.Xr ip 7P -and -.Xr ip6 7P . -.Ss "Listening And Connecting" -TCP uses IP's host-level addressing and adds its own per-host -collection of -.Dq port addresses . -The endpoints of a TCP connection are -identified by the combination of an IPv4 or IPv6 address and a TCP -port number. -Although other protocols, such as the User Datagram Protocol -.Po Sy UDP Pc , -may use the same host and port address format, the port space of these -protocols is distinct. -See -.Xr inet 7P -and -.Xr inet6 7P -for details on -the common aspects of addressing in the Internet protocol family. -.Pp -Sockets utilizing TCP are either -.Dq active -or -.Dq passive . -Active sockets -initiate connections to passive sockets. -Passive sockets must have their local IPv4 or IPv6 address and TCP port number -bound with the -.Xr bind 3SOCKET -system call after the socket is created. -If an active socket has not been bound by the time -.Xr connect 3SOCKET -is called, then the operating system will choose a local address and port for -the application. -By default, TCP sockets are active. -A passive socket is created by calling the -.Xr listen 3SOCKET -system call after binding, which establishes a queueing parameter for the -passive socket. -Connections to the passive socket can then be received using the -.Xr accept 3SOCKET -system call. -Active sockets use the -.Xr connect 3SOCKET -call after binding to initiate connections. -.Pp -If incoming connection requests include an IP source route option, then the -reverse source route will be used when responding. -.Pp -By using the special value -.Dv INADDR_ANY -with IPv4, or the unspecified -address (all zeroes) with IPv6, the local IP address can be left -unspecified in the -.Fn bind -call by either active or passive TCP -sockets. -This feature is usually used if the local address is either unknown or -irrelevant. -If left unspecified, the local IP address will be bound at connection time to -the address of the network interface used to service the connection. -For passive sockets, this is the destination address used by the connecting -peer. -For active sockets, this is usually an address on the same subnet as the -destination or default gateway address, although the rules can be more complex. -See -.Sy "Source Address Selection" -in -.Xr inet6 7P -for a detailed discussion of how this works in IPv6. -.Pp -Note that no two TCP sockets can be bound to the same port unless the bound IP -addresses are different. -IPv4 -.Dv INADDR_ANY -and IPv6 unspecified addresses compare as equal to any IPv4 or IPv6 address. -For example, if a socket is bound to -.Dv INADDR_ANY -or the unspecified address and port -.Em N , -no other socket can bind to port -.Em N , -regardless of the binding address. -This special consideration of -.Dv INADDR_ANY -and the unspecified address can be changed using the socket option -.Dv SO_REUSEADDR . -If -.Dv SO_REUSEADDR -is set on a socket doing a bind, IPv4 -.Dv INADDR_ANY -and the IPv6 unspecified address do not compare as equal to any IP address. -This means that as long as the two sockets are not both bound to -.Dv INADDR_ANY , -the unspecified address, or the same IP address, then the two sockets can be -bound to the same port. -.Pp -If an application does not want to allow another socket using the -.Dv SO_REUSEADDR -option to bind to a port its socket is bound to, the -application can set the socket-level -.Po Dv SOL_SOCKET Pc -option -.Dv SO_EXCLBIND -on a socket. -The -option values of 0 and 1 mean enabling and disabling the option respectively. -Once this option is enabled on a socket, no other socket can be bound to the -same port. -.Ss "Sending And Receiving Data" -Once a connection has been established, data can be exchanged using the -.Xr read 2 -and -.Xr write 2 -system calls. -If, after sending data, the local TCP receives no acknowledgements from its -peer for a period of time (for example, if the remote machine crashes), the -connection is closed and an error is returned. -.Pp -When a peer is sending data, it will only send up to the advertised -.Dq receive window , -which is determined by how much more data the recipient can fit in its buffer. -Applications can use the socket-level option -.Dv SO_RCVBUF -to increase or decrease the receive buffer size. -Similarly, the socket-level option -.Dv SO_SNDBUF -can be used to allow TCP to buffer more unacknowledged and unsent data locally. -.Pp -Under most circumstances, TCP will send data when it is written by the -application. -When outstanding data has not yet been acknowledged, though, TCP will gather -small amounts of output to be sent as a single packet once an acknowledgement -has been received. -Usually referred to as Nagle's Algorithm (RFC 896), this behavior helps prevent -flooding the network with many small packets. -.Pp -However, for some highly interactive clients (such as remote shells or -windowing systems that send a stream of keypresses or mouse events), this -batching may cause significant delays. -To disable this behavior, TCP provides a boolean socket option, -.Dv TCP_NODELAY . -.Pp -Conversely, for other applications, it may be desirable for TCP not to send out -any data until a full TCP segment can be sent. -To enable this behavior, an application can use the TCP-level socket option -.Dv TCP_CORK . -When set to a non-zero value, TCP will only send out a full TCP segment. -When -.Dv TCP_CORK -is set to zero after it has been enabled, all currently buffered data is sent -out (as permitted by the peer's receive window and the current congestion -window). -.Pp -Still other latency-sensitive applications rely on receiving a quick -notification that their packets have been successfully received. -To satisfy the requirements of those applications, setting the -.Dv TCP_QUICKACK -option to a non-zero value will instruct the TCP stack to send an acknowlegment -immediately upon receipt of a packet, rather than waiting to acknowledge -multiple packets at once. -.Pp -TCP provides an urgent data mechanism, which may be invoked using the -out-of-band provisions of -.Xr send 3SOCKET . -The caller may mark one byte as -.Dq urgent -with the -.Dv MSG_OOB -flag to -.Xr send 3SOCKET . -This sets an -.Dq urgent pointer -pointing to this byte in the TCP stream. -The receiver on the other side of the stream is notified of the urgent data by a -.Dv SIGURG -signal. -The -.Dv SIOCATMARK -.Xr ioctl 2 -request returns a value indicating whether the stream is at the urgent mark. -Because the system never returns data across the urgent mark in a single -.Xr read 2 -call, it is possible to -advance to the urgent data in a simple loop which reads data, testing the -socket with the -.Dv SIOCATMARK -.Fn ioctl -request, until it reaches the mark. -.Ss "Congestion Control" -TCP follows the congestion control algorithm described in RFC 2581, and -also supports the initial congestion window (cwnd) changes in RFC 3390. -The initial cwnd calculation can be overridden by the socket option -.Dv TCP_INIT_CWND . -An application can use this option to set the initial cwnd to a -specified number of TCP segments. -This applies to the cases when the connection -first starts and restarts after an idle period. -The process must have the -.Dv PRIV_SYS_NET_CONFIG -privilege if it wants to specify a number greater than that -calculated by RFC 3390. -.Pp -The operating system also provides alternative algorithms that may be more -appropriate for your application, including the CUBIC congestion control -algorithm described in RFC 8312. -These can be configured system-wide using -.Xr ipadm 1M , -or on a per-connection basis with the TCP-level socket option -.Dv TCP_CONGESTION , -whose argument is the name of the algorithm to use -.Pq for example Dq cubic . -If the requested algorithm does not exist, then -.Fn setsockopt -will fail, and -.Va errno -will be set to -.Er ENOENT . -.Ss "TCP Keep-Alive" -Since TCP determines whether a remote peer is no longer reachable by timing out -waiting for acknowledgements, a host that never sends any new data may never -notice a peer that has gone away. -While consumers can avoid this problem by sending their own periodic heartbeat -messages (Transport Layer Security does this, for example), -TCP describes an optional keep-alive mechanism in RFC 1122. -Applications can enable it using the socket-level option -.Dv SO_KEEPALIVE . -When enabled, the first keep-alive probe is sent out after a TCP connection is -idle for two hours. -If the peer does not respond to the probe within eight minutes, the TCP -connection is aborted. -An application can alter the probe behavior using the following TCP-level -socket options: -.Bl -tag -offset indent -width 16m -.It Dv TCP_KEEPALIVE_THRESHOLD -Determines the interval for sending the first probe. -The option value is specified as an unsigned integer in milliseconds. -The system default is controlled by the TCP -.Nm ndd -parameter -.Cm tcp_keepalive_interval . -The minimum value is ten seconds. -The maximum is ten days, while the default is two hours. -.It Dv TCP_KEEPALIVE_ABORT_THRESHOLD -If TCP does not receive a response to the probe, then this option determines -how long to wait before aborting a TCP connection. -The option value is an unsigned integer in milliseconds. -The value zero indicates that TCP should never time -out and abort the connection when probing. -The system default is controlled by the TCP -.Nm ndd -parameter -.Sy tcp_keepalive_abort_interval . -The default is eight minutes. -.It Dv TCP_KEEPIDLE -This option, like -.Dv TCP_KEEPALIVE_THRESHOLD , -determines the interval for sending the first probe, except that -the option value is an unsigned integer in -.Sy seconds . -It is provided primarily for compatibility with other Unix flavors. -.It Dv TCP_KEEPCNT -This option specifies the number of keep-alive probes that should be sent -without any response from the peer before aborting the connection. -.It Dv TCP_KEEPINTVL -This option specifies the interval in seconds between successive, -unacknowledged keep-alive probes. -.El -.Ss "Additional Configuration" -illumos supports TCP Extensions for High Performance (RFC 7323) -which includes the window scale and timestamp options, and Protection Against -Wrap Around Sequence Numbers -.Po Sy PAWS Pc . -Note that if timestamps are negotiated on -a connection, received segments without timestamps on that connection are -silently dropped per the suggestion in the RFC. illumos also supports Selective -Acknowledgment -.Po Sy SACK Pc -capabilities (RFC 2018) and Explicit Congestion -Notification -.Po Sy ECN Pc -mechanism (RFC 3168). -.Pp -Turn on the window scale option in one of the following ways: -.Bl -bullet -offset indent -width 4m -.It -An application can set -.Dv SO_SNDBUF -or -.Dv SO_RCVBUF -size in the -.Fn setsockopt -option to be larger than 64K. -This must be done -.Em before -the program calls -.Fn listen -or -.Fn connect , -because the window scale -option is negotiated when the connection is established. -Once the connection -has been made, it is too late to increase the send or receive window beyond the -default TCP limit of 64K. -.It -For all applications, use -.Xr ndd 1M -to modify the configuration parameter -.Cm tcp_wscale_always . -If -.Cm tcp_wscale_always -is set to -.Sy 1 , -the -window scale option will always be set when connecting to a remote system. -If -.Cm tcp_wscale_always -is -.Sy 0 , -the window scale option will be set only if -the user has requested a send or receive window larger than 64K. -The default value of -.Cm tcp_wscale_always -is -.Sy 1 . -.It -Regardless of the value of -.Cm tcp_wscale_always , -the window scale option -will always be included in a connect acknowledgement if the connecting system -has used the option. -.El -.Pp -Turn on SACK capabilities in the following way: -.Bl -bullet -offset indent -width 4m -.It -Use -.Nm ndd -to modify the configuration parameter -.Cm tcp_sack_permitted . -If -.Cm tcp_sack_permitted -is set to -.Sy 0 , -TCP will not accept SACK or send out SACK information. -If -.Cm tcp_sack_permitted -is -set to -.Sy 1 , -TCP will not initiate a connection with SACK permitted option in the -.Sy SYN -segment, but will respond with SACK permitted option in the -.Sy SYN|ACK -segment if an incoming connection request has the SACK permitted option. -This means that TCP will only accept SACK information if the other side of the -connection also accepts SACK information. -If -.Cm tcp_sack_permitted -is set to -.Sy 2 , -it will both initiate and accept connections with SACK information. -The default for -.Cm tcp_sack_permitted -is -.Sy 2 -.Pq active enabled . -.El -.Pp -Turn on the TCP ECN mechanism in the following way: -.Bl -bullet -offset indent -width 4m -.It -Use -.Nm ndd -to modify the configuration parameter -.Cm tcp_ecn_permitted . -If -.Cm tcp_ecn_permitted -is set to -.Sy 0 , -then TCP will not negotiate with a peer that supports ECN mechanism. -If -.Cm tcp_ecn_permitted -is set to -.Sy 1 -when initiating a connection, TCP will not tell a peer that it supports -.Sy ECN -mechanism. -However, it will tell a peer that it supports -.Sy ECN -mechanism when accepting a new incoming connection request if the peer -indicates that it supports -.Sy ECN -mechanism in the -.Sy SYN -segment. -If -.Cm tcp_ecn_permitted -is set to 2, in addition to negotiating with a peer on -.Sy ECN -mechanism when accepting connections, TCP will indicate in the outgoing -.Sy SYN -segment that it supports -.Sy ECN -mechanism when TCP makes active outgoing connections. -The default for -.Cm tcp_ecn_permitted -is 1. -.El -.Pp -Turn on the timestamp option in the following way: -.Bl -bullet -offset indent -width 4m -.It -Use -.Nm ndd -to modify the configuration parameter -.Cm tcp_tstamp_always . -If -.Cm tcp_tstamp_always -is -.Sy 1 , -the timestamp option will always be set -when connecting to a remote machine. -If -.Cm tcp_tstamp_always -is -.Sy 0 , -the timestamp option will not be set when connecting to a remote system. -The -default for -.Cm tcp_tstamp_always -is -.Sy 0 . -.It -Regardless of the value of -.Cm tcp_tstamp_always , -the timestamp option will -always be included in a connect acknowledgement (and all succeeding packets) if -the connecting system has used the timestamp option. -.El -.Pp -Use the following procedure to turn on the timestamp option only when the -window scale option is in effect: -.Bl -bullet -offset indent -width 4m -.It -Use -.Nm ndd -to modify the configuration parameter -.Cm tcp_tstamp_if_wscale . -Setting -.Cm tcp_tstamp_if_wscale -to -.Sy 1 -will cause the timestamp option -to be set when connecting to a remote system, if the window scale option has -been set. -If -.Cm tcp_tstamp_if_wscale -is -.Sy 0 , -the timestamp option will -not be set when connecting to a remote system. -The default for -.Cm tcp_tstamp_if_wscale -is -.Sy 1 . -.El -.Pp -Protection Against Wrap Around Sequence Numbers -.Po Sy PAWS Pc -is always used when the -timestamp option is set. -.Pp -The operating system also supports multiple methods of generating initial sequence numbers. -One of these methods is the improved technique suggested in RFC 1948. -We -.Em HIGHLY -recommend that you set sequence number generation parameters as -close to boot time as possible. -This prevents sequence number problems on -connections that use the same connection-ID as ones that used a different -sequence number generation. -The -.Sy svc:/network/initial:default -service configures the initial sequence number generation. -The service reads the value contained in the configuration file -.Pa /etc/default/inetinit -to determine which method to use. -.Pp -The -.Pa /etc/default/inetinit -file is an unstable interface, and may change in future releases. -.Sh EXAMPLES -.Ss Example 1: Connecting to a server -.Bd -literal -$ gcc -std=c99 -Wall -lsocket -o client client.c -$ cat client.c -#include <sys/socket.h> -#include <netinet/in.h> -#include <netinet/tcp.h> -#include <netdb.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> - -int -main(int argc, char *argv[]) -{ - struct addrinfo hints, *gair, *p; - int fd, rv, rlen; - char buf[1024]; - int y = 1; - - if (argc != 3) { - fprintf(stderr, "%s <host> <port>\\n", argv[0]); - return (1); - } - - memset(&hints, 0, sizeof (hints)); - hints.ai_family = PF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - - if ((rv = getaddrinfo(argv[1], argv[2], &hints, &gair)) != 0) { - fprintf(stderr, "getaddrinfo() failed: %s\\n", - gai_strerror(rv)); - return (1); - } - - for (p = gair; p != NULL; p = p->ai_next) { - if ((fd = socket( - p->ai_family, - p->ai_socktype, - p->ai_protocol)) == -1) { - perror("socket() failed"); - continue; - } - - if (connect(fd, p->ai_addr, p->ai_addrlen) == -1) { - close(fd); - perror("connect() failed"); - continue; - } - - break; - } - - if (p == NULL) { - fprintf(stderr, "failed to connect to server\\n"); - return (1); - } - - freeaddrinfo(gair); - - if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &y, - sizeof (y)) == -1) { - perror("setsockopt(SO_KEEPALIVE) failed"); - return (1); - } - - while ((rlen = read(fd, buf, sizeof (buf))) > 0) { - fwrite(buf, rlen, 1, stdout); - } - - if (rlen == -1) { - perror("read() failed"); - } - - fflush(stdout); - - if (close(fd) == -1) { - perror("close() failed"); - } - - return (0); -} -$ ./client 127.0.0.1 8080 -hello -$ ./client ::1 8080 -hello -.Ed -.Ss Example 2: Accepting client connections -.Bd -literal -$ gcc -std=c99 -Wall -lsocket -o server server.c -$ cat server.c -#include <sys/socket.h> -#include <netinet/in.h> -#include <netinet/tcp.h> -#include <netdb.h> -#include <stdio.h> -#include <string.h> -#include <unistd.h> -#include <arpa/inet.h> - -void -logmsg(struct sockaddr *s, int bytes) -{ - char dq[INET6_ADDRSTRLEN]; - - switch (s->sa_family) { - case AF_INET: { - struct sockaddr_in *s4 = (struct sockaddr_in *)s; - inet_ntop(AF_INET, &s4->sin_addr, dq, sizeof (dq)); - fprintf(stdout, "sent %d bytes to %s:%d\\n", - bytes, dq, ntohs(s4->sin_port)); - break; - } - case AF_INET6: { - struct sockaddr_in6 *s6 = (struct sockaddr_in6 *)s; - inet_ntop(AF_INET6, &s6->sin6_addr, dq, sizeof (dq)); - fprintf(stdout, "sent %d bytes to [%s]:%d\\n", - bytes, dq, ntohs(s6->sin6_port)); - break; - } - default: - fprintf(stdout, "sent %d bytes to unknown client\\n", - bytes); - break; - } -} - -int -main(int argc, char *argv[]) -{ - struct addrinfo hints, *gair, *p; - int sfd, cfd; - int slen, wlen, rv; - - if (argc != 3) { - fprintf(stderr, "%s <port> <message>\\n", argv[0]); - return (1); - } - - slen = strlen(argv[2]); - - memset(&hints, 0, sizeof (hints)); - hints.ai_family = PF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_PASSIVE; - - if ((rv = getaddrinfo(NULL, argv[1], &hints, &gair)) != 0) { - fprintf(stderr, "getaddrinfo() failed: %s\\n", - gai_strerror(rv)); - return (1); - } - - for (p = gair; p != NULL; p = p->ai_next) { - if ((sfd = socket( - p->ai_family, - p->ai_socktype, - p->ai_protocol)) == -1) { - perror("socket() failed"); - continue; - } - - if (bind(sfd, p->ai_addr, p->ai_addrlen) == -1) { - close(sfd); - perror("bind() failed"); - continue; - } - - break; - } - - if (p == NULL) { - fprintf(stderr, "server failed to bind()\\n"); - return (1); - } - - freeaddrinfo(gair); - - if (listen(sfd, 1024) != 0) { - perror("listen() failed"); - return (1); - } - - fprintf(stdout, "waiting for clients...\\n"); - - for (int times = 0; times < 5; times++) { - struct sockaddr_storage stor; - socklen_t alen = sizeof (stor); - struct sockaddr *addr = (struct sockaddr *)&stor; - - if ((cfd = accept(sfd, addr, &alen)) == -1) { - perror("accept() failed"); - continue; - } - - wlen = 0; - - do { - wlen += write(cfd, argv[2] + wlen, slen - wlen); - } while (wlen < slen); - - logmsg(addr, wlen); - - if (close(cfd) == -1) { - perror("close(cfd) failed"); - } - } - - if (close(sfd) == -1) { - perror("close(sfd) failed"); - } - - fprintf(stdout, "finished.\\n"); - - return (0); -} -$ ./server 8080 $'hello\\n' -waiting for clients... -sent 6 bytes to [::ffff:127.0.0.1]:59059 -sent 6 bytes to [::ffff:127.0.0.1]:47448 -sent 6 bytes to [::ffff:127.0.0.1]:54949 -sent 6 bytes to [::ffff:127.0.0.1]:55186 -sent 6 bytes to [::1]:62256 -finished. -.Ed -.Sh DIAGNOSTICS -A socket operation may fail if: -.Bl -tag -offset indent -width 16m -.It Er EISCONN -A -.Fn connect -operation was attempted on a socket on which a -.Fn connect -operation had already been performed. -.It Er ETIMEDOUT -A connection was dropped due to excessive retransmissions. -.It Er ECONNRESET -The remote peer forced the connection to be closed (usually because the remote -machine has lost state information about the connection due to a crash). -.It Er ECONNREFUSED -The remote peer actively refused connection establishment (usually because no -process is listening to the port). -.It Er EADDRINUSE -A -.Fn bind -operation was attempted on a socket with a network address/port pair that has -already been bound to another socket. -.It Er EADDRNOTAVAIL -A -.Fn bind -operation was attempted on a socket with a network address for which no network -interface exists. -.It Er EACCES -A -.Fn bind -operation was attempted with a -.Dq reserved -port number and the effective user ID of the process was not the privileged user. -.It Er ENOBUFS -The system ran out of memory for internal data structures. -.El -.Sh SEE ALSO -.Xr svcs 1 , -.Xr ndd 1M , -.Xr svcadm 1M , -.Xr ioctl 2 , -.Xr read 2 , -.Xr write 2 , -.Xr accept 3SOCKET , -.Xr bind 3SOCKET , -.Xr connect 3SOCKET , -.Xr getprotobyname 3SOCKET , -.Xr getsockopt 3SOCKET , -.Xr listen 3SOCKET , -.Xr send 3SOCKET , -.Xr smf 5 , -.Xr inet 7P , -.Xr inet6 7P , -.Xr ip 7P , -.Xr ip6 7P -.Rs -.%A "K. Ramakrishnan" -.%A "S. Floyd" -.%A "D. Black" -.%T "The Addition of Explicit Congestion Notification (ECN) to IP" -.%R "RFC 3168" -.%D "September 2001" -.Re -.Rs -.%A "M. Mathias" -.%A "J. Mahdavi" -.%A "S. Ford" -.%A "A. Romanow" -.%T "TCP Selective Acknowledgement Options" -.%R "RFC 2018" -.%D "October 1996" -.Re -.Rs -.%A "S. Bellovin" -.%T "Defending Against Sequence Number Attacks" -.%R "RFC 1948" -.%D "May 1996" -.Re -.Rs -.%A "D. Borman" -.%A "B. Braden" -.%A "V. Jacobson" -.%A "R. Scheffenegger, Ed." -.%T "TCP Extensions for High Performance" -.%R "RFC 7323" -.%D "September 2014" -.Re -.Rs -.%A "Jon Postel" -.%T "Transmission Control Protocol - DARPA Internet Program Protocol Specification" -.%R "RFC 793" -.%C "Network Information Center, SRI International, Menlo Park, CA." -.%D "September 1981" -.Re -.Sh NOTES -The -.Sy tcp -service is managed by the service management facility, -.Xr smf 5 , -under the service identifier -.Sy svc:/network/initial:default . -.Pp -Administrative actions on this service, such as enabling, disabling, or -requesting restart, can be performed using -.Xr svcadm 1M . -The service's -status can be queried using the -.Xr svcs 1 -command. |
